Spring的WEB模块用于整合Web框架,例如Struts1、Struts2、JSF等
整合Struts1
继承方式
Spring框架提供了ActionSupport类支持Struts1的Action。继承了ActionSupport后就能获取Spring的BeanFactory,从而获得各种Spring容器内的各种资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import org.springframework.web.struts.ActionSupport; public class CatAction extends ActionSupport{ public ICatService getCarService(){ return (ICatService) getWebApplicationContext().getBean( "catService" ); } public ActionForward execute(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){ CatForm catForm = (CatForm) form; if ( "list" .equals(catForm.getAction())){ returnthis.list(mapping,form,request,response); } } public ActionForward list(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){ CatForm catForm = (CatForm) form; ICatService catService =getCatService(); List<Cat> catList =catService.listCats(); request.setAttribute( "carList" ,catList); return mapping.find( "list" ); } } |
Spring在web.xml中的配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
< context-param > <!-- Spring配置文件的位置--> < param-name >contextConfigLocation</ param-name > < param-value >/WEB-INF/classes/applicationContext.xml</ param-value > </ context-param > < listener > <!-- 使用Listener加载Spring配置文件--> < listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class > </ listener > < filter > <!-- 使用Spring自带的字符过滤器--> < filter-name >CharacterEncodingFilter</ filter-name > < filter-class >org.springframework.web.filter.CharacterEncodingFilter</ filter-class > < init-param > < param-name >encoding</ param-name > < param-value >UTF-8</ param-value > </ init-param > < init-param > < param-name >forceEncoding</ param-name > < param-value >true</ param-value > </ init-param > </ filter > < filter-mapping > < filter-name >CharacterEncodingFilter</ filter-name > < url-pattern >/*</ url-pattern > </ filter-mapping > |
如果与Hibernate结合使用,需要在web.xml中添加OpenSessionInViewFilter过滤器,将session范围扩大到JSP层,防止抛出延迟加载异常
1
2
3
4
5
6
7
8
|
< filter > < filter-name >hibernateFilter</ filter-name > < filter-class >org.springframework.orm.hibernate3.support. OpenSessionInViewFilter</ filter-class > </ filter > < filter-mapping > < filter-name > hibernateFilter</ filter-name > < url-pattern >*.do</ url-pattern > <!-- 对Struts 1的Action启用--> </ filter-mapping > |
代理方式
继承方式融入Spring非常简单,但是缺点是代码与Spring发生了耦合,并且Action并没有交给Spring管理,因此不能使用Spring的AOP、IoC特性,使用代理方式则可以避免这些缺陷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class CatAction extends Action{ //此处继承的Struts 1的Action private ICatService catService; //setter、getter略 public ActionForward execute(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){ CatForm catForm = (CatForm) form; if ( "list" .equals(catForm.getAction())){ returnthis.list(mapping,form,request,response); } } public ActionForward list(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){ CatForm catForm = (CatForm) form; ICatService catService =getCatService(); List<Cat> catList =catService.listCats(); request.setAttribute( "carList" ,catList); return mapping.find( "list" ); } } |
这个Action没有与Spring发生耦合,只是定义了一个ICatService属性,然后由Spring负责注入
struts-congfig.xml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< form-beans > < form-bean name = "catForm" type = "com.clf.spring.CatForm" > </ form-beans > < action-mappings > < action name = " catForm" path = "/cat" type = "com.clf.spring.CatAction" > < forward name = "list" path = "/jsp/listCat.jsp" ></ forward > </ action > </ action-mappings > <!-- 最核心的配置,该配置把Struts的Action交给Spring代理--> < controller processorClass = "org.springframework.web.struts.DelegatingRequestProcessor" /> <!-- controller配置生效后,Action的type属性就是去作用了,Struts不会用type属性指定的类来创建CatAction,而是到Spring配置中寻找,因此Spring中必须配置CatAction --> <!-- Spring中配置Action使用的是name属性而不是id,Spring会截获"/cat.do"的请求,将catService通过setter方法注入到CatAction中,并调用execute()方法--> < bean name = "/cat" class = " com.clf.spring.CatAction" > < property name = "catService" ref = "catService" /> </ bean > |
web.xml的配置与上面的继承方式相同
使用代理方式的Action可以配置拦截器等Spring特性,例如给CatAction配置方法前拦截器和返回后拦截器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
< bean id = "catBeforeInterceptor" class = "org.springframework.aop.support.NameMatchMethodPointcutAdvodor" > < property name = "advice" > < bean class = "com.clf.spring.MethodBeforeInterceptor" /> </ property > < property name = "mappedName" value = "*" ></ property > </ bean > < bean id = "catAfterInterceptor" class = "org.springframework.aop.support.NameMatchMethodPointcutAdvodor" > < property name = "advice" > < bean class = "com.clf.spring.MethodAfterInterceptor" /> </ property > < property name = "mappedName" value = "*" ></ property > </ bean > < bean name = "/cat" class = "org.springframework.aop.framework.ProxyFactoryBean" > < property name = "interceptorNames" > < list > < value > catBeforeInterceptor</ value > < value > catAfterInterceptor</ value > </ list > </ property > < property name = "target" > < bean class = "com.clf.spring.CatAction" > < property name = "catService" ref = "catService" ></ property > </ bean > </ property > </ bean > |
整合Struts 2
Spring整合Struts 2需要struts2-spring-2.011.jar包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class CatAction{ private ICatService catService; private Cat cat; //setter、getter略 public String list(){ catService.listCats(); return "list"; } public String add(){ catService.createCat(cat); return list(); } } |
struts.xml配置
除了正常的配置之外,还需要<contstant/>添加名为struts.objectFactory的常量,把值设为spring,表示该Action由Spring产生。然后把<action/>的class属性改为catAction,Struts2将会到Spring中寻找名为catAction的bean
1
2
3
4
5
6
7
8
9
|
< constant name = " struts.objectFactory" value = "spring" /> < packagenamepackagename = "cat" extends = "struts-default" > < action name = "*_cat" method = "{1}" class = "catAction" > < param name = "action" >{1}</ param > < result >/list.jsp</ result > < result name = "list" >/list.jsp</ result > </ action > </ package > |
Spring配置
1
2
3
|
< bean id = "catAction" scope = "prototype" class = "com.clf.spring.CatAction" > < property name = "catService" ref = "catService" ></ property > </ bean > |
web.xml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
< context-param > <!-- Spring配置文件的位置--> < param-name >contextConfigLocation</ param-name > < param-value >/WEB-INF/classes/applicationContext.xml</ param-value > </ context-param > < listener > <!-- 使用Listener加载Spring配置文件--> < listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class > </ listener > < filter > < filter-name >Struts2</ filter-name > < filter-class >org.apache.struts2.dispatcher.FilterDispatcher</ filter-class > </ filter > < filter-mapping > < filter-name > Struts2</ filter-name > < url-pattern >/*</ url-pattern > </ filter-mapping > |
总结
以上就是本文关于Spring之WEB模块配置详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。
参考:
原文链接:http://blog.csdn.net/u012152619/article/details/44258343