【Struts2】如何实现Struts2与Spring的整合 外加 MyBatis 框架

1,简介

一般没有人会用Spring+Struts2+MyBatis这样的框架了,可不能简称为SSM。因为SSM是Spring+SpringMVC+Mybatis的简称。SSH是Spring+Struts2+Hibernate,不过现在SSH用的人也不多了。这里笔者把Sping+Struts2+Mybatis放在一起就是纯粹的实现一下功能。主要讨论的还是Struts2和Spring。

如果不使用Spring框架,Struts2框架内部还是有机制可以利用反射创建对象,之所以要把Spring+Struts2结合起来,除了体现和依赖Spring中IOC(控制反转),还有就是他的AOP(面向切面编程),这两点都是非常强大的。也就是说,使用了Spring+Struts2之后,之前由Struts2创建对象的功能交给了Spring容器来实现了。而Struts2替换了Spring中的mvc部分。因此在Spring容器进行配置的时候,就不应该再进行配置Spring-webmvc部分了。

2,实现部署Spring+Struts2+Mybatis框架

看一下项目的结构:

首先就是导入jar包,struts2的jar包,Spring容器的jar包,Mybatis的jar包,以及struts2和Spring的整合包,Spring和Mybatis的整合包,这里笔者使用的数据库是MySQL,因此还有MySQL的驱动包和连接池包。

web.xml文件

<?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_3_0.xsd" version="3.0">
  <display-name>springStruts2Mybatis</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>struts</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts</filter-name>
    <url-pattern>*</url-pattern>
  </filter-mapping>
  <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-app>

web.xml 文件

其中下面这段代码:

  <filter>
    <filter-name>struts</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts</filter-name>
    <url-pattern>*</url-pattern>
  </filter-mapping>

就是将Struts2框架配置到web容器中。然后下面这一段:

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

就是把Spring配置到容器中去。这样的话,当随着容器启动,struts2和spring的xml文档对象就创建好了。

struts.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
      <!--Struts默认只会通过.action和无后缀的请求,我们可以通过指定extension来使得Struts只通过.do的URL的请求。-->
      <constant name="struts.action.extension" value="do"/>

    <!-- 必须继承struts-default,才能使用Result组件 -->
    <package name="user" extends="struts-default">
        <!--这里的class就是Spring容器中的bean的id-->
        <action name="userlogin" class="userAction">
            <!-- name对应action返回值;type指定Result 类型 -->
            <result name="result" type="dispatcher">loginResult.jsp</result>
        </action>
    </package>
</struts>

struts.xml

其中action节点的class值应该是spring容器中bean对象的id值。

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:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.1.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd">

        <!--
            开启注解扫描
         -->

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

 <bean id="config" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
      <list>
        <value>classpath:db-config.properties</value>
      </list>
  </property>
  </bean>

  <!-- 获取数据源 -->
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="url">
      <value>${db.url}</value>
    </property>
    <property name="username">
      <value>${db.username}</value>
    </property>
    <property name="password">
      <value>${db.password}</value>
    </property>
     <property name="driverClassName">
      <value>${db.dirverClass}</value>
    </property>
  </bean>

  <!--把服务层配置到容器中-->

    <bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:sqlmap-config.xml"></property>
        <property name="dataSource" ref="dataSource"></property>
    </bean>    

   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="ssf"></property>
        <property name="basePackage" value="cn.shop.dao"></property>
   </bean>

</beans>

applicationContext.xml

在个是文档是spring的,由于struts2充当了spring webmvc的角色,因此在本文档不应该配置任何有关mvc的部分。

db-config.properties文件

db.dirverClass=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql:///test?characterEncoding=utf8&useSSL=true&serverTimezone=GMT
db.password=517839
db.username=root

db-config.properties

UserAction.java文件

package cn.shop.action;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import cn.shop.bean.UserInfo;
import cn.shop.dao.UserMapper;
import cn.shop.service.UserService;

@Controller
public class UserAction {

    @Resource
    private UserService userService;

    private String username;//接受参数
    private String password;//接受参数
    private String message;//传出参数

    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    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;
    }

    public String execute(){
        UserInfo userinfo=userService.userlogin(username, password);
        if(userinfo!=null){
            message="登录成功";
        }else{
            message="登录失败";
        }

        return "result";
    }
}

UserAction.java

UserInfo.java文件

package cn.shop.bean;

public class UserInfo {

    private int userid;
    private String username;
    private String password;

    public UserInfo() {
        super();
    }
    public UserInfo(int userid, String username, String password) {
        super();
        this.userid = userid;
        this.username = username;
        this.password = password;
    }
    public int getUserid() {
        return userid;
    }
    public void setUserid(int userid) {
        this.userid = userid;
    }
    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;
    }

}

UserInfo.java

UserMapper.java文件

package cn.shop.dao;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import cn.shop.bean.UserInfo;

public interface UserMapper {

    UserInfo findUserByNameAndPass(@Param("name")String name,@Param("upass")String pass);
}

UserMapper.java

UserService.java文件

package cn.shop.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cn.shop.bean.UserInfo;
import cn.shop.dao.UserMapper;

@Service
public class UserService {

    @Resource
    private UserMapper userMapper;

    public UserInfo userlogin(String username,String password){
        return userMapper.findUserByNameAndPass(username, password);
    }
}

UserService.java

UserMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="cn.shop.dao.UserMapper">
    <!-- 查询操作-->
    <select id="findUserByNameAndPass" resultType="cn.shop.bean.UserInfo">
        select * from userinfo where username =#{name} and password=#{upass};
    </select>
</mapper>

UserMapper.xml

sqlmap-config.xml文件

<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration             PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"            "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
    <!-- 加载SQL定义文件 -->
    <mappers>
        <mapper resource="cn/shop/sql/UserMapper.xml" />
    </mappers>
</configuration>

sqlmap-config.xml文件

login.jsp文件

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户登录</title>
</head>
<body>
<form action="userlogin.do" method="POST" >
用户名:<input type="text" name="username"/> <br/>
密码:<input type="password" name="password"/> <br/>
<input type="submit" value="提交" />
</form>
</body>
</html>

login.jsp

loginResult.jsp文件

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户登录</title>
</head>
<body>
登录结果是:${message }
</body>
</html>

loginResult.jsp

然后这里笔者说一说整体的配置思路,就是先配送Spring+Struts2部分,然后再配置Spring+Mybatis部分,最后将三者联系起来就可以了。在配置的时候需要测试的,特别是在,mybatis和spring容器部分,因此这些部分的内容应该在配置过程中进行测试。

当Mabatis单个部分配置完成后,我们可以通过如下的代码检查是否有Bug.

         SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
           Reader reader = Resources.getResourceAsReader("sqlmap-config.xml");
           SqlSessionFactory factory = builder.build(reader);
           SqlSession session = factory.openSession();
           UserMapper usermapper= session.getMapper(UserMapper.class);
           UserInfo userinfos=usermapper.findUserByNameAndPass("jame","123456");
           System.out.println(userinfos.getPassword());

这里笔者就用上面的代码举例了。还有,就是关于Mybatis部分,可以参见Mybatis如何配置

如果没有问题了,我们就把和Spring容器整合。对spring进行检查,这里笔者拷贝一段测试上面Spring容器的部分代码

          ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
            SqlSessionFactory factory = ac.getBean("ssf",SqlSessionFactory.class);
            SqlSession session = factory.openSession();
            UserMapper usermapper= session.getMapper(UserMapper.class);
            UserInfo userinfos=usermapper.findUserByNameAndPass("jame","123456");
            System.out.println(userinfos.getPassword());

看完了测试的代码,在测试XML过程中都是根据XML文件创建文档对象,然后通过文档对象调用其中的方法,只不过spring和mybatis的语法不同而已。

时间: 2024-10-11 17:04:09

【Struts2】如何实现Struts2与Spring的整合 外加 MyBatis 框架的相关文章

上手spring boot项目(二)之spring boot整合shiro安全框架

题记:在学习了springboot和thymeleaf之后,想完成一个项目练练手,于是使用springboot+mybatis和thymeleaf完成一个博客系统,在完成的过程中出现的一些问题,将这些问题记录下来,作为自己的学习心得.在这先感谢群主TyCoding的Tumo项目,虽然本人实在太菜了,好些地方看不懂,但还是使我受益匪浅. shiro作为一个小巧灵活的安全框架,在认证和授权方面简约但又不简单,十分容易上手使用.下面是整合shiro的具体流程. 1.添加依赖 1 <!--shiro和s

Spring MVC整合logback日志框架实战

1.引入依赖,本项目maven构建,普通项目导入想要的jar包即可 版本 <properties> <slf4j-api.version>1.7.7</slf4j-api.version> <logback.version>1.1.3</logback.version> </properties> 依赖包 <dependency> <groupId>ch.qos.logback</groupId>

Spring Boot 整合 Logback 日志框架

常用处理 Java 的日志组件有 slf4j.log4j.logback.common-logging 等.logback 基于 log4j 基础上大量改良,不能单独使用,推荐配合日志框架 slf4j 来使用. logback 当前分成三个模块:logback-core.logback-classic 和 logback-access,logback-core 是其它两个模块的基础模块 logback 的核心对象:Logger(日志记录器).Appender(指定日志输出的目的地,目的地可以是控

struts2+spring+mybatis框架整合详细介绍

一.问题的提出 最近一直在看各种主流javaweb框架,感触颇深,一个好的框架可以让你的程序代码变得相当的明了,也便于后期的维护!目前用到的主流框架包括struts2+spring+mybatis和spring+springmvc+mybatis(注:个人觉得mybatis框架很好用,所以框架基本都会选择用mybatis).其实很多的小伙伴都想自己配置个框架,但是基于怕报错啊.引入jar包.程序调试啊等等问题都放弃了!基于这个现象,本人在这里就详细的介绍下本人配置框架的详细过程,希望对读者有所帮

spring boot 整合spring Data JPA+Spring Security+Thymeleaf框架(上)

最近上班太忙所以耽搁了给大家分享实战springboot 框架的使用. 下面是spring boot 整合多个框架的使用. 首先是准备工作要做好. 第一  导入框架所需的包,我们用的事maven 进行对包的管理. 以上的举例是本人的H5DS的真实的后台管理项目,这个项目正在盛情融资中,各位多多捧点人场.关注一下软件发展的动态,说不定以后就是您的生活不可或缺的软件哟. 点击打开链接.闲话少说.现在切入正题. 第二,写点配置文件 第三,spring data -设计一个简单的po关系,这里需要下载一

Spring与Struts2整合VS Spring与Spring MVC整合

Spring与Struts2整合,struts.xml在src目录下 1.在web.xml配置监听器 web.xml <!-- 配置Spring的用于初始化ApplicationContext的监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <contex

struts2+hibernate-jpa+Spring+maven 整合(2)

之前的一篇已经讲到了 spring 与struts2 的整合, 其实对于struts2+hibernate-jpa+Spring 之间的整合的文章已经相当多了, 也相当成熟了,只要不是各自的版本不兼容之外,其他的几乎没啥问题, 不行mybatis那样是不是的冒点让人头疼的事情来 下面修改pom.xml ,把hibernate 的jar 关联进来; <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="

struts2+hibernate-jpa+Spring+maven 整合(1)

1.0.0 struts2 与 spring 的整合. 1.1.0 新建maven工程 , 编写pom.xml ,这里只需要简单的添加 一个组件就够了: 在myeclipse 生成的pom.xml 添加如下代码: <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.16

Struts2+Hibernate+Spring(SSH)三大框架整合jar包

Struts2 + Spring3 + Hibernate3 框架整合 1. 每个框架使用 (开发环境搭建 )* 表现层框架 struts2 1) jar包导入: apps/struts2_blank.war 包含struts2 开发最基本的jar包 struts2-convention-plugin-2.3.7.jar用于struts使用注解 (如果不使用注解开发,无需导入) struts2-json-plugin-2.3.7.jar 用于struts2整合Ajax struts2-sprin