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