SSH框架整合(用户登录)

SSH框架整合(用户登录)

整个项目图解(实际项目用了四个实例分别完成三部分内容)

第一部分:保留三框架自己的配置文件不使用注解

1.准备数据库文件

   本次整合使用的是mysql数据库,这里使用一张用户表,表名为t_user,t_user表中有id,username,password这三个字段。

SQL语句如下:

  create table t_user(

    id int(11) not null auto_increment,

    usernamevarchar(255) default null,

    password varchar(255) default null,

    primary key(id)

);

2,配置Struts环境

 SSH框架的整合其实是在项目中分别配置每个框架的环境,然后通过修改配置文件进行整合,首先配置Struts环境。

     1.导入Struts的相关jar包,本次使用的Struts-2.3.24版本。导入的jar包共13个。分别是:


2.添加log4j.properties

项目中需要添加一个log4j.properties文件,作为log4j日志技术的配置文件。在添加log4j.properties文件之前,首先在项目中创建一个名为config的Source Folder,用于存放配置文件。然后在config中创建一个名为log4j.properties的文件,编写log4j.properties文件,具体内容如下:

#指定logger

# 配置Logger组件

# 设定Log4j的日志级别(error warn info  debug)

# 输出目的地(Console, logfile是appender的名字,是自己定义的,后面才赋予具体的含义)

log4j.rootLogger=debug, Console, logfile

###################################################################################################################

#指定appender(目的地)

#设定Logger的Console(appender的名字)的Appender类型为控制台输出

#org.apache.log4j.ConsoleAppender 表明 Console是控制台输出

log4j.appender.Console=org.apache.log4j.ConsoleAppender

 

#输出的格式

#设定Console的Appender布局Layout

#org.apache.log4j.PatternLayout(可以灵活地指定布局模式)包含选项:

#                     ConversionPattern=%m%n :指定怎样格式化指定的消息

log4j.appender.Console.layout=org.apache.log4j.PatternLayout

#2009-09-29 07:30:43,265 INFO com.itcast.web.controller.SearchCdServlet.doGet() - e

log4j.appender.Console.layout.ConversionPattern=%d %p %c.%M() - %m%n

 

###################################################################################################################

#设定Logger的logfile(appender的名字)的Appender类型为文件大小到达指定尺寸的时候产生一个新的文件

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

 

#设定文件的输出路径(指定文件的名字和路径,tomcat的启动路径)

log4j.appender.logfile.File=../logs/logstrore.log

 

#设定后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logstrore.log.1文件

log4j.appender.logfile.MaxFileSize=2048KB

 

#Keep three backup files.指定可以产生的滚动文件的最大数

log4j.appender.logfile.MaxBackupIndex=4

 

#设定logfile的Appender布局Layout

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d %p %c.%M() - %m%n

#####################################################################

 

3.在web.xml配置Struts核心过滤器

配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns="http://java.sun.com/xml/ns/javaee"

       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

       id="WebApp_ID" version="2.5">

       <display-name>SSHLogin</display-name>

       <welcome-file-list>

              <welcome-file>index.jsp</welcome-file>

       </welcome-file-list>

       <!-- 核心过滤器 -->

       <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>

</web-app>

4.添加struts.xml配置文件

在config路径下添加struts配置文件struts.xml。配置如下:

<?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>

  <constant name="struts.devMode" value="true"/>

   <package name="ssh" namespace="/" extends="struts-default">

     

   </package> 

</struts>

3.配置spring环境

 1.导入spring的依赖jar包

本系统使用的是Spring 3.2.2版本依赖的基础jar包共14个,具体如下:


2.核心配置文件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:context="http://www.springframework.org/schema/context"

       xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee"

       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"

       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"

       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="

              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

              http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd

              http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd

              http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

              http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd

              http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

              http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

</beans>

 

3.在web.xml中配置spring的监听器

配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns="http://java.sun.com/xml/ns/javaee"

       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

       id="WebApp_ID" version="2.5">

       <display-name>SSHLogin</display-name>

       <welcome-file-list>

              <welcome-file>index.jsp</welcome-file>

       </welcome-file-list>

       <!-- 监听器 -->

       <context-param>

              <param-name>contextConfigLocation</param-name>

              <param-value>classpath:applicationContext.xml</param-value>

       </context-param>

 

       <listener>

              <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

       </listener>

       <!-- 核心过滤器 -->

       <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>

</web-app>

 

4.配置hibernate环境

Struts和Spring的环境配置完毕后,接下来,对hibernate的环境进行配置。

1.hibernate项目所依赖的jar包需要11个,如下:


2.添加核心配置文件hibernate.cfg.xml:

配置文件如下:

<?xml version='1.0' encoding='utf-8'?>

<!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>

     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>

     <property name="hibernate.connection.username">root</property>  

     <property name="connection.password">root</property>

    

     <!-- hibernate配置信息 -->

        <!-- SQL dialect 方言,用于配置生成针对哪个数据库的-->

        <property name="dialect">

        <!-- 方言类,Hibernate提供的,用于封装某种特定的 -->

              org.hibernate.dialect.MySQL5Dialect

        </property>

        <!--  生成的sql是否打印到控制台 -->

        <property name="show_sql">true</property> 

        <!-- 打印的sql是否进行格式化 -->    

        <property name="format_sql">true</property>

        <property name="hbm2ddl.auto">update</property>

       

        <property name="hibernate.connection.autocommit">true</property>

        <!-- 在配置文件中关联映射文件 -->

         

    </session-factory>

</hibernate-configuration>

5.进行springhibernate的整合:

hibernate.cfg.xml文件是Hibernate中重要的配置文件,当Spring和Hibernate整合时,由于hibernate.cfg.xml文件中的配置信息可以交予Spring来管理,所以可以选择是否使用hibernage.cfg.xml文件。本文章将对使用hibernate.cfg.xm文件和不使用hibernate.cfg.xml文件两种情况来讲解Spring和Hibernate的整合。

   SpringHibernate的整合,需要添加一个支持整合的jar包,srping-orm-3.2.2.RELEASE.jar

    1.首先建立实体类,新建entity包,新建User类,源码如下:

package entity;

 

public class User {

       private Integer id;

       private String username;

       private String password;

       public Integer getId() {

              return id;

       }

       public void setId(Integer 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;

       }

       @Override

       public String toString() {

              return "User [id=" + id + ", username=" + username + ", password="

                            + password + "]";

       }

      

}

2.在此包下新建User.hbm.xml,源代码如下:

<?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="entity.User" table="t_user">

      <id name="id">

           <generator class="identity"></generator>      

      </id>

      <property name="username"></property>

      <property name="password"></property>      

   </class> 

</hibernate-mapping>

此时,User.hbm.xml建立好后,需要在hibernate的核心配置文件中hibernate,cfg.xml中添加这个映射文件,源码入下:

  <!-- 在配置文件中关联映射文件 -->

        <mapping resource="entity/user.hbm.xml"/>

3.dao层的编码,新建dao包,新建UserDao接口类,源码如下:

package dao;

import java.util.List;

import entity.User;

public interface UserDao {

       public void save(User user);

       public void update(User user);

       public void delete(User user);

       public User findById(Integer id);

       public User findUser(String username,String password);

       public List<User> findAll() ;

}

4.实现类的编码,新建dao.impl包,新建UserDaoImpl实现类,源码如下:

package dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.HibernateTemplate;

import dao.UserDao;

import entity.User;

public class UserDaoImpl implements UserDao{

    private HibernateTemplate hibernateTemplate;

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

              this.hibernateTemplate = hibernateTemplate;

       }

       public void save(User user) {

              this.hibernateTemplate.save(user);

              System.out.println("-----------------------ddd");

       }

       public void update(User user) {

              hibernateTemplate.update(user);

       }

       public void delete(User user) {

              hibernateTemplate.delete(user);

       }

       public User findById(Integer id) {

              return hibernateTemplate.get(User.class, id);

       }

       public User findUser(String username, String password) {

              return null;

       }

       @SuppressWarnings("unchecked")

       public List<User> findAll() {

              return hibernateTemplate.find("from User");

       }

}

5.service层的接口,新建接口类UserService,源码如下:

package service;

 

 

import java.util.List;

 

import entity.User;

 

public interface UserService {

       public void save(User user);

       public void update(User user);

       public void delete(User user);

       public User findById(Integer id);

       public List<User> findAll() ;

}

   6.service实现类,新建实现类UserServiceImpl,源码如下:

package service.impl;

 

import java.util.List;

 

import dao.UserDao;

import entity.User;

import service.UserService;

 

public class UserServiceImpl implements UserService{

       private UserDao userDao;

       public void setUserDao(UserDao userDao) {

              this.userDao = userDao;

       }

       public void save(User user) {

              this.userDao.save(user);

       }

 

       public void update(User user) {

              userDao.update(user);

       }

 

       public void delete(User user) {

              userDao.delete(user);

       }

 

       public User findById(Integer id) {

              return userDao.findById(id);

       }

       public List<User> findAll() {

              return userDao.findAll();

       }

}

   7.spring配置文件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:context="http://www.springframework.org/schema/context"

       xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee"

       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"

       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"

       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="

              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

              http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd

              http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd

              http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

              http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd

              http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

              http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

       <!-- 配置SessionFactory -->

       <bean id="sessionFactory"

              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

              <!-- 加载hibernate核心配置文件 -->

              <property name="configLocation" value="classpath:hibernate.cfg.xml"/>

       </bean>

       <!-- 配置hibernate模板 -->

       <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

        <!-- 通过工厂获得Session,操作PO类 -->

          <property name="sessionFactory" ref="sessionFactory"></property>

       </bean>

    <!-- 配置Dao -->

    <bean id="userDao" class="dao.impl.UserDaoImpl">

       <property name="hibernateTemplate" ref="hibernateTemplate"></property>

    </bean>

    <!-- 配置service -->

    <bean id="userService" class="service.impl.UserServiceImpl">

       <property name="userDao" ref="userDao"></property>

    </bean>

    <!-- 事务管理 -->

    <!-- 1.事务管理器,就是平台,Spring工具生产,依赖于使用持久层方案 -->

    <bean id="txManger" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

          <property name="sessionFactory" ref="sessionFactory"></property>

    </bean>

    <!--2. 通知增强事务 -->

    <tx:advice id="txAdvice" transaction-manager="txManger">

      <tx:attributes>

        <tx:method name="save *"/>

        <tx:method name="update *"/>

        <tx:method name="delete *"/>

        <tx:method name="find *" read-only="true"/>

      </tx:attributes>

    </tx:advice>

    <!-- 3.切面:将切入点与通知关联 -->

    <aop:config>

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

       <aop:advisor advice-ref="txAdvice" pointcut-ref="allServiceMethod"/>

    </aop:config>

</beans>

  9.测试Spring和Hibernate的整合是否成功。新建test包,新建TestApp测试类,源码如下:

 

package test;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import service.UserService;

import entity.User;

 

public class TestApp {

       @Test

       public void demo1() throws Exception {

              User user=new User();

              user.setUsername("jack");

              user.setPassword("1234");

              String config="classpath:applicationContext.xml";

              ApplicationContext ac=new ClassPathXmlApplicationContext(config);

              UserService userService=ac.getBean("userService",UserService.class);

              userService.save(user);

              System.out.println("操作成功!");

       }

}

  此时,如果程序控制台没有报错并且数据库中存入了相应的成功,即Spring和Hibernate整合完成。

6.进行Spring与Struts的整合:

1.SpringStruts整合时,需要导入一个jar包,jar包名称为:

struts2-spring-plugin-2.3.24.jar,此文件在struts文件包中可以找到。

2.创建action类:新建action包,新建UserAction类,源码如下:

package action;

import service.UserService;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

import entity.User;

public class UserAction extends ActionSupport implements ModelDriven<User>{

       private static final long serialVersionUID = -707433412533727588L;

       private User user=new User();

       public User getModel() {

              return user;

       }

       private UserService userService;

       public void setUserService(UserService userService) {

              this.userService = userService;

       }

   public String add(){

          userService.save(user);

          return "add";

   }

}

   3.在applicationContext中配置Struts.

增加的配置信息如下:

<bean id="userAction" class="action.UserAction" scope="prototype">

       <property name="userService" ref="userService"></property>

</bean>

  4.struts.xml配置,源码如下:

<?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>

  <constant name="struts.devMode" value="true"/>

   <package name="ssh" namespace="/" extends="struts-default">

      <action name="userAction_*" class="userAction" method="{1}">

        <result name="add">/success.jsp</result>             

      </action>

   </package> 

</struts>

  5.添加测试页面,登录页面index.jsp,源码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'index.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

</head>

<body>

       <form action="${pageContext.request.contextPath }/userAction_add"

              method="post">

              用户名:<input type="text" name="username"><br>

              密&nbsp;&nbsp;码:<input type="password" name="password"><br>

              <input type="submit" value="添加">

       </form>

</body>

</html>

  6.登录成功页面,success.jsp,源码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

       <meta http-equiv="pragma" content="no-cache">

       <meta http-equiv="cache-control" content="no-cache">

  </head>

  <body>

     添加成功!

  </body>

</html>

  至此,本部分整合完毕,将程序发布到tomcat,在浏览器输入后访问,结果页如下:

第二部分:不使用hibernate.cfg.xml

1.使用HibernateDaoSupport(需要修改UserDaoImpl中的代码),不再使用HibernateTemplate,修改UserDaoImpl的源码为:

package dao.impl;

import java.util.List;

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

import dao.UserDao;

import entity.User;

public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

 

       public void save(User user) {

              this.getHibernateTemplate().save(user);

 

       }

 

       public void update(User user) {

              this.getHibernateTemplate().update(user);

       }

 

       public void delete(User user) {

              this.getHibernateTemplate().delete(user);

       }

 

       public User findById(Integer id) {

              return this.getHibernateTemplate().get(User.class, id);

       }

 

       public User findUser(String username, String password) {

              return null;

       }

 

       @SuppressWarnings("unchecked")

       public List<User> findAll() {

              return this.getHibernateTemplate().find("from User");

       }

 

}

本代码中,UserDaoImpl类继承了HibernateDaoSupport类,删除了原来使用HibernateTemplate的代码。

2.创建c3p0-db.properties文件:

在config目录中创建c3p0-db.properties配置文件,将连接数据库的基本4项编写到c3p0-db.properties文件中,源码如下:

jdbc.driverClass=com.mysql.jdbc.Driver

jdbc.jdbcUrl=jdbc:mysql:///test

jdbc.user=root

jdbc.password=root

3.修改Spring中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:context="http://www.springframework.org/schema/context"

       xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee"

       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"

       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"

       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="

              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

              http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd

              http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd

              http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

              http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd

              http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

              http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

       <!-- 加载properties -->

       <context:property-placeholder location="classpath:c3p0-db.properties"/>

       <!-- 配置数据源 -->

       <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

          <property name="driverClass" value="${jdbc.driverClass}"></property>

          <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>

          <property name="user" value="${jdbc.user}"></property>

          <property name="password" value="${jdbc.password}"></property>

       </bean>

       <!-- 配置SessionFactory -->

       <bean id="sessionFactory"

              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

              <!--1. 配置数据源 -->

              <property name="dataSource" ref="dataSource"></property>

              <!--2. 其他配置项 -->

              <property name="hibernateProperties">

                 <props>

                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>

                   <prop key="hibernate.show_sql">true</prop>

                   <prop key="hibernate.format_sql">true</prop>

                   <prop key="hibernate.hbm2ddl.auto">update</prop>

                   <prop key="hibernate.connection.autocommit">true</prop>

                   <prop key="javax.persistence.validation.mode">none</prop>

                  <!--  <prop key="hibernate.current_session_context_class">thread</prop> -->

                 </props>

              </property>

              <!--配置映射信息  -->

              <property name="mappingResources" value="entity/user.hbm.xml"></property>

       </bean>

    <!-- 配置Dao -->

    <bean id="userDao" class="dao.impl.UserDaoImpl">

       <property name="sessionFactory" ref="sessionFactory"></property>

    </bean>

    <!-- 配置service -->

    <bean id="userService" class="service.impl.UserServiceImpl">

       <property name="userDao" ref="userDao"></property>

    </bean>

    <bean id="userAction" class="action.UserAction" scope="prototype">

       <property name="userService" ref="userService"></property>

    </bean>

    <!-- 事务管理 -->

    <!-- 1.事务管理器,就是平台,Spring工具生产,依赖于使用持久层方案 -->

    <bean id="txManger" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

          <property name="sessionFactory" ref="sessionFactory"></property>

    </bean>

    <!--2. 通知增强事务 -->

    <tx:advice id="txAdvice" transaction-manager="txManger">

      <tx:attributes>

        <tx:method name="save *"/>

        <tx:method name="update *"/>

        <tx:method name="delete *"/>

        <tx:method name="find *" read-only="true"/>

      </tx:attributes>

    </tx:advice>

    <!-- 3.切面:将切入点与通知关联 -->

    <aop:config>

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

       <aop:advisor advice-ref="txAdvice" pointcut-ref="allServiceMethod"/>

    </aop:config>

</beans>

4.此时可以删除掉Hibernate.cfg.xml文件,打开test包中testApp进行测试。

第三部分:Struts不整合到Spring,自身创建Action

Action的创建工作是交予Spring框架来完成的,如果不想这样,删除掉Spring配置的关于对userAction的配置代码,同时修改Struts配置文件struts.xml,修改后的源代码为:

<?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>

  <constant name="struts.devMode" value="true"/>

   <package name="ssh" namespace="/" extends="struts-default">

      <action name="userAction_*" class="action.UserAction" method="{1}">

        <result name="add">/success.jsp</result>

      </action>

   </package> 

</struts>

第四部分:使用注解形式实现三框架整合

[本部分代码使用了c3p0整合部分和保留三框架原来的配置文件,意在全面掌握框架整合时注解的使用。所以,这部分代码比较乱,是第一到三部分的结合体的修改,根据自身需求参考本部分代码适当修改代码即可]

1.需要导入一个注解开发包,名称为:struts2-convention-plugin-2.3.24。

该jar包在Struts的jar包中可以找到,在不使用注解的时候不要导入此包

2.修改实体类,可以删除掉user.hbm.xml源代码如下:

package entity;

 

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;

 

@Entity

@Table(name="t_user")

public class User {

       @Id

       @GeneratedValue(strategy=GenerationType.AUTO)

       private Integer id;

       @Column(name="username",length=50)

       private String username;

       //不配置,使用默认值

       private String password;

       public Integer getId() {

              return id;

       }

       public void setId(Integer 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;

       }

       @Override

       public String toString() {

              return "User [id=" + id + ", username=" + username + ", password="

                            + password + "]";

       }

      

}

3.修改Dao层中UserDaoImpl,源代码如下:

package dao.impl;

 

import java.util.List;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.stereotype.Repository;

 

import dao.UserDao;

import entity.User;

@Repository

public class UserDaoImpl implements UserDao {

       @Autowired

  private HibernateTemplate hibernateTemplate;

       public void save(User user) {

              this.hibernateTemplate.save(user);

 

       }

 

       public void update(User user) {

              this.hibernateTemplate.update(user);

       }

 

       public void delete(User user) {

              this.hibernateTemplate .delete(user);

       }

 

       public User findById(Integer id) {

              return this.hibernateTemplate .get(User.class, id);

       }

 

       public User findUser(String username, String password) {

              return null;

       }

 

       @SuppressWarnings("unchecked")

       public List<User> findAll() {

              return this.hibernateTemplate .find("from User");

       }

 

}

4.修改Service层中UserServiceImpl,源代码如下:

package service.impl;

 

import java.util.List;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

 

import dao.UserDao;

import entity.User;

import service.UserService;

@Service

public class UserServiceImpl implements UserService{

       @Autowired

       private UserDao userDao;

        @Transactional

       public void save(User user) {

              this.userDao.save(user);

       }

    @Transactional

       public void update(User user) {

              userDao.update(user);

       }

    @Transactional

       public void delete(User user) {

              userDao.delete(user);

       }

    @Transactional

       public User findById(Integer id) {

              return userDao.findById(id);

       }

 

       @Transactional

       public User findUser(String username, String password) {

              return null;

       }

 

       @Transactional(readOnly=true)

       public List<User> findAll() {

              return userDao.findAll();

       }

 

}

5. 修改aciton中UserAction类,源代码如下:

package action;

 

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Namespace;

import org.apache.struts2.convention.annotation.ParentPackage;

import org.apache.struts2.convention.annotation.Result;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

 

import service.UserService;

 

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

 

import entity.User;

 

@Namespace("/")

@ParentPackage("struts-default")

@Controller

public class UserAction extends ActionSupport implements ModelDriven<User>{

       private static final long serialVersionUID = -707433412533727588L;

       private User user=new User();

       public User getModel() {

              return user;

       }

       @Autowired

       private UserService userService;

    @Action(value="userAction_add",results={@Result(name="add",location="/success.jsp")})

   public String add(){

          userService.save(user);

          return "add";

   }

}

6.修改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:context="http://www.springframework.org/schema/context"

       xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee"

       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"

       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"

       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="

              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

              http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd

              http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd

              http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

              http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd

              http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

              http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

              <!-- 扫描 -->

              <context:component-scan base-package="*"/>

              <!-- 配置sessionFactory -->

              <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

                 <!-- 加载hibernate配置文件 -->

                <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>

              </bean>

              <!-- 配置hibernate模板 -->

              <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

                 <property name="sessionFactory" ref="sessionFactory"></property>

              </bean>

    <!-- 事务管理 -->

    <!-- 1.事务管理器,就是平台,Spring工具生产,依赖于使用持久层方案 -->

    <bean id="txManger" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

          <property name="sessionFactory" ref="sessionFactory"></property>

    </bean>

    <tx:annotation-driven transaction-manager="txManger"/>

</beans>

7.修改hibernate.cfg.xml文件,源代码如下:

<?xml version='1.0' encoding='utf-8'?>

<!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>

     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>

     <property name="hibernate.connection.username">root</property>  

     <property name="connection.password">root</property>

    

     <!-- hibernate配置信息 -->

        <!-- SQL dialect 方言,用于配置生成针对哪个数据库的-->

        <property name="dialect">

        <!-- 方言类,Hibernate提供的,用于封装某种特定的 -->

              org.hibernate.dialect.MySQL5Dialect

        </property>

        <!--  生成的sql是否打印到控制台 -->

        <property name="show_sql">true</property> 

        <!-- 打印的sql是否进行格式化 -->    

        <property name="format_sql">true</property>

        <property name="hbm2ddl.auto">update</property>

     

        <property name="hibernate.connection.autocommit">true</property>

        <!-- 整合c3p0 -->

        <property name="hibernate.connection.provider_class" >

         org.hibernate.connection.C3P0ConnectionProvider

        </property>

        <!-- 在配置文件中关联映射文件 -->

        <mapping  class="entity.User"/>

    </session-factory>

</hibernate-configuration>

 8.发布应用,在浏览器中输入地址进行访问测试。

  以上内容请不要复制黏贴的形式新建项目,太容易出错了。如果复制黏贴的形式,至少要了解三框架一些基本内容,报错了有能力去解决 。

☆:其他SSH框架整合资料(比我的详细美观多了):

    1.https://www.cnblogs.com/tuhooo/p/6491906.html

    2.http://blog.csdn.net/jstxzhangrui/article/details/52825873

    3.https://www.cnblogs.com/zhaowancheng/p/5841591.html

源代码和同此内容的对应文档下载地址:http://download.csdn.net/download/qq_25337221/10115306

微笑微笑本内容由安康学院雨季原创!

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值