1. struts.xml中一些属性的默认值
我们知道我们在使用struts框架的时候,需要对struts.xml进行配置,并且在这当中,有一些属性如果你不配置的话,它会有它的默认值。其情况如下表所示:
标签 | 子元素 | 默认值 |
---|---|---|
package | ||
namespace | 默认值”“(默认值为空) | |
action | ||
name | com.opensymphony.xwork2.ActionSupport | |
method | execute | |
result | ||
name | “success” |
2. action路径的访问方式
讲起来比较麻烦,用一个实例进行表述会比较方便,实例如下:
<package name="default" namespace="/" extends="struts-default">
<action name="demo" class="com.action.DemoAction" method="test">
<result name="win">/hello.jsp</result>
</action>
</package>
当我们输入以下地址 http://localhost/struts_study(项目名)/1/2/3/demo时,讲道理应该是访问不了action,给个404的报错,结果却访问到了action。为什么?
原因:struts2中的action被访问的时候,查找的顺序如下:
namespace | action中的name | 是否查找到 |
---|---|---|
/1/2/3 | demo | 没找到 |
/1/2 | demo | 没找到 |
/1 | demo | 没找到 |
/ | demo | 再没找到就报404错误 |
3. 默认action
<default-action-ref name=“要使用默认action的名称”>
作用:配置了这个,当访问的路径,其他action处理不了,就使用这个默认action来进行处理。说个比喻,好比老师上课点名来回答问题,点到了小明,但是小明今天逃课去上网,也就是小明不在教室,这时候就默认让学习委员小红来回答问题。提问小二,小二特么逃课去打LOL,也不再教室,这时候也默认让学习委员小红来回答问题。去小红就相当于默认action。
4. 默认的action处理类
<default-class-ref class=”类的全名”>
作用:客户端访问action,已经找到匹配的<action>元素,但是action元素没有class属性,就执行默认的action处理类。说个比喻,老师上课点名来朗读课本,点到了小明,小明今天有来上课,但是没带书,于是老师把书给了小明,让他朗读。然后又点了小二,小二今天也有来教室,但是也没带书,于是老师又把书给了小二,让他朗读。这时候,老师的书本就好比是默认的action处理类。
5. struts2的常量配置
struts2的默认常量都在default.properties配置了。如果我们要进行自定义的常量配置或者要覆盖默认常量,应该怎么配置?
<1>在struts.xml中进行配置。(推荐使用)
<constant name=”常量名称” value=”常量值”></constans>
例如定义一个叫hello的常量,它的值为word:
<struts>
<constant name="hello" value="word"></constant>
</struts>
<2>在struts.properties的文件中进行配置。(几乎不使用这个方法)
<3>在web.xml中进行配置。(比较少用这个方法)
在配置StrutsPrepareAndExecuteFilter中的初始化参数中进行配置常量。
例如配置一个hello的常量,值为word:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>hello</param-name>
<param-value>word</param-value>
</init-param>
</filter>
6. 一些常用常量的作用
常量名称 | 常量的默认值 | 作用 |
---|---|---|
struts.action.extension | action,, | 指定struts2框架默认拦截的后缀名为action和不写扩展名。 |
struts.i18n.encoding | UTF-8 | 相当于request. setCharacterEncoding=”UTF-8”,解决乱码问题。 |
struts.serve.static.browserCache | false | false不缓存,true浏览器会缓存静态内容,产品环境设置true、开发环境设置false |
struts.devMode | true | 提供详细的报错页面,修改struts.xml文件后,不需要再重启服务器。 |
7. struts.xml文件分离
文件分离的的目的:因为太多的配置写在用一个xml文件中,会造成阅读性极差,而且乱,不容易查找等。用这个办法就能实现一个模块一个配置文件。
文件分离实例:
<struts>
<!--导入XXX.xml的内容,和JSP中的静态包含include相似-->
<include file="XXX.xml" />
</struts>
8. result标签
<1>name属性的作用是:与action中的method的返回值匹配,进行跳转。
<2>type属性,在struts-default.xml中定义了type可以取的值:
type标签中的name属性 | 作用 | 1(重点)2(了解) |
---|---|---|
dispatcher | 请求转发,也是默认值,一般用于从一个action跳转到页面 | 1 |
chain | 相当于请求转发,一般用于从一个action跳转到另一个action | 1 |
redirect | 重定向,一般用于从一个action跳转到页面 | |
redirectAction | 重定向,一般用于从一个action到另一个action | 1 |
stream | 代表的是服务器端返回的是一个流,一般用于下载 | 1 |
freemarker | 现在使用的模板技术 | 2 |
velocity | 以前的模板技术 | 2 |
全局结果:
//如果有局部结果的话,就会执行局部的结果
<global-results>
<!-- 全局结果 当前包中 所有Action都可以用-->
<result name="success">/demo.jsp</result>
</global-results>