Struts2零碎点整理

1. 关于 Struts2 请求的扩展名问题


1). org.apache.struts2 包下的 default.properties 中配置了 Struts2 应用的一些常量
2). struts.action.extension 定义了当前 Struts2 应用可以接受的请求的扩展名.
3). 可以在 struts.xml 文件中以常量配置的方式修改 default.properties 所配置的常量.

      <constant name="struts.action.extension" value="action,do,"></constant>

2. ActionSupport类

1). ActionSupport 是默认的 Action 类: 若某个 action 节点没有配置 class 属性, 则 ActionSupport 即为
待执行的 Action 类. 而 execute 方法即为要默认执行的 action 方法
<action name="testActionSupport">
    <result>/testActionSupport.jsp</result>
</action>
等同于
<action name="testActionSupport"
    class="com.opensymphony.xwork2.ActionSupport"
    method="execute">
    <result>/testActionSupport.jsp</result>
</action>
2). 在手工完成字段验证, 显示错误消息, 国际化等情况下, 推荐继承 ActionSupport.
3. result节点的相关配置介绍
1). result 是 action 节点的子节点
2). result 代表 action 方法执行后, 可能去的一个目的地
3). 一个 action 节点可以配置多个 result 子节点.
4). result 的 name 属性值对应着 action 方法可能有的一个返回值.

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

5). result 一共有 2 个属性, 还有一个是 type: 表示结果的响应类型

6). result 的 type 属性值在 struts-default 包的 result-types 节点的 name 属性中定义.
         常用的有
    > dispatcher(默认的): 转发. 同 Servlet 中的转发.
    > redirect: 重定向
    > redirectAction: 重定向到一个 Action
        注意: 通过 redirect 的响应类型也可以便捷的实现 redirectAction 的功能!    
        <result name="index" type="redirectAction">
                <param name="actionName">testAction</param>
                <param name="namespace">/user</param>
          </result>
        或者
       <result name="index" type="redirect">/user/testAction.do</result>  
    > chain: 转发到一个 Action
        注意: 不能通过 type=dispatcher 的方式转发到一个 Action,
        
        只能是:  
        <result name="test" type="chain">
                <param name="actionName">testAction</param>
                <param name="namespace">/user</param>
          </result>
    
        不能是:
        <result name="test">/atguigu/testAction.do</result>

3 动态方法调用:

动态方法调用: 通过url动态调用 Action 中的方法
示例:
<package name="default" namespace="/" extends="struts-default">
       <!-- 配置一个action 一个struts2的请求就是一个action
            name属性:对应一个struts2请求的名字,不包含扩展名
            result元素用来配置结果
        -->
       <action name="product" class="com.elgin.entity.Product">
          <result name="details">/details.jsp</result>
       </action>
    </package>
•URI: 
–/Product.action: Struts调用 Product 类的 execute
–/Product!save.action: Struts调用 Product 类的 save() 方法
默认情况下, Struts 的动态方法调用处于禁用状态。即:<constant name="struts.enable.DynamicMethodInvocation" value="false" />
如果想要打开使用,将上述的value配置为true即可,但是不推荐!

4 声明式异常处理

exception-mapping元素: 配置当前 action 声明式异常处理
exception-mapping元素中有 2 个属性
exception: 指定需要捕获的的异常类型。异常的全类名
result: 指定一个响应结果, 该结果将在捕获到指定异常时被执行, 既可以来自当前 action 的声明, 也可以来自 global-results声明.
可以通过global-exception-mappings元素为应用程序提供一个全局性的异常捕获映射. 但在 global-exception-mappings 元素下声明的任何 exception-mapping 元素只能引用在 global-results元素下声明的某个 result 元素
声明式异常处理机制由  ExceptionMappingInterceptor拦截器负责处理, 当某个 exception-mapping 元素声明的异常被捕获到时, ExceptionMappingInterceptor拦截器就会向 ValueStack中添加两个对象:
exception: 表示被捕获异常的 Exception 对象
exceptionStack: 包含着被捕获异常的栈

可以在视图上通过 <s:property> 标签显示异常消息




原文地址:https://www.cnblogs.com/elgin-seth/p/5293745.html