struts2的基本配置
可以在类路径下(src)下创建struts.properties配置常量,也可以在struts.xml文件中配置
访问struts2中的action的路径由两部分组成
包的命名空间+action的名称
如下action的访问路径是:http://localhost:端口/内容路径/test/helloWorldAction.action
<package name="test" namespace=“/test“ extends="struts-default"> <action name="helloWorldAction" class="com.yxkong.test.HelloWorldAction"> <result name="success" type="dispatcher">/success.jsp</result> </action> </package>
action名称的搜索顺序
如路径:/yxk/yxk1/yxk2/test.action的搜索顺序
先在yxk2这个包中找,如果没有向后退到yxk1中,如果还没有则退到yxk这个包中查找,只要最后这个yxk这个包里有就不会报错
如果没有给action配置class,这个会执行默认的class:com.opensymphony.xwork2.ActionSupport
在struts-default.xml中的default-class-ref配置执行的默认class
如果没有为action指定执行的方法,则默认执行execute方法
如果没有为result的name属性指定值,则默认的值为success
配置默认执行的action 在package包里配置指定的,
<default-action-ref name="指定的action"></default-action-ref>
如果请求的action找不到的情况下,则执行上面配置指定的action
在package下面配置
ActionSupport 实现了Action,等
配置默认的后缀
在default.properties
struts.action.extension=action,, 默认为action 或者空
在properties中选中指定的值,双击完成,然后在源里打开默认会指定到选中的位置
在struts中修改action请求的后缀,默认请求时action或者是空,如果有多个后缀名中间使用,隔开,修改以后是覆盖了原来的后缀名
<constant name="struts.action.extension" value="do,go">
配置重新加载
struts.configuration.xml.reload=true
<constant name="struts.configuration.xml.reload" value="true"></constant>
* constant 配置常量
* 当配置文件struts.xml修改以后,不用重启服务器会自动加载,访问的时候才回去加载,修改后只加载一次,
默认为false
配置i18n
<constant name="struts.i18n.reload" value="true"></constant>
当资源文件.properties修改时,true自动加载,默认为false
配置开发模式
<constant name="struts.devMode" value="true"></constant>
* false:表示生产模式
指开发完毕给客户演示的时候就是生产模式
* true:表示开发模式:可以打印更多的调试信息,用于调试
为true的时候包含了重新加载和和i18n
struts.configuration.xml.reload=true
struts.i18n.reload=true
在struts.xml中一般只配置全局的常量,如果其他的配置,可以配置到外置的xml中
<include file="cn/yxk/servlet/***.xml"></include>
配置命名空间
如果没有命名空间使用一个/配置
<!-- package标签:相当于java中的包,规范化管理,struts2包可以继承 * name:包的名称,主要作用用于继承,唯一的 * namespace:命名空间,相当于房间号,唯一的,也可以看成包的唯一标识 * extends:用于继承其他的包, * 这里继承了struts-default.xml包.该包存放在struts2-core-2.*.jar/struts-default".xml文件 <package name="struts-default" abstract="true"> * 为什么要继承呢?[如果不继承struts-default,则struts2框架没有意义],在后面讲 --> <package name="primer" namespace="/primer" extends="struts-default"> <!-- 如果请求的action找不到的情况下,则执行该配置指定的action --> <default-action-ref name="helloWorldAction"></default-action-ref> <!-- action:配置请求的路径和action之间的对应关系 * name:请求的action的名称,在同一个包中要唯一 * class:action所在类的完整路径 --> <action name="helloWorldAction" class="com.yxkong.struts2demo.HelloWorldAction"> <!-- public String execute() throws Exception { System.out.println("HelloWorldAction execute"); return "success"; } result:返回的结果: * name:对应的action中execute方法的值 * 文本内容:转向的路径. --> <result name="success">/struts2demo/success.jsp</result> </action> <!-- * 如果没有为action指定class,则执行默认的class[com.opensymphony.xwork2.ActionSupport] public class ActionSupport implements Action * 如果没有为action执行执行的方法,则默认执行execute方法 public String execute() throws Exception { return SUCCESS; } * 如果没有为result的name属性执行值,则默认的值为"success" --> <action name="actionNoClass"> <result >/struts2demo/success.jsp</result> </action> </package>
配置返回页面
resultType
在struts-default.xml中
result-types 中
<result-type name="" class="" defalut="">
* name:结果类型起的唯一的名称,可以在其他的地方使用,对应的值就是name
* class:类路径
* defalut=true默认就是使用这个
在struts中获取request中的方法
HttpServletRequest request=ServletActionContext.getRequest();
简洁写法:
<result name="success" type="dispatcher"></result> <result name="success" type="dispatcher"> <param name="location"></param> </result>
* type:表示程序运行时的结果类型
* dispatcher:默认值,表示转发
* redircet: 表示重定向jsp
* redirectAction:重定向到action
dispatcher:对应的是struts-default.properties中的param:
* name=location:是struts定义的一个属性,对应标签中的文本值会在加载的时候指定给struts的这个属性,到时转向的时候用的就是这个文本的值
重定向到action,先执行指定的action,然后根据指定的action跳转到指定的页面
<result name="" type=""> <param name="actionName">指定action的名称</param> <param name="namespace">指定action的命名空间这里可以使用$</param> </result>
在包中指定整个的全局结果
<global-results> <result name="返回值">/指定的页面</result> </global-results>
如果配置了局部的result则会使用局部的,就近原则
通配符和动态方法调用
如何在struts2的action中增加新的方法
* 增加的方法与execute方法的唯一区别是方法的名不同,其他的都相同
通配符映射规则:
* 如果找到多个匹配,没有通配符的则会被选中
* 如果指定的动作不存在,则struts会把这个uri与任何一个包含着通配符*的动作名进行匹配{0}匹配这个uri
不能匹配/字符,如果想把/字符包含在内,需要使用**,如果需要对某个字符进行转义,需要使用\
<action name="*_add" class="cn.yxk.pattern.{1}" method="add"> <result name="add">/pattern/{1}.jsp</result> </action> <action name="*_*" class="cn.yxk.pattern.{1}" method="{2}"> <result name="add">/pattern/{1}.jsp</result> </action>
最常用的是指定是
<action name="Action_*" class="cn.yxk.pattern.Action" method="{1}"> <result name="add">/pattern/{1}.jsp</result> </action>
配置是否允许动态方法调用
<constant name="struts.enable.DynamicMethodeInvocation" value="false"></constant>
默认为true
在struts中配置的action中就不需要指定method
访问的时候根据Action!方法名 调用指定的方法
使用!可以认为是这种方式<action name="Action!*" class="" method="{1}">
访问路径http://localhost/.......Action!del
在配置的时候可以直接写<action name="Action" class="" >
动态方法启用/方法名
<constant name="struts.enable.SlashesInActionNames" value="true"></constant> <action name="actionname/*" class="" method="{1}">
文章评论