• Struts+Spring整合方式


    struts与spring整合方式有三种:

    方式一:通过Spring的ActionSupport类实现。

    方式二:通过Sping的DelegatingRequestProcessor类覆盖struts的requestprocessor实现。

    方式三:通过Sping的DelegatingActionProxy类实现,将struts action管理委托给spring框架。

    相同点:以上三种方式都需要在struts的配置文件struts-config.xml中注册spring的ContextLoaderPlugIn插件。即:

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

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

    </plug-in>

    不同点:

    方式一:使用Spring提供的ActionSupport类,只需要使用Action继承Spring的ActionSupport类,即可实现Spring与struts的整合,使用起来简单方便,但是struts的Action与Spring耦合在一起,并且Struts的Action不在spring的控制之中,这样如果更换别的IOC容器,或想使用Spring的AOP都是比较困难的,而且如果是多个动作放在一个Action中,则这种方式就无能为了了!

    方式二:使用Spring的DelegatingRequestProcessor类,需要在Struts的配置文件中,使用DelegatingRequestProcessor代替Struts的RequestProcessor类,并在Spring的配置文件中动作映射对应的Bean,可以很方便的转换而不用修改代码,这种方式的缺点是依赖于Struts的RequestProcessor类。

    方式三:使用Spring的DelegatingActionProxy类,需要在Struts的配置文件中,定义动作映射的type属性为DelegatingActionProxy而不是类的实际名称,并在Spring的配置文件中定义和Struts配置文件动作映射对应的Bean,这种方式和Struts耦合性最小。

    注:三者中,使用Spring的DelegatingActionProxy类来整合Spring和Struts的方式最为强大和灵活。

    方式三的实例

    login.jsp

    代码
    <%@ page language="java" pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

    <html>
    <head>
    <title>JSP for LoginForm form</title>
    </head>
    <body>
    <html:form action="/login">

    username :
    <html:text property="username"/><html:errors property="username"/><br/>
    password :
    <html:password property="password"/><html:errors property="password"/><br/>
    <html:submit/><html:cancel/>
    </html:form>
    </body>
    </html>

    /StrutsLoginDemo/WebRoot/WEB-INF/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>
    <data-sources />
    <form-beans >
    <form-bean name="loginForm" type="com.qdu.sun.struts.form.LoginForm" />

    </form-beans>

    <global-exceptions />
    <global-forwards />
    <action-mappings >
    <action
    attribute="loginForm"
    input
    ="/login.jsp"
    name
    ="loginForm"
    path
    ="/login"
    scope
    ="request"
    type
    ="org.springframework.web.struts.DelegatingActionProxy">
    <forward name="failed" path="/fail.jsp" />
    <forward name="success" path="/success.jsp" />
    </action>

    </action-mappings>

    <message-resources parameter="com.qdu.sun.struts.ApplicationResources" />
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
    </plug-in>

    </struts-config>

    /StrutsLoginDemo/WebRoot/WEB-INF/applicationContext.xml

    代码
    <?xml version="1.0" encoding="UTF-8"?>
    <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="login" class="com.qdu.sun.struts.BO.LoginBO"/>
    <bean name="/login"
    class
    ="com.qdu.sun.struts.action.LoginAction">
    <property name="loginBean">
    <ref bean="login"/>
    </property>
    </bean>


    </beans>

    /StrutsLoginDemo/src/com/qdu/sun/struts/action/LoginAction.java

    代码
    /*
    * Generated by MyEclipse Struts
    * Template path: templates/java/JavaClass.vtl
    */
    package com.qdu.sun.struts.action;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;

    import com.qdu.sun.struts.BO.LoginBO;
    import com.qdu.sun.struts.form.LoginForm;

    /**
    * MyEclipse Struts
    * Creation date: 08-05-2008
    *
    * XDoclet definition:
    * @struts.action path="/login" name="loginForm" input="/login.jsp" scope="request" validate="true"
    * @struts.action-forward name="failed" path="/fail.jsp"
    * @struts.action-forward name="success" path="/success.jsp"
    */
    public class LoginAction extends Action {
    /*
    * Generated Methods
    */

    /**
    * Method execute
    *
    @param mapping
    *
    @param form
    *
    @param request
    *
    @param response
    *
    @return ActionForward
    */
    private LoginBO loginBean;
    public LoginBO getLoginBean() {
    return loginBean;
    }
    public void setLoginBean(LoginBO loginBean) {
    this.loginBean=loginBean;
    }

    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    LoginForm loginForm
    = (LoginForm) form;// TODO Auto-generated method stub
    LoginBO login=getLoginBean();
    if(login.validate(loginForm.getUsername(), loginForm.getPassword()))
    {
    request.setAttribute(
    "username", loginForm.getUsername());
    return mapping.findForward("success");
    }
    else
    return mapping.findForward("failed");
    }

    }
  • 相关阅读:
    由基于qml,c++的串口调试工具浅谈qml与c++混合编程
    qt5_qml_Opengl_shader 第一弹----------------------openglunderqml的简化及介绍
    Delphi 的接口机制——接口操作的编译器实现过程(2)
    Delphi 的接口机制——接口操作的编译器实现过程(1)
    ddd
    [leetcode]Gray Code
    synapse socket总结一:服务器模型
    CentOS 6.5(64bit)安装GCC4.8.2+Qt5.2.1(替换GCC的链接库)
    Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)
    Qt+SQLite数据加密的一种思路(内存数据库)
  • 原文地址:https://www.cnblogs.com/linzheng/p/1925838.html
Copyright © 2020-2023  润新知