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

来源:互联网 发布:java 运算符 编辑:程序博客网 时间:2024/05/02 23:21

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

作者:chszs,版权所有,未经同意,不得转载。博主主页:http://blog.csdn.net/chszs

为什么要写这篇Hello World级别的文章。大约十年前,我开始使用Spring 2和Struts 1开发Web应用,构建工具使用的是Ant。早些年,把多个框架集成在一起并不容易,各框架间的兼容性也没有现在这么好。不管怎么样,这些基础的框架伴随我们多年。如今十年过去了,沧海桑田,Spring框架和Struts框架都经过了无数个版本的迭代和重构,我重新做一次集成实践,用Maven来统管项目,既为了纪念往昔,也给后来者提供一个阶梯,方便初学者快速入门。

本文主要讲述如何将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的集成是成功的。

1 0
原创粉丝点击