struts2详解之配置详解(二)

struts.xml配置详解

      


package:跟项目中的package没关系,这里的关系是用来管理action

name:给这个package起个名字,没有什么特殊的意义,一般情况下它的命名是按照package管理action的分类来命名,还有就是package和package的名字不能重复

namespace:访问路径地址前缀,与name没有关系,跟其他的package中的namespace能不能重复,没有要求

extends:继承的意思,继承自struts-default,必须写,不然会出错了,名字也不能更改。它是从struts-2.2-core下面的struts-default.xml,这里配置了很多默认的属性

abstract:抽象的意思,生命的一个标志,当前这个文件不能独立运行,只能等待被继承。  

<action name="helloAction" class="cn.hd.hello.HelloAction" method="hello">
action配置详解

name:给action起个名字,决定了访问路径最后的地址

class:类的完整路径(默认为ActionSupport类)

method:访问类中的方法(默认为execute)

<result name="success">/hello.html</result>

result:配置详解

name:对应的是action类中的method的返回值,名字和结果只要与action类中的返回结果一样就可以

type:结果的类型(默认的是转发,也可以设置为其他的值)

dispatcher:转发;redirect:跳转的页面

<include file="cn/hd/dynamic/struts01.xml"></include>

include:在src  struts.xml可以去读其他位置的xml配置文件。要求 新创建的xml必须有约束

常量配置

        默认的常量配置,文件名为default.properties

        

如何修改常量

(1)在struts.xml中修改

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

<!--i18n 国际化,相当于在servlet中设置的编码,解决了post请求的中文乱码-->

(2)在src目录创建struts.properties文件,直接在该文件中修改常量即可

(3)在web.xml文件中修改,添加一个context-param,在param-name中书写常量名,在param-value中书写常量值。

  
<context-param>
    <param-name>struts.i18n.encoding</param-name>
    <param-value>UTF-8</param-value>
</context-param>

从上面我们可以看到有三种方法来修改常量,要是同时修改一个常量,哪个有效呢?

web.xml>struts.properties>struts.xml

至于想用哪种方法修改,全凭自己意愿,个人建议使用struts.xml

常用的常量配置

(1)i18n.encoding  设置编码,解决了post请求的乱码问题

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

(2)struts.action.extension  设置action的访问扩展名

 extension使用设置action访问的扩展名,action,,   可以改成do

为什么改成do以为struts1用的是do,如果改成do那么在访问路径中的action中必须加上do,否则会报404错误

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

(3)struts.devMode  设置开发者模式认为关闭

develpoerMode开发者模式

1.热部署,修改配置文件后,等一会时间,会自动加载

2.提高错误信息的提示(友好的错误提示)

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

高级配置

(1)动态方法

为什么需要动态方法?

简化代码节省时间,提高开发效率,推荐使用

<action name="userAction_*" class="cn.hd.dynamic.UserAction" method="{1}">
    <result name="success">/hello.html</result>
</action>

action配置中的name属性,决定着浏览器的访问地址,Struts2可以采用通配符的方式去读取method{1}会自动将路径中的userAction...配置到method中

(2)开启动态方法

首先要开启动态方法的常量

动态方法调用常量,默认是关闭的

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

将action中的method属性删除没这样就完成了动态方法的开启

(3)测试时候,在浏览器的路径中,输入action值+!+方法名(Action中的方法名)

注意事项:第一种方法在struts2的高版本中会无效,首先你也要开启动态方法,解决方法:增加allowed-methods属性

<action name="userAction_*" class="cn.hd.dynamic.UserAction" method="{1}" >
    <result name="success">/hello.html</result>
    <allowed-methods>update,delete,add,select</allowed-methods>
</action>

(4)默认配置

method  属性可以不写,默认方法为execute

result  标签中的name属性可以不写,默认属性可以不写为success

type  可以不写默认为dispather

class可以省略不写,默认为ActionSupport,打开这个文件,它里面有execute方法,该方法返回一个success字符串

<action name="defaultAction" class="cn.hd.default_demo.DefaultAction" method="execute">
    <result name="success">/hello.html</result>

</action>

默认的action地址,如果请求地址不存在,那么默认访问default-action-ref里面的action

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

以下是以上文件截图