zoukankan      html  css  js  c++  java
  • Spring之WEB模块

    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();
                 List<Cat> catList =catService.listCats();
                 request.setAttribute("carList",catList);
     
                 return mapping.find("list");
          }
    }
    


    Spring在web.xml中的配置

    <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层。防止抛出延迟载入异常

    <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很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();
                 List<Cat> catList =catService.listCats();
                 request.setAttribute("carList",catList);
     
                 return mapping.find("list");
          }
    }

    这个Action没有与Spring发生耦合。仅仅是定义了一个ICatService属性,然后由Spring负责注入

     

    struts-congfig.xml配置

     

    <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配置方法前拦截器和返回后拦截器

    <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包

    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

    <constant name=" struts.objectFactory" value="spring" />
     
    <packagename="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配置

    <bean id="catAction" scope="prototype" class="com.clf.spring.CatAction">
          <property name="catService" ref="catService"></property>
    </bean>
     

    web.xml配置

    <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>

  • 相关阅读:
    PythonのTkinter基本原理
    使用 Word (VBA) 分割长图到多页
    如何使用 Shebang Line (Python 虚拟环境)
    将常用的 VBScript 脚本放到任务栏 (Pin VBScript to Taskbar)
    关于 VBScript 中的 CreateObject
    Windows Scripting Host (WSH) 是什么?
    Component Object Model (COM) 是什么?
    IOS 打开中文 html 文件,显示乱码的问题
    科技发展时间线(Technology Timeline)
    列置换密码
  • 原文地址:https://www.cnblogs.com/llguanli/p/8760721.html
Copyright © 2011-2022 走看看