• Struts2 配置详解


    1. web.xml
    此文件的配置可以参看struts2的示例文档

    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    </welcome-file-list>


    2. Action: 业务处理器,调用相应的Model类实现业务处理,返回结果。
    实际开发中,Action类通常继承自 struts2提供的 com.opensymphony.xwork2.ActionSupport 类,以便简化开发。
    开发完后需要配置 struts2.xml文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

    <struts>
    <package name="default" namespace="/" extends="struts-default">
    <action name="hello" class="com.opensymphony.xwork2.ActionSupport">
    <!-- 结果为 success 时, 跳转到 hello.jsp页面 (dispatcher 转发) -->
    <result name="success">hello.jsp</result>
    <!-- 结果为 tutorial 时, 重定向到 /tutorial/test.action (forward 重定向) -->
    <result name="tutorial" type="redirect">/tutorial/test.action</result>
    <!-- 结果为 tutorial2 时, 重定向到test.action -->
    <result name="tutorial2" type="redirectAction">/tutorial/test.action</result>
    </action>
    </package>
    </struts>

    3. Result
    实现视图的调用,并决定视图以那些形式展现给客户端。

    Struts的执行过程
    3.1 当Web容器接受到请求后,将强求交给 web.xml 中配置的 struts2 框架的控制器StrutsPrepareAndExecuteFilter (核心控制器)
    3.2 由 StrutsPrepareAndExecuteFilter 确定请求对应的 Action (业务控制器)
    3.3 框架根据 Action 返回的结果字符串,由 StrutsPrepareAndExecuteFilter (核心控制器)选择对应的result, 将结果呈现给用户。


    4. Struts 2 的配置器

    • 4.1 struts.xml


    1) constant元素用于配置常量例如:
    处理乱码: <constant name="struts.i18n.encoding" value="UTF-8" />
    设置用户界面主题: <constant name="struts.ui.theme" value="simple" />
    禁止调用动态方法: <constant name="struts.enable.DynamicMethodInvocation" value="false" />

    2) include元素
    引用其他struts.xml 文件 <include file="mailreader-default.xml"/>
    如果配置的Action内容很多,那么可以将这部分内容单独提取出来
    mailreader-default.xml 文件应该是一个完整的Struts.xml文件

    3)package元素
    name 属性为必须得并且是唯一的,用来指定包的名称
    extends 属性类似Java的extends,指定用来扩展的包
    namespace 属性可选。namespace="/"代表根目录, namespace=""默认命名空间
    通常会使用模块名称命名

    请求路径先查询命名空间下的,如果没有在查找默认空间下的。
    例如请求URL为 /myspace/somespace/some.action。 它先查找的命名空间是  /myspace/somespace/ 下

    • 4.2 struts-default.xml : Struts2框架的默认配置文件。
    • 4.3 struts-plugin.xml : 是struts2插件使用的配置文件。


    5. Action配置

    • 5.1 Action 作用:为给定的请求封装需要做的实际工作(调用特定的业务处理类)

    为数据转移提供场所
    帮助框架觉得由那个结果呈现请求响应
    Action接受参数:
    1) 属性名
    2) JavaBean
    3) ModelDriven
    i: 定义实体类,为实体添加属性以及setter和getter
    i: 创建Action实现ModelDriven接口,重写方法getModel()
    i: Action中要提供JavaBean类型的属性,需要实例化,但不需要相应的setter和getter方法
    i: Form 表单项的name属性以及页面取值时通过 <s:property value="属性名" />的形式

    • 5.2 method 属性:

    <action name="student" class="org.zm.test.studentAction" method="Show">
    <result name="success">no.jsp</result>
    </action>

    当调用student.action时, 执行 rg.zm.test.studentAction 类 的 Show()方法。

    method属性解决多个页面调用同一个action类的问题,减少action的数据。例如用户登录,用户注册都调用同一个action, userAction 。 分别调用这个类中的 Login方法和 Register 方法。

    提示: Struts2根据action元素的method属性查找执行方法时有两种途径。1.查找与method属性值完全一致的方法。 2.查找domethod()形式的方法。【login() / doLogin()】

    • 5.3 Action中动态方法调用 : 目的 减少Action的数量。

    动态方法调用(Dynamic Method Invocation, MDI) 是指表单元素的 Action 并不是直接等于某个Action的名称,而是通过在Action的名称中使用感叹号(!)来标识要调用的方法名称,格式为 actionName!methodName.action。

    <action name="student" class="org.zm.test.studentAction" >
    <result name="login">manager.jsp</result>
    <result name="register">success.jsp</result>
    ......
    </action>

    当请求 student!login.action 时, 框架将调用 studentAction的login()方法;
    当请求 student!register.action 时, 框架将调用 studentAction的register()方法;

    提示:考虑到安全问题,通常禁止调用动态方法。

    • 5.4 Action 中通配符的使用

    <action name="*User" class="org.zm.test.studentAction" method="{1}">
    <result name="login">/page/{1}.jsp</result>
    <result name="register">/page/{1}.jsp</result>
    ......
    </action>

    在action的name属性中使用星号, 允许这个 Action 匹配所有以 User 结束的URL。 如 loginUser.action。 配置该action元素时,还制定了method属性,该属性使用一个表达式{1},该表达式的值就是name属性值的第一个"*"的值。 {1} = login

    • 5.5 配置默认的 Action

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    <package name="default" extends="struts-default">
    <default-action-ref name="defaultAction"></default-action-ref>
    <action name = "defaultaction" >
    <result>error.jsp</result>
    </action>
    </package>
    </struts>

    6. Result的配置

    • 6.1 常用结果类型

    1. dispatcher 类型: Action 默认的结果类型, 采用转发的形式请求指定的视图资源,请求中的数据信息不会丢失。
    2. redirect 类型:采用重定向的方式请求指定的视图资源, 通过 HttpServletResponse 对象的 sendRedirect()方法重新生成一个请求,原请求中的数据信息会丢失。
    3. redirectAction 类型: 采用重定向的方式请求一个新的Action,,原请求中的数据信息会丢失。

    • 6.2 动态结果

    配置的时候不知道执行那个,在运行时才能知道哪个结果作为视图显示给用户。即在配置时使用表达式,在运行时,由框架根据表达式的值来确定要使用哪个结果。

      1. 1. SchoolAction

    import com.opensymphony.xwork2.ActionSupport;
    public class SchoolAction extends ActionSupport{

    private String nextDispose;
    private User objUser;

    //省略get set

    public String Login(){

    if(objUser.getName().equals("zm")){
    nextDispose = "teacher";
    }else {
    nextDispose = "student";
    }
    return SUCCESS;
    }
    }

    2. struts.xml文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    <!-- 创建一个default包,继承自Struts2的struts-default包 -->
    <package name="default" namespace="/" extends="struts-default">
    <action name="school" class="org.zm.test.SchoolAction" method="Login">
    <result type="redirectAction" name="success">${nextDispose}</result>
    <result name="error">Register.jsp</result>
    </action>
    <action name="teacher" class="org.zm.test.teacherAction" method="Show">
    <result name="success">ok.jsp</result>
    </action>
    <action name="student" class="org.zm.test.studentAction" method="Show">
    <result name="success">no.jsp</result>
    </action>
    </package>
    </struts>

    提示:配置动态结果的时候 ${nextDispose} 可能会出错,解决方案:
    Window -- Preferences -- MyEclipse -- Validation - Validator 行 Build列的复选框上的勾去掉。


    7. 全局结果
    全局结果在所有的Action都可以共享这个结果。 如果 result 中的名称和全局结果的 result名称相同,会执行局部的 action, 当找不到对象的名称时才会去寻找全局结果并执行。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    <!-- 创建一个default包,继承自Struts2的struts-default包 -->
    <packag<global-results>
    <result name="error">/page/error.jsp</result>
    <result name="login" type="redirect">/page/login.jsp</result>
    </global-results>
    </package>
    </struts>


    8. struts2 设置成开发模式
    在struts.xml中增加:
    <constant name="struts.devMode" value="true" />

  • 相关阅读:
    SqlServer禁用启用触发器、外键约束
    解决Windows Server2008R2中导入Excel不能使用Jet 4.0
    C#读写配置文件
    C#后台如何获取客户端访问系统型号
    Flex在Win10,Chrome浏览器上汉字乱码的问题
    flex lineChart 显示所有的数据节点
    HTTP状态码大全
    zabbix使用sendEmail发送邮件报警
    zabbix安装
    Samba服务器搭建配置
  • 原文地址:https://www.cnblogs.com/Theladyflower/p/4624205.html
Copyright © 2020-2023  润新知