Struts2学习 — Action开发、Namespace路径

2018-02-01  本文已影响32人  Mon7ey

struts2中Action开发的几种方式 :

  1. 继承 ActionSupport

     public class LoginAction extends ActionSupport{}
    
     如果需要使用struts的数据校验功能,就必须继承ActionSupport
    
  2. 实现Action 接口

     public static final String SUCCESS = "success";
     public static final String NONE = "none";
     public static final String ERROR = "error";
     public static final String INPUT = "input";
     public static final String LOGIN = "login";
    
    
     public String execute() throws Exception;
    
  3. 不继承、不实现任何类和接口

     public class LoginAction{}
    

通配符

 <action name="hello_*" class="com.se7en.struts.action.HelloAction" method="{1}">
        <result name="success">/success.jsp</result>
    </action>

    method参数的值 "{ 1 }",代表name参数的值中第一个 " * " 的值

struts2 路径匹配原则

<package name="anyway" namespace="/user" extends="struts-default">
    <action name="hello_*" class="com.se7en.struts.action.HelloAction" method="{1}">
        <result name="success">/success.jsp</result>
    </action>
</package> 

访问路径1 : http://localhost:8080/struts02/user/user_login ok
访问路径2 : http://localhost:8080/struts02/user/a/b/asddf/user_login ok
访问路径3 : http://localhost:8080/struts02/a/ab/a/s/d/user/user_login no

Tomcat

如果找到就返回这个名称空间,然后通过Action的name值,找到对应的class属性的值.创建Action对象.执行方法

struts 常量

Struts中常量以 " .properties "文件的形式存储.

存储的位置在 Struts - core - 2.3.4-1.jar / org.apache.struts / default.properties文件中

我们可以通过在struts.xml中使用<constant>标签来修改Struts的常量值.

下面是一些常用的Struts2常量 :

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

自定义后缀修改常量 :

    - Struts1中默认访问后缀是 : * . do
    - Struts2中默认访问后缀是 : * . action

修改默认访问后缀 :

  1. Struts2 的 . action访问后缀在哪里定义?
    - 在 Struts - core - 2.3.4-1.jar / org.apache.struts / default.properties文件中,值为 : struts.action.extension = action,,

  2. 修改访问后缀
    通过常量修改访问后缀

         在struts.xml文件中,使用<constant>(常量标签)修改
         <constant name="struts.action.extension" value = "action,,">
         // 如果去掉value 值中的 " , , " 符号,请求路径就必须加后缀. 
    
         value = "action , do ,"            访问后缀 : action / do / 不带后缀
         value = "action , do "             访问后缀 : action 或 do 二者必须带一个
         value = "action"                   访问后缀 : 只能 action
    
2. <constant name="struts.i18n.encoding" value="UTF-8"/>

指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的输出

3. <constant name="struts.serve.static.browserCache" value="false"/>

设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭

4. <constant name="struts.configuration.xml.reload" value="true"/>

当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开

5. <constant name="struts.devMode" value="true" />

开发模式下使用,这样可以打印出更详细的错误信息

6. <constant name="struts.ui.theme" value="simple" />

默认的视图主题

7. <constant name="struts.objectFactory" value="spring" />

与spring集成时,指定由spring负责action对象的创建

8. <constant name="struts.enable.DynamicMethodInvocation" value="false"/>

该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为 false

9. <constant name="struts.multipart.maxSize" value=“10701096"/>

上传文件的大小限制

Struts2 全局结果

当多个Action中都使用到了相同的result时, 为了避免重复定义result, 这是我们应该把result定义为全局结果.

实现 :

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

    <!-- 定义全局result -->
    <global-results>
        <results name="delete">/pattern/success.jsp</results>
    </global-results>
    
    <action name="test" class="com.se7en.struts2.TestAction">
    </action>
    
</package>

注意 : 如果全局和局部有同名的result,那么局部会覆盖全局的result

全局配置

在同一个模块中,可能会遇到很多跳转的同一个页面的逻辑.如果我们每次都对跳转声明一次的话,会显得很啰嗦.

那么我们就会考虑一次声明到处使用的想法 ------ 配置全局跳转视图

原始跳转声明情况 :

<package name="anyway" namespace="/user" extends="struts-default">
    <action name="hello_login" class="com.se7en.struts.action.HelloAction" method="login">
        <result name="success">/success.jsp</result>
    </action>
    
    <action name="hello_regist" class="com.se7en.struts.action.HelloAction" method="regist">
        <result name="success">/success.jsp</result>
    </action>
    
</package>

使用全局跳转视图后:

<package name="anyway" namespace="/user" extends="struts-default">

    <!-- 全局跳转视图 -->
    <global-results>
        <result name="success">/success.jsp</result>
    </global-results>
    
    <action name="hello_login" class="com.se7en.struts.action.HelloAction" method="login">
        <result name="success">/success.jsp</result>
    </action>
    
    <action name="hello_regist" class="com.se7en.struts.action.HelloAction" method="regist">
        <result name="success">/success.jsp</result>
    </action>
    
</package>

当Action返回对应页面的结果标记时,会先在Action中寻找是否有对应的跳转结果. 如果找到直接跳转.

如果Action中没有配置result,则会在全局配置中查找是否有与返回标记相对应的result. 如果还没就,就会报404

全局配置一定要放在Action前面

上一篇下一篇

猜你喜欢

热点阅读