美文网首页
Struts2学习 — Action开发、Namespace路径

Struts2学习 — Action开发、Namespace路径

作者: Mon7ey | 来源:发表于2018-02-01 14:32 被阅读32次

    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

    • localhost 通过地址找到需要访问的机器
    • 8080 通过端口号找到识别服务类型
    • struts02 找到项目名称
    • /user/a/b 通过对url截取获取namespace,判断这个命名空间是否存在.如果不存在继续向下截取
      • /user/a 判断这个命名空间是否存在.如果不存在继续向下截取
      • /user 判断这个命名空间是否存在. 如果不存在继续向下截取
      • / 默认名称空间, 还没找到,报错

    如果找到就返回这个名称空间,然后通过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前面

    相关文章

      网友评论

          本文标题:Struts2学习 — Action开发、Namespace路径

          本文链接:https://www.haomeiwen.com/subject/wzsczxtx.html