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很easy,可是缺点是代码与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 /*