1. 程式人生 > >MyEclipse 2017 整合SSH三大框架 到登入功能的實現(附原始碼)

MyEclipse 2017 整合SSH三大框架 到登入功能的實現(附原始碼)

本來以為學完Java EE之後用個三大框架沒什麼難度,結果昨天搭環境就搞了一晚上,還是靠室友找了半天才找出錯誤在哪,為了避免重複踩坑,而且目前網上用myeclipse2017做環境的教程還是蠻少的,就寫篇部落格記錄一下

先看一下最終的架構
這裡寫圖片描述
整個流程參考了很多大佬的部落格,就不一一擺出來了,我這裡主要用的劉偉老師給的步驟

0.環境版本

IDE:MyEclipse 2017 stable 2.0
資料庫:mysql-community-5.7.21.0
Struts 2.1 / Spring 4.1.0 / Hibernate 4.1.4
JDK 1.8 / Tomcat 8

1.建立一個Web Project

這裡寫圖片描述

點選Next >

這裡寫圖片描述

點選 Finish

2.新增Struts 2開發能力

注意三大框架的順序是 struts -> spring -> hibernate

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

3.新增Spring開發能力

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

3.指定Spring為容器

src下建立一個名為struts.properties的檔案,內容為

struts.objectFactory=spring

5.新增Hibernate開發能力

在新增Hibernate之前,你需要先建立一個數據庫連線,這個教程很多,我之前的部落格也有記錄,就不介紹了。

建包

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

【注:Struts的antlr-2.7.2.jar和Hibernate的antlr-2.7.7.jar有衝突,必須刪除一個(例如Struts中的antlr-2.7.2.jar包)】

方法: Window->Preferences

這裡寫圖片描述

6.在applicationContext.xml中配置資料庫驅動

在完成上一步之後開啟applicationContext.xml

這裡寫圖片描述

可以看到配置用Spring來對Hibernate進行管理已經完成了,但是還缺了資料庫驅動,需要手動補上
<bean id="dataSource"> 下新增一個節點

<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>

7.Hibernate反向工程生成POJO和對映檔案

我這裡選擇UserBasic表

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

8.建立基類BaseDAO

package com.ssh.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

public class BaseDAO {
    private SessionFactory sessionFactory;

    public Session getSession(){
        Session session = sessionFactory.openSession();
        return session;
    }
    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

}

使用BaseDAO作為基類,其他所有DAO都繼承自它,這樣做的好處是注入SesseionFactory就只要一次可以完成了

註冊到Spring容器中(以下所有的註冊 意思都是在applicationContext.xml增加的程式碼)

<bean id="baseDAO" class="com.ssh.dao.BaseDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean> 

9.定義抽象DAO介面

package com.ssh.dao;

public interface UserBasicDAO {
    public boolean login(String account,String password);
}   

10.實現抽象DAO介面

package com.ssh.idao;

import org.hibernate.Query;
import org.hibernate.Session;

import com.ssh.dao.BaseDAO;
import com.ssh.dao.UserBasicDAO;

public class UserBasicDAOImp extends BaseDAO implements UserBasicDAO{
    @Override
    public boolean login(String account, String password) {
        Session session = getSession();
        String hql="from UserBasic where account = ? and password = ?";
        Query query  = session.createQuery(hql);
        query.setString(0, account);
        query.setString(1, password);
        //System.out.println(query.list().size());
        if(query.list().size()>0){
            return true;
        }
        session.close();
        return false;
    }
}

註冊DAO

<bean id="userBasicDao" class="com.ssh.idao.UserBasicDAOImp" parent="baseDAO"/>

11.開發Struts 2應用程式

  • LoginAction.java
package com.ssh.action;

import com.ssh.dao.UserBasicDAO;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{

    private String account;
    private String password;
    private UserBasicDAO dao;

    public String execute() throws Exception {
        if(dao.login(account, password)){
            return SUCCESS;
        } else {
            return ERROR;
        }
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public UserBasicDAO getDao() {
        return dao;
    }

    public void setDao(UserBasicDAO dao) {
        this.dao = dao;
    }
}
  • 註冊Action並注入DAO
<bean id="loginAction" class="com.ssh.action.LoginAction">
     <property name="dao" ref="userBasicDao"></property>
</bean>
  • struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="default" extends="struts-default">
        <action name="loginAction" class="loginAction">
            <result name="success">/index.jsp</result>
            <result name="error">/login.jsp</result>
        </action>
    </package>
</struts>    
  • login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
  <head>
  <title>login.jsp</title>
  </head>

  <body>
    <s:form action="loginAction" method="post" theme="simple">
        使用者名稱:<s:textfield name="account"/><br>
        密碼:<s:password name="password"/><br>
        <s:submit value="登入"/><s:reset value="重置"/>
    </s:form>
  </body>
</html>

最終的applicationContext.xml如下

 <?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" xmlns:tx="http://www.springframework.org/schema/tx">


    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource">
        <property name="url"
            value="jdbc:mysql://120.79.208.121:3306/">
        </property>
        <property name="username" value="root"></property>
        <property name="password" value="tanyun123"></property>
    </bean>
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>
            </props>
        </property>
        <property name="mappingResources">
            <list>
                <value>com/ssh/dto/UserBasic.hbm.xml</value></list>
        </property></bean>
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager" />
    <bean id="baseDAO" class="com.ssh.dao.BaseDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>     
    <bean id="userBasicDao" class="com.ssh.idao.UserBasicDAOImp" parent="baseDAO"/>
    <bean id="loginAction" class="com.ssh.action.LoginAction">
        <property name="dao" ref="userBasicDao"></property>
    </bean>
</beans>

如果你按照本文的操作成功,別忘了點個贊,如果沒有,則請在評論區留下報錯資訊,問題總是可以解決的~