struts2---src/struts.xml配置详解

配置src/struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!--DOCTYPE struts表示根节点为struts

-//Apache Software Foundation//DTD Struts Configuration 2.0//EN一个uri

http://struts.apache.org/dtds/struts-2.0.dtd编程的时候访问,有自动补全的作用-->

<!DOCTYPE struts PUBLIC

          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

          "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<!-- 包的名称自定义,可以配置多个包,但是名字必须唯一,起继承作用,例如最原始的package的name值为struts-default,之后的包都要直接或者间接的继承它;

namespace命名空间:定义访问package的名字空间,也表示真实存在于WebRoot目录下的路径,该名字空间影响到url的地址.

扫描二维码关注公众号,回复: 3105381 查看本文章

例如:在result标签中,如果配置的是相对路径,就是相对namespace的路径,

其次,在访问http://localhost:8080/struts2demo/path1/path2/test.action

过程中,会先去找到namespace为/path1/path2的package

如果该package中不包含name为test的action,就到namespace为/path1的package

去寻找name为test的action,如果还没有找到,最后到根目录以及默认的namespace中寻找

如果没有,就返回404错误

可以理解为从里到外寻找

extends  值是struts-default或者继承了struts-default的packageName

 -->

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

<!--

name是url请求名,不需要加后缀(.action)

name属性+namespace唯一标志一个action,

class是处理url请求对应的java类,class要求包名+类名

并且该类是由公共的无参构造方法的。

缺省为ActionSupport类

method配置处理请求类的处理的方法,默认为execute:

方法要满足是公共的,返回值类型是String,无参

method和name无关-->

     <action name="hello" class="cn.itcast.action.HelloAction" method="execute">

<!--

result-指结果集

name:匹配请求处理方法的返回值;默认是success

type:结果处理类型;默认是dispather转发

-->    

<!--

其他type类型:

***chain:指action链,链接下一个action;执行actionA以后直接执行ActionB后直接执行ActionC,用得较少

        地址栏是执行的第一action

  ***dispatcher:转发;和servlet一致。如果request中有数据要到视图显示,那么使用dispatcher

  ***redirect:重定向;如果是重定向到jsp页面,可以直接重定向,如果是重定向到另一个action,需注意

      是否配置了action的后缀名。如果要求有后缀名,那么重定向的action一定要加上后缀名

       redirect的路径一定不能在WEB-INF路径下,因为redirect是相当于用户直接访问了路径,而用户不能访问WEB-INF目录下的文件,        只有程序内部转发的时候才能转发到WEB-INF下的JSP。

  ***redirectAction:重定向导另一个action;不用加action的后缀名,会将前一个action的后缀名自动加上

  ***stream:以流的形式显示---文件下载

>

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

     </action>

    </package> 

</struts>

 

 <!-- 使用通配符优化步骤 -->
         <!-- http://localhost:8080/struts02/user_login -->
         <action name="user_*" class="cn.itcast.a_config.UserAction" method="{1}">
            <result name="{1}">/{1}.jsp</result>            
        </action>

* 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.

 

 

 

<!-- 什么情况不配置class? 即处理的aciton -->
        <!-- 答案: 当只是需要跳转到WEB-INF下资源的时候。 -->
         <action name="test2">
             <result name="success" type="redirect">/WEB-INF/index.jsp</result>
         </action>

 

 

总配置文件可以引入其他配置文件
<include file="文件路径"></include>

 

 

<!-- 一、全局配置 -->
    <!-- 0. 请求数据编码 -->
     <constant name="struts.i18n.encoding" value="UTF-8"/>

 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的输出
    <!-- 1. 修改Struts默认的访问后缀 ,这里表示修改后默认*.action以及*.do以及什么都不加,do后面的'',''是有意义的-->
    <constant name="struts.action.extension" value="action,do,"></constant>

默认情况下,如用户请求路径不带后缀或者后缀以.action结尾,请求将被转入Struts 2框架处理,否则Struts 2框架将略过该请求。

这个属性在:struts2-core-2.1.8.1.jar\org\apache\struts2\ default.properties
    <!-- 2. 修改xml自动重新加载 -->
    <constant name="struts.configuration.xml.reload" value="true"/>

struts.xml修改后是否自动重新加载这个配置文件(开发环境下最好开启)
    <!-- 3. 开启动态方法调用 (默认不开启)-->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>

   actionName!action中的方法

http://localhost:8080/struts02/user!login
    <!-- 4. 修改上传文件的最大大小为30M -->
    <constant name="struts.multipart.maxSize" value="31457280"/>
    单位是字节

 

猜你喜欢

转载自blog.csdn.net/weixin_40775755/article/details/82501468
今日推荐