全部博文(626)
分类: 架构设计与优化
2015-10-04 14:17:55
本文主要讲述如何将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字段注入依赖进类中。
下面我们开始实战。
本文使用的工具如下:
修改项目的Facet,调整为Dynamic Web Module (3.0)和Java (1.8)
声明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>
创建名为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;
}
}
创建名为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”。
编写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;
}
}
需要理解:
创建名为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"
"
<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>
登录成功的LoginSuccess.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
<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"
"
<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>
web.xml的内容如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="
xmlns="
xsi:schemaLocation=" /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>
在项目src下创建struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"
<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>
在/WEB-INF/spring目录下创建名为appContext.xml的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="
xmlns:xsi="
xsi:schemaLocation="
/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>
最终项目结构如图所示:
可以看到
输入“admin”和“pwd”后,可以看到
如果输入错误,可以看到:
可见,项目完全工作正常。Spring 4与Struts 2项目基于XML的集成是成功的。