zoukankan      html  css  js  c++  java
  • Struts2笔记——struts.xml配置详解

    访问HelloWorld应用的路径的设置

    * 在struts1中,通过<action path=“/primer/helloWorldAction.action”>节点的path属性指定访问该action的URL路径。


    * 在struts2中,访问struts2中action的URL路径由两部份组成:包的命名空间+action的名称,例如: 
        访问HelloWorldAction的URL路径为: /primer/helloWorldAction.action  (注意:完整路径为:http://localhost:端口/内容路径/primer/helloWorldAction.action)。


    * 另外我们也可以加上.action后缀访问此Action。

    struts.xml配置如下: 
     

     

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

        <action name="helloWorldAction" class="com.pwc.primer.HelloWorldAction">

            <result name="success"type="dispatcher">/success.jsp</result>

        </action>

    </package>

    ============================= 

    Action名称的搜索顺序
     
    1.获得请求路径的URI,例如url是:

        http://server/struts2/path1/path2/path3/test.action

    2.首先寻找namespace为/path1/path2/path3的package,

        如果存在这个package,则在这个package中寻找名字为test的action,

        如果不存在这个package则转步骤3;

    3.寻找namespace为/path1/path2的package,

        如果存在这个package,则在这个package中寻找名字为test的action,

        如果不存在这个package,则转步骤4;

    4.寻找namespace为/path1的package,

        如果存在这个package,则在这个package中寻找名字为test的action,

        如果仍然不存在这个package,就去默认的namaspace的package下面去找名

        字为test的action(默认的命名空间为空字符串“/” ),

        如果还是找不到,页面提示找不到action。

    =============================

    Action配置中的各项默认值  

    * 问题:如果没有为action指定class,默认是com.opensymphony.xwork2.ActionSupport

    执行ActionSupport中的execute方法

     

    由struts-default.xml文件<default-class-refclass="com.opensymphony.xwork2.ActionSupport" />决定
     

    <packagename="primer" namespace="/" extends="struts-default">

        <action name="helloWorldAction" class="cn.itcast.primer.HelloWorldAction">

            <result name="success"type="dispatcher">/success.jsp</result>

        </action>

        <action name="actionNoClass">

            <result>/success.jsp</result>

        </action>

     

    </package>
     

    1>如果没有为action指定class,默认是ActionSupport。

    2>如果没有为action指定method,默认执行action中的execute() 方法。

        ActionSupport的execute方法里面就一句话return"success";

    3>如果没有指定result的name属性,默认值为success。  

    ---------------------------------------------

    * 问题:如果请求的路径查找不到action的情况下,程序运行会抛出异常 ,可以通过配置当找不到action的情况下,会执行默认的action


    <packagename="primer" namespace="/" extends="struts-default">

        <!--指定默认的action引用,如果该包下没有对应action配置,则启用该配置-->

        <default-action-ref name="helloWorldAction"></default-action-ref>

     

        <action name="helloWorldAction" class="cn.itcast.primer.HelloWorldAction">

            <result name="success"type="dispatcher">/success.jsp</result>

        </action>

        <action name="actionNoClass">

            <result>/success.jsp</result>

        </action>

     </package>


    =============================

    ActionSupport

    com.opensymphony.xwork2.ActionSupport类是默认的 Action 类。在编写 Action 类时, 通常会对这个类进行扩展
    图片 

     
    =============================


    Struts 2处理的请求后缀

    * StrutsPrepareAndExecuteFilter是Struts2框架的核心控制器,它负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入Struts 2框架处理,否则Struts 2框架将略过该请求的处理。
     

     

    * 根据配置文件:struts2-core-x.x.x.jar包下的org.apache.struts2/default.properties文件定义的常量决定
        struts.action.extension=action,,

     


    * 默认处理的后缀是可以通过常量”struts.action.extension“进行修改的,如下面配置Struts 2只处理以.do为后缀的请求路径:

    <struts>

        <constantname="struts.action.extension" value="do"/>

    </struts>

     


    * 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。如:

        <constantname="struts.action.extension" value="do,go"/>

     =============================

    细说常量定义
      

    * 常量可以在struts.xml或struts.properties中配置,建议在struts.xml中配置,两种配置方式如下: 


        > 在struts.xml文件中配置常量

        <struts>
            <constantname="struts.action.extension" value="do"/>

        </struts>
     

     

        > 在struts.properties中配置常量, (struts.properties文件放置在src下)

        struts.action.extension=do
     

     

    * 因为常量可以在多个配置文件中进行定义,所以我们需要了解下struts2加载常量的搜索顺序:

    1 struts-default.xml

    2  struts-plugin.xml

    3  struts.xml

    4 struts.properties

    5 web.xml
     

    * 如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值.

    =============================

    常用的常量介绍 

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

        <constant name="struts.i18n.encoding"value="UTF-8"/>


    * 该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开

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


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

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


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

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


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

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


    * 默认的视图主题

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


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

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


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

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


    * 上传文件的大小限制

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

    =============================

    指定多个struts配置文件 

    在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通过<include>元素指定多个配置文件:
     

     

    <struts>

      <include file="struts-user.xml"/>

      <includefile="struts-order.xml"/>

    </struts>
     

     

    通过这种方式,我们就可以将Struts 2的Action按模块添加在多个配置文件中。  


  • 相关阅读:
    SAP MM 采购附加费计入物料成本之二
    SAP MM 采购附加费计入物料成本?
    SAP MM 作为采购附加费的运费为啥没能在收货的时候计入物料成本?
    SAP MM 外部采购流程里的Advanced Return Management
    SAP MM 外部采购流程里的如同鸡肋一样的Advanced Returns Management功能
    SAP MM Why is the freight not included in the material cost at the time of GR?
    SAP MM: Change of material moving average price after goods receipt and invoice verification posting for PO
    SAP 创建启用了ARM功能的采购订单,报错 Shipping processing is not selected to supplier 100057 in purchase org. 0002
    GIT·代码仓库默认分支更改
    .Net/C#·运行报错缺少XXX文件,但双击无法跳转缺少位置
  • 原文地址:https://www.cnblogs.com/pwc1996/p/4839162.html
Copyright © 2011-2022 走看看