Spring整合Struts2

在之前的SpringDemo中,已经将Spring和Hibernate整合到了一起,现在将Struts整合到SpringDemo中,这样就是一个完整的基于SSH的简单项目了。

在整个项目的构建过程,我基本是由内向外——先导入jar包、整理配置文件,再完成持久层和控制层的接口和类,最后建立表现层的jsp页面。这样的好处是:每完成一步便可以测一下,及时修改错误;继续下一层的时候不用再操心前面的内容。

1、导入strut2的jar包:

commons-logging-1.0.4.jar----------Jakarta的通用日志记录包

reemarker-2.3.8.jar--------------------FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具

ognl-2.6.11.jar--------------------------支持ognl表达式

struts2-core-2.0.12.jar----------------struts2的核心包

xwork-2.06.jar--------------------------xwork的包由于Struts2是由xwork的延伸,有些类依然关联着 xwork的类

commons-fileupload-1.2.1.jar ------- struts的上传下载

(ognl是一种功能强大的表达式,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。)

添加struts2-spring整合的插件:struts2-spring-plugin-2.0.12.jar

Struts2与Spring的集成要用到Spring插件包struts2-spring-plugin-x-x-x.jar是同Struts2一起发布的。

Spring插件是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象的时候,它会用Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到,则由 Spring创建,否则由Struts2框架自身创建,然后由Spring来装配。

如果不使用这个插件,则需要在struts.xml里面配置: 
Xml代码如下:

<constant name="struts.objectFactory" value="spring" />
    <constant name="struts.objectFactory.spring.autoWire" value="name" />
struts2-spring插件具体有如下几个作用:

1.允许Spring创建Action、Interceptror和Result。

2. 由Struts创建的对象能够被Spring装配。

3.如果没有使用Spring ObjectFactory,提供了2个拦截器来自动装配action。


2、在web.xml里面配置struts2用到的核心过滤器。

<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
3、在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>
	<constant name="struts.objectFactory" value="spring" />
	
    <!-- struts2的action必须放在一个指定的包空间下定义 -->
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="loginAction" method="execute">
            <result name="success">/WEB-INF/success.jsp</result>
            <result name="login">/WEB-INF/login.jsp</result>
        </action>
    </package>

</struts>
4、建立LoginAction,采用@Autowried自动注入AccountService。

LoginAction.java代码如下:

package com.demo.action;

import org.springframework.beans.factory.annotation.Autowired;

import com.demo.service.AccountService;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1438866827399732426L;
	
	@Autowired
	private AccountService accountService;
	
	private String username;
	private String password;
	
	@Override
	public String execute(){
		System.out.println("run execute...");
		if(accountService.hasMatchAccount(username, password)){
			return SUCCESS;
		}
		return LOGIN;
	}
	
	
	public String getUsername(){
		return username;
	}
	
	public void setUsername(String name){
		this.username = name;
	}
	
	public String getPassword(){
		return password;
	}
	
	public void setPassword(String password){
		this.password = password;
	}
}
5、修改login.jsp,添加success.jsp

login.jsp内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>Insert title here</title>
</head>
<body>
<s:form action="login" method="post">
    <s:label value="系统登陆"></s:label>
    <s:textfield name="username" label="账号" />
    <s:password name="password" label="密码" />
    <s:submit value="登录" />
</s:form>

</body>
</html>
success.jsp内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>Insert title here</title>
</head>
<body>
<h2>欢迎<s:property value="username"/>!</h2>
</body>
</html>
6、这样我们就完成了对Struts2的简单整合,完成了一个简单的基于SSH框架的登陆Demo。对SSH有了一个基本的了解,接下来将进行更深入的学习。

因为在跟老师做项目的时候用过Spring,感觉还不错;因此在学习的过程中主要以Spring为核心,来拓展对其他框架的学习。

每个框架都有其丰富的功能,任何一篇文章、一部书不可能穷尽其特性。需要在在实践过程中,边学边用,逐渐熟悉。



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。