zoukankan      html  css  js  c++  java
  • Java EE (14) -- SSH配置

    整合SpringStruts1的三种方法总结

    无论用那种方法来整合,第一步都是要装载spring的应用环境,有三种方式:

    #1. struts-config.xml

     

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
      "http://struts.apache.org/dtds/struts-config_1_2.dtd">

     

    <struts-config>

        

        <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

            <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>

        </plug-in>

     

    </struts-config>

     

    spring 的配置文件被作为参数配置进来。这样可以省略对web.xml 文件中的配置。确保你的applicationContext.xml WEB-INF目录下面

    #2. web.xml

     

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"

             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

             version="3.0">

        <context-param>

            <param-name>contextConfigLocation</param-name>

            <param-value>/WEB-INF/applicationContext.xml</param-value>

        </context-param>

        <listener>

            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

        </listener>

    </web-app>

     

    #3. web.xml(低版本tomcat)

    web.xml

     

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"

             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

             version="3.0">

        <servlet>

            <servlet-name>SpringContextServlet</servlet-name>

            <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>

        </servlet>

    </web-app>

     

     

    1.使用Spring ActionSupport

    StrutsAction继承SpringActionSupport类,这样Struts 1.x就融入Spring框架中了。

    Spring ActionSupport 继承至 org.apache.struts.action.Action ActionSupport的子类可以获得 WebApplicationContext类型的全局变量。通过getWebApplicationContext()可以获得这个变量。

     

    public class LoginAction extends org.springframework.web.struts.ActionSupport {

     

        public ActionForward execute(ActionMapping mapping, ActionForm form,

                HttpServletRequest request, HttpServletResponse response) {

            LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub

            //获得 WebApplicationContext 对象

            WebApplicationContext ctx = this.getWebApplicationContext();

            LoginDao dao = (LoginDao) ctx.getBean("loginDao");

     

            if (dao.checkLogin(u)) {

                return mapping.findForward("success");

            } 

            else {

                return mapping.findForward("error");

            }

        }

    }

     

    applicationContext.xml

    <beans>

        <bean id=”loginDao” class=”com.cao.dao.LoginDao”/>

    </beans>

    这中配置方式同直接在web.xml文件配置差别不大。注意:Action继承自 org.springframework.web.struts.ActionSupport 使得strutsspring耦合在一起。
    但实现了表示层和业务逻辑层的解耦(LoginDao dao = (LoginDao) ctx.getBean(“loginDao”))


    2.使用Spring DelegatingRequestProcessor 类。

    DelegatingRequestProcessor  继承自 org.apache.struts.action.RequestProcessor 并覆盖了里面的方法。

    sturts-config.xml 

    <struts-config>

        <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>

    </struts-config>

    applicationContext.xml

     

    <beans xmlns="http://www.springframework.org/schema/beans"

           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

           xsi:schemaLocation="http://www.springframework.org/schema/beans 

        http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

     

        <bean id="loginDao" class="com.cao.dao.LoginDao"/>

        

        <bean name="/login" class="com.cao.struts.action.LoginAction">

            <property name="dao"><ref local="loginDao"/></property>

        </bean>

     

    </beans>

     

    这里name=”/login”struts中的path匹配class=”com.cao.struts.action.LoginAction” struts中的type匹配还要为LoginAction提供必要的setXXX方法。获得ApplicationCotext和依赖注入的工作都在 DelegatingRequestProcessor中完成。


    3.全权委托。

    Action 的创建和对象的依赖注入全部由IOC容器来完成。使用SpringDelegatingAcionProxy来帮助实现代理的工作.
    org.springframework.web.struts.DelegatingActiongProxy继承于org.apache.struts.action.Action.全权委托的配置方式同 方式 2 类似 (applcationContext.xml文件的配置和 Action类的实现方式相同)

    1) <action> type指向的是spring 的代理类

    sturts-config.xml

     

    <struts-config>

     

        <form-beans >

            <form-bean name="loginForm" type="com.cao.struts.form.LoginForm" />

        </form-beans>

     

        <action-mappings >

            <!– type指向的是spring 的代理类>

            <action

                attribute="loginForm"

                input="login.jsp"

                name="loginForm"

                path="/login"

                scope="request"

                type="org.springframework.web.struts.DelegatingActionProxy" >

                <forward name="success" path="/ok.jsp" />

                <forward name="error" path="/error.jsp" />

            </action>

        </action-mappings>

     

        <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

            <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>

        </plug-in>

    </struts-config>

     

    2) 去掉struts-config.xml <controller >

     

    三种整和方式中我们优先选用 全权委托的方式。
    理由:
    1,第一种使得过多的耦合了SpringAction .
    2,RequestProcessor类已经被代理 如果要再实现自己的实现方式(如:编码处理)怕有点麻烦。

    总结一下:
    整合工作中的步骤:
    1.修改struts-config.xml
    2. 配置applicationContext.xml
    3.Action添加get/set方法 来获得依赖注入的功能。

    Struts2Spring的整合

    •Struts2框架为配合与Spring3框架进行整合,提供了相应的拦截器。

    该组件名为StrutsSpringObjectFactory,位于struts2-spring-plugin-2.2.1.1.jar

    通过在struts.xml中的声明,便可直接使用该组件以实现整合。

     

    struts.xml

     

    <struts>

    7      <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>

    8      <package name="strutsspring" namespace="/strutsspring" extends="struts-default">

    9          <action name="login" class="LoginAction">

    10             <result name="success">/success.jsp</result>

    11             <result name="input">/index.jsp</result>

    12         </action>

    13     </package>

    14 </struts>

     

    ApplicationContext.xml

     

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

    3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    4         xmlns:context="http://www.springframework.org/schema/context"

    5         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

    6         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    7  

    8      <bean id="LoginService" class="model.LoginService">

    9      </bean>

    10 

    11     <bean id="LoginAction" class="controller.LoginAction" scope="prototype">

    12         <property name="loginService" ref="LoginService"/>

    13     </bean>

    14 </beans>

     

    Spring的事务模型

     

     

    CMT事务属性

     

    企业Bean 的默认事务边界管理设置是CMT。

    1 @Stateless 

    2 @TransactionManagement(CONTAINER)

    3 public PayrollBean implements Payroll {

    4     //..

    5 }

    @TransactionAttribute(TransactionAttributeType.MANDATORY) 

    public void setBenefitsDeduction(int empId, double deduction) {...}

     

  • 相关阅读:
    2021/4/6
    2021/4/5
    2021/4/2
    2021/4/1
    2021/3/31
    2021/3/30
    2021/3/29重构
    总结
    js 座机正则
    uni-app 条件编译
  • 原文地址:https://www.cnblogs.com/thlzhf/p/5350454.html
Copyright © 2011-2022 走看看