Spring的WEB模块用于整合Web框架,例如Struts 1、Struts 2、JSF等
整合Struts 1
继承方式
Spring框架提供了ActionSupport类支持Struts 1的Action。继承了ActionSupport后就能获取Spring的BeanFactory,从而获得各种Spring容器内的各种资源
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(); ListcatList =catService.listCats(); request.setAttribute("carList",catList); return mapping.find("list"); }} Spring在web.xml中的配置
contextConfigLocation /WEB-INF/classes/applicationContext.xml org.springframework.web.context.ContextLoaderListener CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true CharacterEncodingFilter /* 如果与Hibernate结合使用,需要在web.xml中添加OpenSessionInViewFilter过滤器,将session范围扩大到JSP层,防止抛出延迟加载异常
hibernateFilter org.springframework.orm.hibernate3.support. OpenSessionInViewFilter hibernateFilter *.do
代理方式
继承方式融入Spring非常简单,但是缺点是代码与Spring发生了耦合,并且Action并没有交给Spring管理,因此不能使用Spring的AOP、IoC特性,使用代理方式则可以避免这些缺陷
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(); ListcatList =catService.listCats(); request.setAttribute("carList",catList); return mapping.find("list"); }} 这个Action没有与Spring发生耦合,只是定义了一个ICatService属性,然后由Spring负责注入
struts-congfig.xml配置
web.xml的配置与上面的继承方式相同
使用代理方式的Action可以配置拦截器等Spring特性,例如给CatAction配置方法前拦截器和返回后拦截器
catBeforeInterceptor catAfterInterceptor 整合Struts 2
Spring整合Struts 2需要struts2-spring-2.011.jar包
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,Struts 2将会到Spring中寻找名为catAction的bean
{1} /list.jsp /list.jsp Spring配置
web.xml配置
contextConfigLocation /WEB-INF/classes/applicationContext.xml org.springframework.web.context.ContextLoaderListener Struts2 org.apache.struts2.dispatcher.FilterDispatcher Struts2 /*