【SSH】S2SH框架搭建

  本demo實現的是一個簡單的登陸功能。

1、開發環境

MyEclipse 10+JDK1.6+Tomact7+Struts 2.3.28.1+Spring 2.0.8+Hibernate 3.2.0

2、準備工作

新建一個web項目,並下載相應的jar包。

引入的所有jar包:

注:如果出現包衝突現象,留下高版本。

3、搭建Struts2

 1)引入jar包:asm-3.3.jar

               commons-fileupload-1.3.1.jar

               commons-io-2.2.jar

               commons-lang3-3.2.jar

               freemarker-2.3.22.jar

               javassist-3.11.0.GA.jar

              log4j-api-2.3.jar

              ognl-3.0.14.jar

              struts2-core-2.3.28.1.jar

              xword-core-2.3.28.1.jar  

 

2)在Web.xml中配置struts2

<span style="font-family:KaiTi_GB2312;font-size:18px;"><!--配置struts2 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>		<!--設置過濾 -->
	</filter-mapping></span>
 3) 從struts2壓縮包中拷貝出一個struts.xml文件放置src目錄下。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<!-- 設置成開發模式,開啓它則默認開啓了i18n.reload、configuration.xml.reload -->
	<constant name="struts.devMode" value="true" />
	
	<!--把擴展名配置爲action -->
	<constant name="struts.action.extension" value="action" />
	
	<!--把主題配置爲simple -->
	<constant name="struts.ui.theme" value="simple" />
	
	<!-- 將Action的創建交給spring來管理 -->  
  	<constant name="struts.objectFactory" value="spring" /> 
  	
  	

	<!--一個package可以包含多個action,一個Struts可以包含多個package -->
	<!--package起到分類的作用,支持繼承 -->
	<package name="struts2" extends="struts-default">

		<!--方法一 -->
		<!-- <action name="login" class="com.jmj.struts2.LoginAction"> <result 
			name="success">/main.jsp</result> <result name="input">/login.jsp</result> 
			</action> -->

		<!-- 方法二 -->
		<!--class值設爲了loginAction,即LoginAction類的bean的ID。這樣我們就把LoginAction類交給了spring管理。 -->
		<action name="login" class="loginAction">
			<result name="success">/main.jsp</result>
			<result name="input">/login.jsp</result>
		</action>
	</package>
</struts>
</span>

4、 搭建Spring

1)引入的jar包:spring.jar

               log4j-1.2.14.jar                         

               commons-logging.jar 

2)在src下建立application.xml文件

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?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:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

	

	<!-- Spring整合Hibernate主要是對hibernate的Session進行管理,包含Session的創建、提交、關閉的整個生命週期。 -->
	<!--配置sessionFactory,讓spring來創建Session -->
	<!--我們原來是用HibernateSessionFactory.java來創建Session的,現在刪除即可, 交給Spring創建。這裏,創建了一個Session工廠類的Bean,其ID爲“sessionFactory”。 -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
	</bean>

	<!-- 配置事務管理器 -->
	<!--這裏創建了一個id爲transactionManager的事務管理器,它匹配一個session工廠, <ref bean="sessionFactory"/>這個sessionFactory是指session工廠的ID。 -->
	 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	 	<property name="sessionFactory" ref="sessionFactory"/>
	 </bean>

	<!--對事務管理器進行事務設置 -->
	<!--這裏創建了一個advice(通知),對事務管理器進行事務設置,這裏意思是指,對於以save、del、update開頭的方法應用事務。 -->
	<tx:advice id="smAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="del*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
		</tx:attributes>
	</tx:advice>

	<!-- 把事務應用到具體類 -->
	<!-- <aop:config>

		<aop:pointcut id="smMethod" expression="execution(*test.service.impl.*.*(..))" />

		<aop:advisor pointcut-ref="smMethod" advice-ref="smAdvice" />

	</aop:config> -->
	
	<!--注入sessionFactory -->
	<bean id="userDao" class="com.jmj.hibernate.UserDaoImpl" scope="singleton">
		<!-- 由於該類是繼承於HibernateDaoSupport,所以需要將sessionFactory注入 -->
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<!--注入userDao -->
	<bean id="userManager" class="com.jmj.spring.UserManagerImpl">
		<property name="userDao" ref="userDao" />
	</bean>

	<!--寫action和業務邏輯層依賴注入 -->
	<!--將scope設置成prototype,預防了線程安全問題 -->
	<!--注入userManger -->
	<bean id="loginAction" class="com.jmj.struts2.LoginAction" scope="prototype">
		<property name="userManager" ref="userManager" />
	</bean>
	
	
</beans>
</span>

3)在web.xml中添加對application.xml文件的引用

<span style="font-family:KaiTi_GB2312;font-size:18px;"><!--配置applicationContext.xml -->
	<!-- * 從類路徑下加載spring的配置文件, 多個配置文件可以用逗號和空格區分 * classpath: 關鍵字特指類路徑下加載 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param></span>

5、搭建Hibernate

1)引入的jar包:Hibernate3.jar

               dom4j-1.6.1.jar

               commons-logging-1.0.4.jar

               commons-collections-2.1.1.jar

               cglib-nodep-2.2.3.jar

               jta.jar

               asm.jar

               antlr-2.7.6.jar:hibernate執行hql語句

2)在src目錄下,建立hibernate.cfg.xml文件,配置數據庫連接和hibernate與數據庫對象的關係映射文件。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<!-- 連接數據庫配置 -->
	<session-factory>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<!-- hibernate_first爲你的數據庫名稱 -->
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/s2sh_user</property>
		<property name="hibernate.connection.username">用戶名</property>
		<property name="hibernate.connection.password">密碼</property>
		<!-- 配置適配器 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<!-- 打印sql語句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化sql語句 -->
		<property name="hibernate.format_sql">true</property>
		
		 <!-- validate 加載hibernate時,驗證創建數據庫表結構 -->
        <!-- create 每次加載hibernate,重新創建數據庫表結構,這就是導致數據庫表數據丟失的原因。 -->
         <!-- create-drop 加載hibernate時創建,退出是刪除表結構 -->
         <!-- update 加載hibernate自動更新數據庫結構 -->
         
		<!-- hibernate與數據庫的對象關係映射文件**.hbm.xml -->
		<mapping resource="/com/jmj/domain/User.hbm.xml"/>
		
		
	</session-factory>
</hibernate-configuration></span>
3)建立對象關係映射文件:User.hbm.xml

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
	
<hibernate-mapping>
	<class name="com.jmj.domain.User" table="t_user">
		<id name="id" >
			<generator class="uuid"></generator>
		</id>
		<property name="username"/>
		<property name="password"></property>
	</class>
</hibernate-mapping></span>

6、整合S2SH框架

1)引入的jar包:struts2-spring-plugin-2.3.28.1.jar  -----struts2和spring整合的jar包

                mysql-connector-jar-3.1.13-bin.jar:mysql數據庫驅動

2)在web.xml文件中,加入監聽

<span style="font-family:KaiTi_GB2312;font-size:18px;"><listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener></span>
3)其他部分的代碼詳解

UserDaoImpl.java:

<span style="font-family:KaiTi_GB2312;font-size:18px;">/**  
 * @Title: UserDaoImpl.java
 * @Package com.jmj.hibernate
 * @Description: TODO
 * @author meng
 * @date 2016-5-17 下午7:46:27
 */
package com.jmj.hibernate;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.jmj.domain.User;

/**
 * ClassName: UserDaoImpl
 * 
 * @Description: TODO
 * @author meng
 * @date 2016-5-17 下午7:46:27
 */
public class UserDaoImpl
		extends
		HibernateDaoSupport
		implements
		UserDao
{
	@SuppressWarnings({ "unused",
			"rawtypes" })
	public boolean findUserByUserName(
			String username,String password)
	{
		List list=this.getHibernateTemplate().find("from User u where u.username=? and password=?",new String[]{username,password});
		
		if (null==list|| list.isEmpty())
		{
			return false;
		}
		
		return true;
		//刪除、添加、更新用戶
		/*this.getHibernateTemplate().delete(user)    
		save(user)
		update(user)*/

	}

}
</span>
UserManagerImpl.java

<span style="font-family:KaiTi_GB2312;font-size:18px;">/**  
 * @Title: UserManagerImpl.java
 * @Package com.jmj.spring
 * @Description: TODO
 * @author meng
 * @date 2016-5-17 上午11:46:23
 */
package com.jmj.spring;

import java.util.List;

import com.jmj.domain.User;
import com.jmj.hibernate.UserDao;

/**
 * ClassName: UserManagerImpl
 * @Description: TODO
 * @author meng
 * @date 2016-5-17 上午11:46:23
 */
public class UserManagerImpl
		implements
		UserManager
{
	private UserDao userDao;

	
	public UserDao getUserDao()
	{
		return userDao;
	}


	public void setUserDao(
			UserDao userDao)
	{
		this.userDao = userDao;
	}


	/* (non-Javadoc)
	 * @see com.jmj.spring.UserManager#findUser(java.lang.String, java.lang.String)
	 */
	public boolean findByUserName(String username,String password){
		if(this.userDao.findUserByUserName(username,password))
		{
			return true;
		}
		
		return false;
	}

}
</span>
LoginAction.java

<span style="font-family:KaiTi_GB2312;font-size:18px;">/**  
 * @Title: LoginAction.java
 * @Package com.jmj.struts
 * @Description: TODO
 * @author meng
 * @date 2016-5-17 上午10:24:44
 */
package com.jmj.struts2;

import java.util.Map;

import com.jmj.domain.User;
import com.jmj.spring.UserManager;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * ClassName: LoginAction
 * @Description: 登陸Action
 * @author meng
 * @date 2016-5-17 上午10:24:44
 */
public class LoginAction
		extends
		ActionSupport
{
	private User user;
	
	public User getUser()
	{
		return user;
	}

	public void setUser(
			User user)
	{
		this.user = user;
	}

	private UserManager userManager;
	
	public UserManager getUserManager()
	{
		return userManager;
	}

	public void setUserManager(
			UserManager userManager)
	{
		this.userManager = userManager;
	}

	@Override
	public String execute()
			throws Exception
	{
		if(userManager.findByUserName(user.getUsername(),user.getPassword())){
			return SUCCESS;
		}
		
		return INPUT;
	}

	@Override
	public void validate()
	{
		if (user.getUsername()==null || user.getUsername().length()==0)
		{
			super.addActionError("用戶名不能爲空!");
		}
		if (user.getPassword()==null||user.getPassword().length()==0)
		{
			super.addActionError("密碼不能爲空!");
		}
	}
}
</span>
User.java

<span style="font-family:KaiTi_GB2312;font-size:18px;">/**  
 * @Title: User.java
 * @Package com.jmj.hibernate
 * @Description: TODO
 * @author meng
 * @date 2016-5-17 上午11:38:31
 */
package com.jmj.domain;

/**
 * ClassName: User
 * @Description: TODO
 * @author meng
 * @date 2016-5-17 上午11:38:31
 */
public class User
{
	private String id;
	
	private String username;
	
	private String password;

	public String getId()
	{
		return id;
	}

	public void setId(
			String id)
	{
		this.id = id;
	}

	public String getUsername()
	{
		return username;
	}

	public void setUsername(
			String username)
	{
		this.username = username;
	}

	public String getPassword()
	{
		return password;
	}

	public void setPassword(
			String password)
	{
		this.password = password;
	}
	
}
</span>
JSP頁面:

login.jsp

<span style="font-family:KaiTi_GB2312;font-size:18px;"><form action="login.action">
        <!--此種方式是action中有相應的屬性  -->
        <%-- 用戶名:<s:textfield name="username"/><br>
        密碼:<s:password name="password"/><br>
        <s:submit value="提交"/> --%>
        
        <!--此種方式是action中引用model  -->
        用戶名:<s:textfield name="user.username"/><br>
        密碼:<s:password name="user.password"/><br>
        <s:submit value="提交"/>
        
        <!-- 用戶名:<input type="text" name="username"><br>
        密  碼:<input type="password" name="password"><br>
        <input type="submit" value="登陸"> -->
    </form>
</span>

main.jsp

<span style="font-family:KaiTi_GB2312;font-size:18px;">歡迎【<s:property value="user.username"/>】登陸!</span>

知識拓展:

   在action 裏面定義要接收的參數,並提供相應的setter,getter,則Jsp頁面可以直接使用此屬性名;而在action中引用model層的模型,保存其對象,則jsp頁面中需要使用“對象.屬性名”。

發佈了129 篇原創文章 · 獲贊 18 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章