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为核心,来拓展对其他框架的学习。
每个框架都有其丰富的功能,任何一篇文章、一部书不可能穷尽其特性。需要在在实践过程中,边学边用,逐渐熟悉。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。