SSH框架整合

1.所需要的jar包

容易丢失的是struts中的spring插件struts2-spring-plugin-2.2.3.1.jar

struts的Action由spring的对象工厂负责创建时使用的包asm-3.1.jar

2.web.xml配置

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

4 <!-- spring 编码过滤 -->
5 <filter>
6 <filter-name>encodingFilter</filter-name>
7 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
8 <init-param>
9 <param-name>encoding</param-name>
10 <param-value>utf-8</param-value>
11 </init-param>
12 </filter>
13 <filter-mapping>
14 <filter-name>encodingFilter</filter-name>
15 <url-pattern>/*</url-pattern>
16 </filter-mapping>
17 <!-- 初始化spring上下文ApplicationContext -->
18 <listener>
19 <listener-class>
20 org.springframework.web.context.ContextLoaderListener
21 </listener-class>
22 </listener>
23 <context-param>
24 <param-name>contextConfigLocation</param-name>
25 <param-value>/WEB-INF/classes/applicationContext*.xml</param-value>
26 </context-param>
27
28 <welcome-file-list>
29 <welcome-file>index.jsp</welcome-file>
30 </welcome-file-list>
31 <login-config>
32 <auth-method>BASIC</auth-method>
33 </login-config>
34 <!-- struts2过滤器 -->
35 <filter>
36 <filter-name>struts2</filter-name>
37 <filter-class>
38 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
39 </filter-class>
40 </filter>
41 <filter-mapping>
42 <filter-name>struts2</filter-name>
43 <url-pattern>/*</url-pattern>
44 </filter-mapping>
45 </web-app>

3.Hibernate相关

配置hibernate.cfg.xml,如下

 1 <?xml version='1.0' encoding='UTF-8'?>
2 <!DOCTYPE hibernate-configuration PUBLIC
3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

5
6 <!-- Generated by MyEclipse Hibernate Tools. -->
7 <hibernate-configuration>
8 <session-factory>
9 <property name="show_sql">true</property>
10 <property name="format_sql">true</property>
11 <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
12 <property name="connection.url">jdbc:mysql://localhost:3306/hib</property>
13 <property name="connection.username">root</property>
14 <property name="connection.password">123456</property>
15 <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
16 <property name="myeclipse.connection.profile">com.mysql.jdbc.Driver</property>
17 <mapping resource="com/domin/User.hbm.xml"/>
18 </session-factory>
19 </hibernate-configuration>

创建com.domin.User类,添加User.hbm.xml。

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD3.0//EN"
3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

4 <hibernate-mapping>
5 <class name="com.domin.User" table="USERS">
6 <id name="id" type="java.lang.Integer">
7 <column name="ID"/>
8 <generator class="identity"/>
9 </id>
10 <property name="username" type="string" column="USERNAME"/>
11 <property name="password" type="string" column="PASSWORD"/>
12 </class>
13 </hibernate-mapping>

4.创建Dao类

(1).BaseDao 使用spring封装的HibernateDaoSupport,把事务管理交给spring

1 package com.dao;
2 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
3 public class BaseDao extends HibernateDaoSupport{
4 //..目前还没有写什么
5 }

(2).UserDao 继承BaseDao 处理基本的数据库操作

 1 package com.dao;
2
3 import java.util.List;
4 import com.domin.User;
5 public class UserDao extends BaseDao{
6 public User getUserByUsername(String username){
7
8 List list=getHibernateTemplate()
9 .find("from User where username=?",username);
10 if(list.size()==0) return null;
11 return (User)list.get(0);
12
13 }
14 public User getUser(String username,String password){
15 List list=getHibernateTemplate()
16 .find("from User where username=? and password=?",username,password);
17 if(list.size()==0) return null;
18 return (User)list.get(0);
19
20 }
21 }

5.创建service类 以Dao对象为属性,处理与业务相关的操作

 1 package com.service;
2
3 import com.dao.UserDao;
4 import com.domin.User;
5
6 public class UserService {
7 private UserDao userDao;
8
9 public UserDao getUserDao() {
10 return userDao;
11 }
12
13 public void setUserDao(UserDao userDao) {
14 this.userDao = userDao;
15 }
16 //判断用户名是否存在
17 public boolean isExists(String username){
18 User user=userDao.getUserByUsername(username);
19 return user!=null;
20 }
21 //判断用户名、密码是否正确
22 public boolean isExists(String username,String password){
23 return userDao.getUser(username, password)!=null;
24 }
25 }

6.Struts中登陆功能的实现,login.jsp如下

 1 <%@ page  language="java" pageEncoding="UTF-8"%>
2 <%@ page isELIgnored="false" %>
3 <%@ taglib uri="/struts-tags" prefix="s" %>
4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
5 <html>
6 <body>
7 <br/>通用错误:
8 <s:actionerror/>
9 <br/>
10 <s:form method="post" action="login!login.action" >
11 用户名<input type="text" name="user.username" />
12 ${errors['user.username'][0]}
13 <br/>
14 密码<input type="password" name="user.password" />
15 ${errors['user.password'][0]}
16 <br/>
17 <input type="submit" value='登陆' />
18 <input type="reset" value='重置' />
19 </s:form>
20 </body>
21 </html>

7.处理的Action

 1 package com.control;
2
3 import org.springframework.transaction.annotation.Propagation;
4 import org.springframework.transaction.annotation.Transactional;
5 import com.domin.User;
6 import com.opensymphony.xwork2.Action;
7 import com.opensymphony.xwork2.ActionSupport;
8 import com.service.UserService;
9
10 public class Login extends ActionSupport{
11 private User user;
12 private UserService userService;
13 //省略user,userService的get、set方法
14 //声明式事务管理
15 @Transactional(propagation=Propagation.REQUIRED)

16 public String login() throws Exception {
17 // TODO Auto-generated method stub
18 if(userService.isExists(user.getUsername(),user.getPassword()))

19 return "success";
20 else{
21 addActionError("用户名或密码错误!");
22 return Action.INPUT;
23 }
24 }
25 }

8.spring的配置文件applicationContext.xml配置dao类,service类以及控制器类Action

spring的配置中整合了hibernate数据库配置和Struts中Action配置

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans
3 xmlns="http://www.springframework.org/schema/beans"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xmlns:p="http://www.springframework.org/schema/p"
6 xmlns:aop="http://www.springframework.org/schema/aop"
7 xmlns:tx="http://www.springframework.org/schema/tx"
8
9 xsi:schemaLocation="http://www.springframework.org/schema/beans
10 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
11 http://www.springframework.org/schema/tx
12 http://www.springframework.org/schema/tx/spring-tx.xsd
13 http://www.springframework.org/schema/aop
14 http://www.springframework.org/schema/aop/spring-aop.xsd
15 "

16 >
17 <bean id="sessionFactory"
18 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
19 <property name="configLocation"
20 value="classpath:hibernate.cfg.xml">
21 </property>
22 </bean>
23 <bean id='userDao' class="com.dao.UserDao">
24 <property name="sessionFactory" ref='sessionFactory'/>
25 </bean>
26 <bean id='userService' class="com.service.UserService">
27 <property name="userDao" ref='userDao'/>
28 </bean>
29 <bean id='transactionManager'
30 class="org.springframework.orm.hibernate3.HibernateTransactionManager">
31 <property name="sessionFactory" ref="sessionFactory"/>
32 </bean>
33 <tx:annotation-driven transaction-manager="transactionManager"/>
34 <aop:aspectj-autoproxy proxy-target-class="true"/>
35 <!-- 以下bean对应于一个登陆处理的Action -->
36 <bean id="login" class="com.control.Login" scope="prototype">
37 <property name="userService" ref='userService'/>
38 </bean>
39 </beans>

以上为Login注入了所需要的userService对象,使用scope="prototype"每次访问Action都新建一个实例,在Action中加入声名式事务管理,可以在Action中对Hibernate事务进行自动化管理。

9.struts.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
3 <struts>
4 <constant name="struts.objectFactory" value="spring"/>
5 <package name="default" extends="struts-default">
6 <action name='login' class="login">
7 <result name='success'>/success.jsp</result>
8 <result name='input'>/login.jsp</result>
9 </action>
10 </package>
11 </struts>

其中Action的class属性必须与spring配置文件中bean的id值相同
10.测试结果

http://localhost:8080/ssh/login.jsp

输入tazi 123后 和输入tazi 1234后分别如下左右

  

因为数据库中保存的用户名和密码是tazi/1234







原文地址:https://www.cnblogs.com/tazi/p/2301234.html