先进行通用配置,?【第十章】集成其它Web框架 之 10.1 概述? ?????? Struts1.x是最早实现MVC(模型-视图-控制器)模式的Web框架之一,其使用非常广泛,虽然目前已经有Struts2.x等其他Web框架,但仍有很多公司使用Struts1.x框架。 ?????? 集成Struts1.x也非常简单,除了通用配置外,有两种方式可以将Struts1.x集成到Spring中: ? ???????接下来让我们首先让我们准备Struts1x所需要的jar包: 1.1、从下载的spring-framework-3.0.5.RELEASE-with-docs.zip中dist目录查找如下jar包,该jar包用于提供集成struts1.x所需要的插件实现等: ? ? 1.2、从下载的spring-framework-3.0.5.RELEASE-dependencies.zip中查找如下依赖jar包,该组jar是struts1.x需要的jar包: com.springsource.org.apache.struts-1.2.9.jar ? ? ? ? ? ? ? ? ? ? ?//struts1.2.9实现包 com.springsource.org.apache.commons.digester-1.8.1.jar? ??//用于解析struts配置文件 com.springsource.org.apache.commons.beanutils-1.8.0.jar?? //用于请求参数绑定 com.springsource.javax.servlet-2.5.0.jar ? ? ? ? ? ? ? ? ? ? ? ? ? ?//Servlet 2.5 API antlr.jar ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//语法分析包(已有) commons-logging.jar ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //日志记录组件包(已有) servlet-api.jar ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //Servlet API包(已有) jsp-api.jar ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//JSP API包(已有,可选) commons-validator.jar ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //验证包(可选) commons-fileupload.jar ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //文件上传包(可选) ? 只使用通用配置,利用WebApplicationContextUtils提供的获取Spring Web容器方法获取Spring Web容器,然后从Spring Web容器获取Spring管理的Bean。 ? 1、?第一个Action实现: ? ?????? 此Action实现非常简单,首先通过WebApplicationContextUtils获取Spring Web容器,然后从Spring Web容器中获取“message”Bean并将其放到request里,最后转到“hello”所代表的jsp页面。 ? 2、JSP页面定义(webapp/WEB-INF/jsp/hello.jsp): ? ? 3、配置文件定义: ? 3.1、Spring配置文件定义(resources/chapter10/applicationContext-message.xml): 在此配置文件中定义我们使用的“message”Bean; ? ? 3.2、struts配置文件定义(resources/chapter10/struts1x/struts-config.xml): ? ? 3.3、web.xml部署描述符文件定义(webapp/WEB-INF/web.xml)添加如下内容: ? ? ?????? Struts1.x前端控制器配置了ActionServlet前端控制器,其拦截以.do开头的请求,Strut配置文件通过初始化参数“config”来指定,如果不知道“config”参数则默认加载的配置文件为“/WEB-INF/ struts-config.xml”。 ? 4、执行测试:在Web浏览器中输入http://localhost:8080/hello.do可以看到“Hello Spring”信息说明测试正常。 ? ?????? 有朋友想问,我不想使用这种方式,我想在独立环境内测试,没关系,您只需将spring/lib目录拷贝到spring/webapp/WEB-INF/下,然后将webapp拷贝到如tomcat中即可运行,尝试一下吧。 ?????? Spring还提供ActionSupport类来简化获取WebApplicationContext,Spring为所有标准Action类及子类提供如下支持类,即在相应Action类后边加上Support后缀: 具体使用方式如下: ? 1、Action定义 ? ? 和第一个示例唯一不同的是直接调用getWebApplicationContext()即可获得Spring Web容器。 ? 2、修改Struts配置文件(resources/chapter10/struts1x/struts-config.xml)添加如下Action定义: ? ? 3、启动嵌入式Web服务器并在Web浏览器中输入http://localhost:8080/hello2.do可以看到“Hello Spring”信息说明Struts1集成成功。 ? 这种集成方式好吗?而且这种方式算是集成吗?直接获取Spring Web容器然后从该Spring Web容器中获取Bean,暂且看作是集成吧,这种集成对于简单操作可以接受,但更复杂的注入呢?接下来让我们学习使用Struts插件进行集成。 Struts插件集成使用ContextLoaderPlugin类,该类用于为ActionServlet加载Spring配置文件。 ? 1、在Struts配置文件(resources/chapter10/struts1x/struts-config.xml)中配置插件: ? ? 由于我们的ActionServlet在web.xml中的名字为hello,而我们的配置文件在/WEB-INF/hello-servlet.xml,因此contextConfigLocation和namespace可以不指定,因此最简单配置如下: ? ? 通用配置的Spring Web容器将作为ContextLoaderPlugin中创建的Spring Web容器的父容器存在,然而可以省略通用配置而直接在struts配置文件中通过ContextLoaderPlugin插件指定所有配置文件。 ? 插件已经配置了,那如何定义Action、配置Action、配置Spring管理Bean呢,即如何真正集成Spring+Struts1x呢?使用插件方式时Action将在Spring中配置而不是在Struts中配置了,Spring目前提供以下两种方式: 看懂了吗?好像没怎么看懂,那就直接上代码,有代码有真相。 ? 2、定义Action实现,由于Action将在Spring中配置,因此message可以使用依赖注入方式了: ? ? 3、DelegatingActionProxy方式与Spring集成配置: ? 3.1、在Struts配置文件(resources/chapter10/struts1x/struts-config.xml)中进行Action定义: ? ? 3.2、在Spring配置文件(webapp/WEB-INF/hello-servlet.xml)中定义Action对应的Bean: ? ? 3.3、启动嵌入式Web服务器并在Web浏览器中输入http://localhost:8080/hello3.do可以看到“Hello Spring”信息说明测试正常。 ?????? 从以上配置中可以看出: 很简单吧,DelegatingActionProxy是个代理Action,其实现了Action类,其内部帮我们查找相应的Spring管理Action Bean并把请求转发给这个真实的Action。 ? ? 4、DelegatingRequestProcessor方式与Spring集成: ? 4.1、首先要替换掉Struts默认的RequestProcessor,在Struts配置文件(resources/chapter10/struts1x/struts-config.xml)中添加如下配置: ? ? 4.2、在Struts配置文件(resources/chapter10/struts1x/struts-config.xml)中进行Action定义: ? ? 或更简单形式: ? ? ? 4.3、在Spring配置文件(webapp/WEB-INF/hello-servlet.xml)中定义Action对应的Bean: ? ? 4.4、启动嵌入式Web服务器并在Web浏览器中输入http://localhost:8080/hello4.do可以看到“Hello Spring”信息说明Struts1集成成功。 ? 从以上配置中可以看出: 很简单吧,只是由DelegatingRequestProcessor去帮我们查找相应的Action Bean,但没有代理Action了,所以推荐使用该方式。 ? 图10-4 共享及专用Spring Web容器 ? Struts1x与Spring集成到此就完成了,在集成时需要注意一下几点:10.2? 集成Struts1.x
10.2.1? 概述
org.springframework.web.struts-3.0.5.RELEASE.jar?
??
10.2.2? 最简单集成
package cn.javass.spring.chapter10.struts1x.action;
import org.apache.struts.action.Action;
//省略部分import
public class HelloWorldAction1 extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
WebApplicationContext ctx = WebApplicationContextUtils.
getRequiredWebApplicationContext(getServlet().getServletContext());
String message = ctx.getBean("message", String.class);
request.setAttribute("message", message);
return mapping.findForward("hello");
}
}
<%@ page language="java" pageEncoding="UTF-8"
contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
${message}
</body>
</html>
<bean id="message" class="java.lang.String">
<constructor-arg index="0" value="Hello Spring"/>
</bean>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<action-mappings>
<action path="/hello" type="cn.javass.spring.chapter10.struts1x.action.HelloWorldAction1">
<forward name="hello" path="/WEB-INF/jsp/hello.jsp"/>
</action>
</action-mappings>
</struts-config>
<!-- Struts1.x前端控制器配置开始 -->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/classes/chapter10/struts1x/struts-config.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- Struts1.x前端控制器配置结束 -->
package cn.javass.spring.chapter10.struts1x.action;
//省略import
public class HelloWorldAction2 extends ActionSupport {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
WebApplicationContext ctx = getWebApplicationContext();
String message = ctx.getBean("message", String.class);
request.setAttribute("message", message);
return mapping.findForward("hello");
}
}
<action path="/hello2" type="cn.javass.spring.chapter10.struts1x.action.HelloWorldAction2">
<forward name="hello" path="/WEB-INF/jsp/hello.jsp"/>
</action>
?
10.2.2? Struts1.x插件集成
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextClass" value="org.springframework.web.context.support.XmlWebApplicationContext"/>
<set-property property="contextConfigLocation" value="/WEB-INF/hello-servlet.xml"/>
<set-property property="namespace" value="hello"/>
</plug-in>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>
package cn.javass.spring.chapter10.struts1x.action;
//省略
public class HelloWorldAction3 extends Action {
private String message;
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setAttribute("message", message);
return mapping.findForward("hello");
}
public void setMessage(String message) {//有setter方法,大家是否想到setter注入
this.message = message;
}
}
<action path="/hello3" type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="hello" path="/WEB-INF/jsp/hello.jsp"/>
</action>
<bean name="/hello3" class="cn.javass.spring.chapter10.struts1x.action.HelloWorldAction3">
<property name="message" ref="message"/>
</bean>
<controller>
<set-property property="processorClass"
value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller>
<action path="/hello4" type=" cn.javass.spring.chapter10.struts1x.action.HelloWorldAction3">
<forward name="hello" path="/WEB-INF/jsp/hello.jsp"/>
</action>
<action path="/hello4">
<forward name="hello" path="/WEB-INF/jsp/hello.jsp"/>
</action>
<bean name="/hello4" class="cn.javass.spring.chapter10.struts1x.action.HelloWorldAction3">
<property name="message" ref="message"/>
</bean>
详细解决方案
【第十章】集成其它Web框架 之 10.2 集成Struts1.x ――跟小弟我学spring3
热度:239 发布时间:2012-06-30 17:20:12.0
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
原创内容,转载请注明出处【http://sishuok.com/forum/blogPost/list/2511.html】
相关解决方案
- spring3.1 + mybatis 回来null正常,返回结果前台接收不到
- spring3 mvc 报业务错误和处理错误后应答中文乱码
- struts2,hibernate,spring3 常用框架的API CHM版本,该怎么处理
- struts1 中Action需要向页面传递对象的有关问题
- struts2,hibernate,spring3 惯用框架的API CHM版本
- struts2.3.4+spring3.1+mybats帮忙看看这个有关问题
- spring3 mvc引文校验@NotNull不起作用
- spring3.0 mvc 启动报错!请高手帮忙看一上是什么东东
- spring3.1.1中aspectj引语的应用
- Spring3 mvc, 怎么配置匹配 '/' 结尾的URL
- Hibernate4+Struts2的2.3版本+Spring3.1.2整合出现的小异常、
- 基于Annotation的Struts2+Spring3, Spring没法向acition中注入service
- struts1 怎么把action嵌入到jsp中
- spring3 mvc中的拦截器,该如何处理
- struts1.x包孕嵌套List的多行提交
- 如何隐藏Mysql数据库中一个字段 JSP+Struts1.2
- struts1 myeclipse tomcat 从页面失去乱码
- Hibernate4+spring3.1集成有关问题
- struts1.2 actionform对象替空
- Struts1.2停测试action时不能加载spring配置文件
- spring3.1使用JDBC数据源datasource的异常有关问题
- Spring3.11与Ibatis2.3.2一对一查询有关问题
- struts1.3 异常 找了 一天了
- (struts1.2)为什么点了添加按钮没执行Action?该怎么解决
- spring3+mybatis事务不回滚解决方法
- spring3.0注解使用解决方案
- struts1 中<html:checkbox>标签的value值怎么动态赋值
- spring3.0 validation 证验实体bean的无效
- spring3.1RC和hibernate4.0一起用,报错,请高人指点一上,是什么地方出错了
- spring3 applicationContext.xml 怎么配置多个DAO