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>

  • 相关阅读:
    [ZJOI2006]物流运输
    [SCOI2009]生日快乐
    [FJOI2007]轮状病毒
    [转载]centos 7(1611)安装笔记
    发行版Linux和麒麟操作系统下netperf 网络性能测试
    ARM64平台编译stream、netperf出错解决办法 解决办法:指定编译平台为alpha [root@localhost netperf-2.6.0]# ./configure –build=alpha
    查看linux系统是多少位,使用 getconf LONG_BIT
    https://www.jqhtml.com/30047.html strace + 命令: 这条命令十分强大,可以定位你程序到底是哪个地方出了问题
    Centos7 利用crontab定时执行任务及配置方法
    清楚自己的短板是什么 搞清楚自己的职业规划是什么
  • 原文地址:https://www.cnblogs.com/llguanli/p/8760721.html
Copyright © 2011-2022 走看看