posts - 251,  comments - 25,  trackbacks - 0
 一、spring容器的创建方式
    1.直接在web.xml中配置创建spring容器
        1.1 用ServletContextListener方式实现
                <listener>
                    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                </listener>
              如果有多个配置文件需要载入,使用<context-param>元素,ContextLoaderListener加载时,会查找名为contextConfigLocation的参数,所以,有下面:
                <context-param>
                        <param-name>contextConfigLocation</param-name>
                        <param-value>/WEB-INF/daoContext.xml,/WEB-INF/applicationContext.xml</param-value>
                </context-param>
        1.2 用load-on-startup Servlet方式实现
                <servlet>
                    <servlet-name>context</servlet-name>
                    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
                    <load-on-startup>1</load-on-startup>
                </servlet>
    2.用struts plugin创建spring容器
        在struts-config.xml中加入
        <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
            <set-property property="contextConfigLocation" value="/WEB-INF/action-servlet.xml(用于配置表示层上下文),/WEB-INF/applicationContext.xml"/>
        </plug-in>


二.问题
    如何让控制器访问到spring容器中的业务逻辑组件?有两种方式2.1,2.2
        2.1 spring管理控制器,并利用IOC为控制器注入逻辑组件
            2.1.1 使用spring的DelegatingRequestProcessor
                        在struts-config.xml中加入
                            <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
                     而后,struts会接取用户请求转发到spring context下的bean,根据bean的name来匹配,因此在struts的action中配置type是没用的!
                如下: 
                        <action path="/login" name="loginForm" scope="requerst" validate="true" input="/login.jsp">
                            <forward name="input" path="/login.jsp"/>
                            <forward name="welcom" path="/welcom.jsp"/>
                        </action>
           然后在web.xml中配置:
            <filter>
                    <filter-name>requestContextFilter</filter-name>
                    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
            </filter>
            <filter-mapping>
                   <filter-name>requestContextFilter</filter-name>
                    <url-pattern>/*</url-pattern>
            </filter-mapping>


           2.1.2   使用DelegatingActionProxy(为了避免应用程序本身就扩展了RequetstProcessor,DelegatingRequestProcessor就用不成了)
                DelegatingActionProxy被配置成struts的Action(即所有请求先被ActionServlet得到),转发到相应的Action,而Action的实现全都是DelegatingActionProxy,DelegatingActionProxy再把请求转发给spring容器的Action.
                DelegatingActionProxy不需要在struts-config.xml中配置<controller>元素,只需将action type进行如下配置:
                <action path="/login" name="loginForm" scope="requerst" validate="true" input="/login.jsp" type="org.springframework.web.struts.DelegatingActionProxy">
                            <forward name="input" path="/login.jsp"/>
                            <forward name="welcom" path="/welcom.jsp"/>
                        </action>

      2.2  使用srping的ActionSupport代替struts 的Action
            这种方式下,struts的Action不受spring Ioc容器管理,Action代码与spring API部分耦合(造成代码污染),但其增强了代码的可读性,Action代码中显示调用业务逻辑组件,无需等容器注入。
            例如:
            public class LoginAction extends ActionSupport {   //继承spring的ActionSupport         
                   public LoginAction()
                    {
                        //不可在构造方法中调用getWebApplicationContext()
                      } 
                    private LoginService loginService;     //将业务逻辑组件对象作为成员变量
                    public LoginService getLoginService()
                    {
                        return (LoginService)getWebApplicationContext().getBean("loginService");
                    }
                    //重写execute()方法
                }
            struts-config.xml中<action>元素正常配置



http://www.blogjava.net/DenisLing/archive/2005/11/21/20779.html
posted on 2008-05-12 22:13 林的 阅读(352) 评论(1)  编辑  收藏 所属分类: spring

FeedBack:
# re: spring 整合struts
2008-09-22 17:38 | 小小滴
哥哥,按这样的配置,还是出现“Servlet action is not available“这个问题,都快郁闷死了,  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

想回家了,呵呵!

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

搜索

  •  

最新评论

阅读排行榜

评论排行榜