Spring 4与Struts 2项目基于XML的集成实战

简介: Spring 4与Struts 2项目基于XML的集成实战 本文主要讲述如何将Spring Framework 4.2.1版与Struts 2.3.24.1版通过XML配置进行集成,从而用于Web项目的开发。

Spring 4与Struts 2项目基于XML的集成实战

本文主要讲述如何将Spring Framework 4.2.1版与Struts 2.3.24.1版通过XML配置进行集成,从而用于Web项目的开发。

一、为什么要集成

Spring是一个企业Java应用开发框架,而Struts 是一个Java Web应用开发框架,这意味着两者可以结合在一起用于开发Web应用。

Spring MVC是Spring框架的一部分,用于建立Java Web应用,而Struts立足于Java Servlet API的基础上也使用了MVC架构。因此,当Spring和Struts相集成时,在MVC部分不应该重叠,而应该相互补充。

Spring框架有一个优秀的依赖注入管理,因此可用于管理业务逻辑Bean和Struts的Action Bean。另一方面,我们可以使用Struts负责Web应用的MVC部分。

二、怎样集成

Struts 2框架提供了一个名为Spring Plugin的插件,通过此插件可以与Spring框架进行集成。此插件提供了这样的JAR包:struts2-spring-plugin-VERSION.jar,把此文件放入Web项目中。

要启用Spring Plugin插件,让Spring框架通过其反转控制容器来管理Struts的所有Action Bean,在Spring应用持续上下文配置文件中进行声明。这样,在Struts的配置文件中,就可以使用Bean的名字来代替原先的“包名+类名”的方式。比如可以这样:

<action name="processOrder" class="ProcessOrderBean"> 

而原先是这样:

<bean id="ProcessOrderBean" class="net.codejava.ProcessOrderDAO"> 

另外,还可以使用Spring框架的@Autowired注释让Spring字段注入依赖进类中。

下面我们开始实战。

本文使用的工具如下:

  1. Eclipse Mars.1 Release (4.5.1): http://www.eclipse.org/downloads
  2. Maven 3.3.3: http://maven.apache.org/download.cgi
  3. Java SE 8u60: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  4. Spring Framework 4.2.1.RELEASE: http://projects.spring.io/spring-framework
  5. Struts 2 Framework 2.3.24.1: http://struts.apache.org/download.cgi
  6. Tomcat 8.0.27: http://tomcat.apache.org/download-80.cgi

三、用Eclipse创建Maven项目

1、创建Maven项目

修改项目的Facet,调整为Dynamic Web Module (3.0)和Java (1.8) 

2、添加Maven依赖

  1. 声明Java和Spring框架的版本

    <properties>
        <java-version>1.8</java-version>
        <org.springframework-version>4.2.1.RELEASE</org.springframework-version>
    </properties> 
  2. 添加Spring框架的依赖

     <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency> 
  3. 添加Struts 2框架的依赖

     <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.3.24.1</version>
        </dependency> 
  4. 添加Spring Plugin插件的依赖

     <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.3.24.1</version>
        </dependency> 
  5. 添加编译时所需的Java Servlet & JSP依赖

     <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency> 

3、编写模型类

创建名为User.java的模型类

package com.ch.web;

public class User {
    private String username;
    private String email;
    private String password;

    public String getUsername() {
        return username;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
} 

4、编写业务逻辑类

创建名为UserDAO.java的业务逻辑类:

package com.ch.web;

public class UserDAO {
    public boolean checkLogin(User user){
        return user.getUsername().equals("admin") &&
                user.getPassword().equals("pwd");
    }
} 

可见,有效的用户名为“admin”,密码为“pwd”。

5、编写Struts的Action类

编写Struts的Action类LoginAction.java

package com.ch.web;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    private static final long serialVersionUID = 5852143705799268668L;
    private UserDAO userDAO;
    private User user;

    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

    public User getUser() {
        return user;
    }

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

    public String execute(){
        if (userDAO.checkLogin(user))
            return SUCCESS;
        return ERROR;
    }
} 

需要理解:

  1. userDao的Setter方法是供Spring注入实际的实现类
  2. 成员变量user的getter和setter方法用于表单与模型对象User的一一对应
  3. 方法execute()简单的重定向到SUCCESS页面或ERROR页面

6、编写登录页面

创建名为LoginForm.jsp的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!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>Spring and Struts Integration Demo</title>
</head>
<body>
    <div align="center">
        <h1>Spring and Struts Integration Demo</h1>
        <h2>Users Login</h2>
        <s:form action="login" method="post">
            <s:textfield label="用户名" name="user.username" />
            <s:password label="密码" name="user.password" />
            <s:submit value="登录" />
        </s:form>
    </div>
</body>
</html> 

7、创建登录成功和登录失败的页面

登录成功的LoginSuccess.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>Login Success</title>
</head>
<body>
    <div align="center">
        <h1>登录成功,欢迎使用!</h1>
    </div>
</body>
</html> 

登录失败的LoginError.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>Login Error</title>
</head>
<body>
    <div align="center">
        <h1>登录失败!错误的用户名或密码</h1>
    </div>
</body>
</html> 

8、在web.xml中配置Spring和Struts

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"
    id="SpringStrutsIDemo" version="3.0">
    <display-name>SpringStrutsIDemo</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <filter>
        <filter-name>DispatcherFilter</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>DispatcherFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>LoginForm.jsp</welcome-file>
    </welcome-file-list>
</web-app> 

9、编写Struts配置

在项目src下创建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="Struts2SpringDemo" namespace="/" extends="struts-default">
        <action name="login" class="loginActionBean">
            <result name="input">/LoginForm.jsp</result>
            <result name="success">/LoginSuccess.jsp</result>
            <result name="error">/LoginError.jsp</result>
        </action>
    </package>
</struts> 

10、编写Spring配置文件

在/WEB-INF/spring目录下创建名为appContext.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="loginActionBean" class="net.codejava.web.LoginAction">
        <property name="userDAO" ref="userDAO" />
    </bean>
    <bean id="userDAO" class="com.ch.web.UserDAO" />
</beans> 

11、最终的项目结构

最终项目结构如图所示: 

四、测试项目

项目部署后,浏览器访问:http://localhost:8080/SpringStrutsIntegrationDemo/LoginForm.jsp

可以看到 

输入“admin”和“pwd”后,可以看到 

如果输入错误,可以看到: 

可见,项目完全工作正常。Spring 4与Struts 2项目基于XML的集成是成功的。

目录
相关文章
|
6月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
1590 1
|
6月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
293 0
|
11月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
547 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
11月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
9月前
|
XML Java 数据格式
【SpringFramework】Spring IoC-基于XML的实现
本文主要讲解SpringFramework中IoC和DI相关概念,及基于XML的实现方式。
193 69
|
6月前
|
NoSQL Java API
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Spring Boot 集成 Redis
本文介绍了在Spring Boot中集成Redis的方法,包括依赖导入、Redis配置及常用API的使用。通过导入`spring-boot-starter-data-redis`依赖和配置`application.yml`文件,可轻松实现Redis集成。文中详细讲解了StringRedisTemplate的使用,适用于字符串操作,并结合FastJSON将实体类转换为JSON存储。还展示了Redis的string、hash和list类型的操作示例。最后总结了Redis在缓存和高并发场景中的应用价值,并提供课程源代码下载链接。
1645 0
|
9月前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
8月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
554 8
|
9月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
255 6
|
10月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
806 8