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字段注入依赖进类中。
下面我们开始实战。
本文使用的工具如下:
- Eclipse Mars.1 Release (4.5.1): http://www.eclipse.org/downloads
- Maven 3.3.3: http://maven.apache.org/download.cgi
- Java SE 8u60: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- Spring Framework 4.2.1.RELEASE: http://projects.spring.io/spring-framework
- Struts 2 Framework 2.3.24.1: http://struts.apache.org/download.cgi
- 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依赖
声明Java和Spring框架的版本
<properties> <java-version>1.8</java-version> <org.springframework-version>4.2.1.RELEASE</org.springframework-version></properties>
添加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>
添加Struts 2框架的依赖
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.24.1</version> </dependency>
添加Spring Plugin插件的依赖
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.24.1</version> </dependency>
添加编译时所需的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; }}
需要理解:
- userDao的Setter方法是供Spring注入实际的实现类
- 成员变量user的getter和setter方法用于表单与模型对象User的一一对应
- 方法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的集成是成功的。
- Spring 4与Struts 2项目基于XML的集成实战
- Spring 4与Struts 2项目基于XML的集成实战
- A 项目 实战 (二)Spring 与 Struts 集成
- Struts与Spring的集成
- Spring与Struts的集成
- spring+struts+hibernate集成环境(基于maven项目搭建)
- Spring与Struts集成
- Spring与Struts集成
- struts与spring集成
- struts与spring集成
- 深入探讨 Spring 与 Struts 的集成方案(4)
- 深入探讨 Spring 与 Struts 的集成方案(2)
- 探讨Spring与Struts 的集成方案
- spring与struts、hibernate的集成
- struts与spring集成的另一种方式
- dorado与Struts、Hibernate、Spring的集成
- Spring系列之与Struts的集成
- 实现Spring与Struts 2集成
- #323 (Div. 2) A
- java 复习笔记57
- poll函数源码详细分析 http://blog.csdn.net/lmh12506/article/details/7556297
- C# 获得当前路径(目录)的方法
- java SE复习笔记58
- Spring 4与Struts 2项目基于XML的集成实战
- javascript ==和Boolean 使用时数值转boolean是不同情况
- 海量数据处理常用思路和方法 http://blog.csdn.net/lmh12506/article/details/7563266
- 人生没有草稿
- 【WZOI第二次NOIP模拟赛Day1T1】神秘大门 解题报告
- linux常用命令
- #323 (Div. 2) B
- redis 算法移植-链表
- java SE复习笔记59