Struts2框架配置
1. strtus.xml
namespace对应的地址
(1)Package
<!--
packge: 他跟项目中的包没关系,它是用来管理action
name:给这个package起个名字,没什么意思,可以随便命名,
一般情况下他的命名是按早当前package管理action的分类来命名
package和package的名字不能重复
namespace:访问路径地址前缀 跟name没有关系 跟其他的
package中的namespace能不能重复没有要求
extends:继承 继承自struts-default 必须写 名字不能改
从struts2核心包中struts-2.2-core 下面的
struts-default.xml 这里面配置了很多默认的属性
abstract:抽象 声明的一个标志,当前这个配置文件不能独立
运行,等待被继承
-->
(2)action配置
<!--action配置详解
name:给action起名字 决定了访问路径最后的地址
class:类的完整路径名
method:访问类中的方法
-->
<action name="helloAction" class="cn.hd.hello.HelloAction" method="hello">
<!--resul
name:对应的是action类中的 method的返回值名字可以
随便写,只要和action类中的返回值结果一样就可以,
但是一般情况下使用特定
type:dispatcher 转发
redirect 重定向
标签中间的值:跳转页面的地址
-->
<result name="success">/hello.html</result>
</action>
(3)include在src struts.xml可以去读取其他位置的xml配置文件要求创建的xml必须也有约束
<include file="cn/hd/dynamic/struts01.xml"></include>
2常量配置
默认的常量配置 在struts2的核心包下的org
默认常量配置的文件名是default.properties
如何修改这些常量:
(1)在struts.xml中去修改
<!--i18n 国际化 相当于我们在servlet中设置的编码
解决了post请求的中文乱码
-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
(2)在ser目录下 创建struts.properties文件 直接该文件中去修改常量即可
(3)在web.xml文件中去修改 添加一个context-param 在param-name中书写常量名,在param-value中书写常量值
三个地方同时修改那个生效?
web.xml > struts.properties > struts.xml
推荐使用第一个
常用的常量:
(1)i18n.ecoding 设置编码解决了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.高级配置
为什么要使用动态方法
如何配置动态方法
(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删除掉 完成了动态方法的开启
测试时候 在浏览器路径中输入action的name值+!+方法名(Action中的方法名)
注意:
第一种方法在struts2的高版本中会无效
首先你要开启动态方法,然后增加allowed-methods属性
<action name="userAction_*" class="cn.hd.dynamic.UserAction" method="{1}">
<result name="success">/hello.html</result>
<allowed-methods>update,add,delete,get</allowed-methods>
</action>
1. 默认配置
<!--
method 属性可以不写 默认方法 execute
result 标签中的name 属性可以不写 success
type 可以不写 默认是dispatcher
class 可以不写 默认的类是ActionSupport 打开这个类文件 它里面有execute 方法
该方法返回一个success字符串
-->
<!--默认的action地址
如果请求地址不存在,那么会默认访问default-action-ref
里面的action
-->
<default-action-ref name="defaultAction"></default-action-ref>