配置文件详解
这里写了struts2的配置以及后台跳转页面 ajax请求在写一篇博客里
先在这里写一个完整的配置下面的是一小块一小块的,我也不知道为啥我这里直接放代码会出现乱码所以就放图片吧
下面的图截出来项目的路径结构 方便去看清楚在主配置文件中怎么去加载另外的配置文件
Struts.xml
namespace对应的地址
(1) package配置详解
<!--
package:它跟项目里面 的包没关系,它是用来管理action
package相当于servlet action相当于servlet中的方法一个package中可以配置多个action
name:给这个package起个名字没什么意思可以随便命名,一般情况下它的命名是按照当前package
管理action的分类命名,不能重复
namespace:访问路径地址前缀,跟name没关系,必须写
跟其他的package中的namespace能不能重复没有要求
extends:继承 继承自struts-default必须写名字不能改
从struts2核心包struts-2.2下面的struts-default.xml这里面配置了很多默认的属性
abstract:抽象 声明的一个标志,当前这个配置文件不能够独立运行,等待被继承
-->
<package name="hello"namespace="/hello" extends="struts-default">
(2) action配置
<!--
action配置详解
name:给action起名字,决定了访问路径最后定的地址
class:类的完整路径名
method:访问类中的哪个方法(也就是访问到这个类调用哪种方法)
-->
<action name="helloAction"class="cn.hd.hello.HelloAction" method="hello">
<!--
result详解
name对应的是action类中的method返回值
名字可以随便写只要和action类中的返回值结果一样就行
一般情况下使用特定的
type: dispatcher 转发
redirect 重定向
标签中间的值:跳转页面的地址
-->
<result name="success" type="redirect">/hello.html</result>
(3)include 在src struts.xml可以去读取其他位置的xml配置文件要求新创建的 xml必须有约束文件
<includefile="cn/hd/dynamic/struts01.xml"></include>
常量配置
常量配置就是在配置文件中配置一些常量 当然自己去不去配置也可以用 框架内部是有默认的常量的如果配置了常量就会优先使用用户配置的常量 配置常量的方法有多中
默认的常量配置 在struts2的核心包下的
默认常量的配置的文件名是default.propertites
如何修改这些常量
(1) 在struts.xml中去修改
<!--i18n 国际化 相当于我们在servlet中设置的编码问题
解决了post请求的中文乱码问题
-->
<constant name="struts.i18n.encoding"value="UTF-8"></constant>
(2) 在src目录下 创建struts.properties文件直接在该文件中 去修改常量即可
(3) 在web.xml文件中去修改 添加一个context-param。在param-name中书写常量名,在param-value中书写常量值
三个地方都可以同时修改哪个生效?web.xml>struts.propertise>struts.xml
推荐使用第一个
常用的常量
(1)struts.i18n.encoding设置编码,解决了post请求的乱码问题
name="struts.i18n.encoding"value="UTF-8"
(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设置开发者模式 默认关闭
<!--developerMode 开发者模式
1,热部署也就是修改配置文件后,等一段时间会自动加载
2,提高错误信息的提示(友好的错误提示)
-->
<constant name="struts.devMode"value="true"></constant>
3高级配置
为什么使用动态方法
为什么使用动态方法因为当一个类中的方法多的时候就需要在一个package中配置多个action代码比较繁琐为了简便所以有动态方法,可以用传参的方法告诉它调用哪个方法
动态方法
(1)推荐使用
<action name="userAction_*" class="cn.hd.dynamic.UserAction"method="{1}">
<result name="success">/hello.html</result>
</action>
Action配置中的name属性这个属性 决定着浏览器的访问地址
测试的时候在浏览器的路径中 输入action的name值+*+方法名(Action中的方法名)
Struts2可以采用通配符的方式去读取method{1}会自动将路径中userAction……配置到method中
花括号中数字代表第几个星号 需要在method那里填充什么传参的时候就传入什么 星号之间最好用一个符号隔开不一定要用下划线,例如默认的就是用的叹号,用符号隔开的好处是当有多个星号是可以识别
当然这里可以配置多个星号
<action name="userAction_*_*_*" class="cn.hd.dynamic.{2}Action"method="{1}">
<result name="success">/{3}hello.html</result>
</action>
注意:这种方法在struts2的高版本(2.5以上)中会无效 只是版本高了安全一点如果没有设置就不能用
首先你也要开启动态方法,然后增加allowed-methods
<action name="userAction_*" class="cn.hd.dynamic.UserAction" method="{1}">
<result name="success">/hello.html</result>
<allowed-methods>updata,delete,add,query</allowed-methods>
</action>
(2)开启动态方法
首先开启动态方法的常量这种方法是默认的
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<action name="userAction" class="cn.hd.dynamic.UserAction">
<result name="success">/hello.html</result>
<allowed-methods>updata,delete,add,query</allowed-methods>
</action>
将action中的method删掉 访问的时候action名字后面加!叹号后面跟方法名
完成了动态方法的开启
测试的时候在浏览器的路径中 输入action的name值+!+方法名(Action中的方法名)
4默认配置(了解)
默认的action配置
<!--
method 属性可以不写 默认方法 execute
result 标签中的name属性可以不写默认 success
type 可以不写 默认dispatcher
class可以不写 默认的类是ActionSupport打开这个类文件它里面有execute方法,
该方法返回一个success字符串
-->
<action name="defaultAction">
<result>/hello.html</result>
</action>
设置默认的action地址(也就是说如果action地址错误会去自动的访问这里配置的)
<!--默认的action地址
如果请求的地址不存在,那么会访问default-action-ref里面的action
-->
<default-action-ref name="defaultAction"></default-action-ref>