06.Spring+Struts2+Hibernate整合(SSH)

06.Spring+Struts2+Hibernate整合(SSH)

一、Spring+Struts2整合

1.使用maven创建工程,引入相关依赖(pom文件中)
<!--设置统一版本号-->
<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <springVersion>5.1.1.RELEASE</springVersion>
    </properties>
<!--引入相关依赖-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

        <!--Struts2核心-->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.5.26</version>
        </dependency>
        <!--Struts2对Spring的支持-->
        <!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.5.26</version>
        </dependency>

        <!-- Spring核心容器 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${springVersion}</version>
            <scope>compile</scope>
        </dependency>
        <!-- Spring核心 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <!-- Spring核心对象管理 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <!-- Spring核心表达式 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${springVersion}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${springVersion}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
2. 创建信息输入页面

在webapp目录下创建index.jsp页面

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
3. 创建Controller
package com.zb.controller;

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

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    public String login(){

        System.out.println("请求被Struts捕捉到了");

        System.out.println(userService);

        return "success";
    }

}
4.创建Service
package com.zb.controller;

import org.springframework.stereotype.Service;

@Service
public class UserService {
	//相关代码
}
5.在resources目录下创建相关配置文件
<?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"
       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">

    <!--开启扫描-->
    <context:component-scan base-package="com.zb"/>
</beans>
6.配置struts配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <!--根命名空间 namespace="/"-->
    <!--package:类似于java中的包-->
    <!--extends:类似于java中的继承特征,extends="struts-default"就是继承struts-default.xml,它里面定义了许多跳转类型、拦截器等一些常用的东西-->
    <package name="userPackage" extends="struts-default" namespace="/user">
        <action name="login" class="userController" method="login">
            <result>index.jsp</result>
        </action>
    </package>
</struts>
7.配置webapp目录下的WEB-INF下的web.xml文件
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <!--核心过滤器StrutsPrepareAndExecuteFilter prepare与execute前者表示准备,可以说是指filter中的init方法,即配制的导入;后者表示进行过滤,指		doFilter方法,即将request请求,转发给对应的 action去处理-->
    <filter>
        <filter-name>dispatcherFilter</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>dispatcherFilter</filter-name>
        <!--指定filter的匹配方式有两种方法:直接指定url-pattern和指定servlet,后者相当于把指定的servlet对应的url-pattern作为filter的匹配模式

			filter的路径匹配和servlet是一样的-->
        <url-pattern>/*</url-pattern>
        <servlet-name>ProductServlet</servlet-name>    
        <!--
			可以在一个<filter-mapping>元素中加入任意数目的<dispatcher>,使得filter将会作用于直接从 客户端过来的request,通过forward过来的					request,通过 include过来的request和通过<error-page>过来的request。如果没有指定任何< dispatcher >元素,默认值是REQUEST。
		-->
        <dispatcher>INCLUDE</dispatcher>
        <!--
			REQUEST ---直接从客户端传递过来的,则必须经过这个过滤器

            FORWARD---通过request dispatcher的forward方法传递过来,则必须经过这个过滤器

            INCLUDE---通过request dispatcher的include方法传递过来,则必须经过这个过滤器

            ERROR---通过<error-page>过来的,则必须经过这个过滤器
		-->
    </filter-mapping>

    
	<!-- 加载spring的配置文件 -->    
    <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>
    <!--
		web.xml的配置中<context-param>配置作用
        1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-			param>
        2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.
        3.容器将<context-param></context-param>转化为键值对,并交给ServletContext.
        4.容器创建<listener></listener>中的类实例,即创建监听.
        5.在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得ServletContext = 							   ServletContextEvent.getServletContext();
        context-param的值 = ServletContext.getInitParameter("context-param的键");
        6.得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.
        换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行.
        7.举例.你可能想在项目启动之前就打开数据库.
        那么这里就可以在<context-param>中设置数据库的连接方式,在监听类中初始化数据库的连接.
        8.这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.
	-->
</web-app>

二、Spring+Struts2+Hibernate整合

1.引入相关依赖(pom文件中)
<!--springVersion(自定义标签)统一版本号-->
<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <springVersion>5.1.1.RELEASE</springVersion>
    </properties>
	
	<!--引入相关依赖-->
    <dependencies>
        <dependency>
            <!--用于测试-->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--Struts2核心-->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.5.26</version>
        </dependency>
        <!--Struts2对Spring的支持-->
        <!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.5.26</version>
        </dependency>

        <!-- Spring核心容器 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${springVersion}</version>
            <scope>compile</scope>
        </dependency>
        <!-- Spring核心 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <!-- Spring核心对象管理 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <!-- Spring核心表达式 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${springVersion}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${springVersion}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springVersion}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.25.Final</version>
        </dependency>
    </dependencies>
2. 创建信息输入页面

webapp目录下创建登录页面login.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/12/11
  Time: 14:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="user/login" method="post">
        账号:<input type="text" name="userName"><br/>
        密码:<input type="text" name="userPwd"><br/>
        <input type="submit" value="登录">
    </form>
${requestScope.resMsg}
</body>
</html>

创建注册页面register.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/12/11
  Time: 16:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="user/register" method="post">
        账号:<input type="text" name="userName"><br/>
        密码:<input type="text" name="userPwd"><br/>
        <input type="submit" value="登录">
    </form>
    ${requestScope.resMsg}
</body>
</html>

3. 创建持久化类(entity)
package com.zb.entity;
/* spring数据库中user表的持久化类*/
public class UserInfo {

    private Integer userId;
    private String userName;
    private String userPwd;

    public UserInfo() {
    }

    public UserInfo(Integer userId, String userName, String userPwd) {
        this.userId = userId;
        this.userName = userName;
        this.userPwd = userPwd;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userPwd='" + userPwd + '\'' +
                '}';
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPwd() {
        return userPwd;
    }

    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
}
4. 创建 Dao 层
package com.zb.dao;

import com.zb.entity.UserInfo;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

/*
* 使用Spring自动扫描并装配 (Spring将指定包中所有被@Mapper注解标注的接口自动装配为hibernate的映射接口
*/
@Repository
public class UserDao {

    @Autowired
    private SessionFactory sessionFactory;
    
    //使用JdbcTemplate的方式
    //private JdbcTemplate jdbcTemplate;

    /*
     *   输入账号密码,验证登录
     * */
    //查询
    public Long selectUserCountByUserAndPassword(UserInfo userInfo){
        //使用JdbcTemplate的方式
        //return jdbcTemplate.queryForObject(" SELECT COUNT(1) FROM user_info WHERE user_name = ? AND user_pwd = ? ",
                //Integer.class,userInfo.getUserName(),userInfo.getUserPwd());

        Query q = sessionFactory.getCurrentSession().createQuery(" SELECT COUNT(*) FROM UserInfo WHERE userName = :un AND userPwd = :up ").
                setParameter("un",userInfo.getUserName()).
                setParameter("up",userInfo.getUserPwd());

        return (Long)q.getSingleResult();

    }
	
    //添加
    public Integer insertUserInfo(UserInfo userInfo){
        Integer l = (Integer)sessionFactory.getCurrentSession().save(userInfo);
        return 0;
    }

    //修改
    public Integer updateUserInfo(UserInfo userInfo){
        System.out.println(userInfo);
        userInfo.setUserName("yuyu");
        sessionFactory.getCurrentSession().update(userInfo);
        return 0;
    }

}
5. 创建 Service 层
package com.zb.service;

import com.zb.dao.UserDao;
import com.zb.entity.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    /*加上注解@Transactional可以指定这个类需要受Spring的事务管理,
	注意@Transactional只能针对public属性范围内的方法添加
	查询:@Transactional只需要设置为readOnly = true
	*/
    @Transactional(readOnly = true)
    
    //登录
    public boolean checkLogin(UserInfo userInfo){
        System.out.println("我是查询方法!");
        //相关代码
        return userDao.selectUserCountByUserAndPassword(userInfo)>0;
    }

    @Transactional
    //注册
    public boolean registerUserInfo(UserInfo userInfo){
        Integer l1 = userDao.insertUserInfo(userInfo);

        userDao.updateUserInfo(userInfo);

        return l1>0;
    }
    
    /*//默认传播机制:PROPAGATION_REQUIRED  
    * Propagation setting is PROPAGATION_REQUIRED.  
    //默认隔离级别:ISOLATION_DEFAULT  
    * Isolation level is ISOLATION_DEFAULT.  
    //默认事务是read/write.到此知道查询配readOnly的作用。  
    * Transaction is read/write.  
    //事务默认超时时间取决于事务系统,也有可能没有,如果事务系统不支持。  
    * Transaction timeout defaults to the default timeout of the underlying transaction system, or to none if time outs are not supported.  
    //任何的RuntimeExcetipn将触发回滚,任何的checkedException不触发回滚。  
    * Any RuntimeException triggers rollback,and any checkedException does not. 
    在一个应用中,依据事务的隔离级别将会有三种情况发生。 
  ◆ 脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。 
  ◆  不可重复读(non-repeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复	·读。: 
  ◆  幻像读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。 

1.Read Committed: 
假设A事务对正在读取数据Data放置了共享锁,那么Data不能被其它事务改写,所以当B事务对Data进行读取时总和A读取的Data数据是一致的,所以避免了脏读。由于在A没有提交之前可以对Data进行改写,那么B读取到的某个值可能会在其读取后被A更改从而导致了该值不能被重复取得;或者当B再次用相同的where字句时得到了和前一次不一样数据的结果集,也就是幻像数据。 

2.Read Uncommitted: 
假设A事务即不发布共享锁,也不接受独占锁,那么并发的B或者其它事务可以改写A事务读取的数据,那么并发的C事务读取到的数据的状态和A的或者B的数据都可能不一致,那么。脏读、不可重复读、幻象数据都可能存在。 

3.Repeatable Read: 
(注意MSDN原文中的第一句话:在查询中使用的所有数据上放置锁,所以不存在脏读的情况)。 
假设A事务对读取的所有数据Data放置了锁,以阻止其它事务对Data的更改,在A没有提交之前,新的并发事务读取到的数据如果存在于Data中,那么该数据的状态和A事务中的数据是一致的,从而避免了不可重复的读取。但在A事务没有结束之前,B事务可以插入新记录到Data所在的表中,那么其它事务再次用相同的where字句查询时,得到的结果数可能上一次的不一致,也就是幻像数据。 

4.Serializable: 
在数据表上放置了排他锁,以防止在事务完成之前由其他用户更新行或向数据集中插入行,这是最严格的锁。它防止了脏读、不可重复读取和幻象数据。 
    */

}
6. 创建 Action层(Controller )
package com.zb.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import com.zb.entity.UserInfo;
import com.zb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import java.util.Map;

@Controller
public class UserAction implements ModelDriven<UserInfo> {

    @Autowired
    private UserService userService;

    private UserInfo userInfo;

    public String login(){
        System.out.println("请求到了");
        System.out.println(userInfo);
        Map<String,Object> requestMap = (Map<String,Object>)ActionContext.getContext().get("request");
        if(userService.checkLogin(userInfo)){
            requestMap.put("resMsg",userInfo);
            return "success";
        }
        requestMap.put("resMsg","用户名或密码错误!");
        return "login";
    }

    public String register(){
        System.out.println("请求到了");
        System.out.println(userInfo);
        if(userService.registerUserInfo(userInfo)){
            return "login";
        }
        Map<String,Object> requestMap = (Map<String,Object>)ActionContext.getContext().get("request");
        requestMap.put("resMsg","注册失败!");
        return "register";
    }

    @Override
    public UserInfo getModel() {
        userInfo = new UserInfo();
        return userInfo;
    }
}
7. 创建用户信息显示页面
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/12/11
  Time: 14:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>欢迎!${requestScope.resMsg.userName}</h1>
</body>
</html>
8. 创建相关配置文件
1)web.xml

在 WEB-INF 目录下创建 web.xml 文件,并在该文件中实例化 ApplicationContext 容器、启动 Spring 容器、配置 DispatcherServlet以及配置字符编码过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <!--配置核心过滤器-->
    <filter>
        <filter-name>dispatcherFilter</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>dispatcherFilter</filter-name>
        <!--过滤所有*-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 <!-- 实例化ApplicationContext容器 -->
    <context-param>
        <!-- 加载src目录下的 applicationContext-*.xml文件-->
        <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>
</web-app>
2)在resources目录下配置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:tx="http://www.springframework.org/schema/tx"
       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/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
	
    <!--开启对包的扫描-->
    <context:component-scan base-package="com.zb"/>
    <!--配置数据库的相关参数-->
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql:///user_db?characterEncoding=UTF-8"/>
        <property name="user" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <!--
        Hibernate的Session工厂交给Spring管理了
    -->
    <bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!--SessionFactory需要数据源才能连接数据库-->
        <property name="dataSource" ref="dataSource"/>
        <!--创建SessionFactory工厂的时候需要得知配置文件的位置,在这里进行配置-->
        <property name="configLocation" value="classpath:/hibernate.cfg.xml"/>
        <!--Hibernte需要获取映射文件的存放位置-->
        <!--映射器告诉spring到哪里去找映射文件-->
        <property name="mappingLocations" value="classpath:/mapper/*.hbm.xml"/>
    </bean>

    <!--配置Hibernate专用事务管理器-->
    <bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <!--<property name="dataSource" ref="dataSource"/>-->
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <!--开启事务注解驱动-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
3)配置hibernate.cfg.xml文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <!--不需要连接相关的配置,因为连接池已经被Spring管理,我们只需使用-->
    <!--Hibernate本身的配置-->
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <!--Hibernate的Session绑定线程,Thread的绑定在整合框架中不能使用,如果你要通过getCurrentSession获取能够传递的Session,则必须让Session与Spring控制Hibernate的线程绑定-->
    <property name="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</property>
    <!--所有映射文件的位置通过Spring配置SessionFactory的时候进行指定-->
  </session-factory>
</hibernate-configuration>
3-1创建cfg.xml的映射文件hbm.xm文件夹mapping(user.hbm)
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zb.entity">
    <class name="UserInfo" table="user_info">
        <id name="userId" column="user_id">
            <generator class="native"></generator>
        </id>
        <property name="userName" column="user_name"/>
        <property name="userPwd" column="user_pwd"/>
    </class>
</hibernate-mapping>

4)配置struts.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="userPackage" extends="struts-default" namespace="/user">
        <action name="login" class="userAction" method="login">
            <result>/index.jsp</result>
            <result name="login">/login.jsp</result>
        </action>
        <action name="register" class="userAction" method="register">
            <result>/login.jsp</result>
            <result name="register">/register.jsp</result>
        </action>
    </package>
</struts>

5). 发布并运行应用

首先将 springSSHDemo 应用发布到 Tomcat 服务器并启动 Tomcat 服务器,然后通过地址“http://localhost:8080/springSSHDemo/login.jsp”访问信息输入页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值