1、如果用户开发自己的struts2插件,则需要编写相应的struts-plugin.xml文件放在jar文件中,struts2框架将自动加载该文件。
2、struts2框架按如下搜索顺序加载struts2常量:
struts-default.xml-->struts-plugin.xml-->struts.xml--->struts.properties-->web.xml
3、struts.xml中,package元素用于定义包配置,每个package定义一个包配置,属性:
name:* 该包名字,为被其他包引用的key
extends ,
namespace:命名空间
abstract:可选属性,指定该包是否为抽象包,抽象包中不能包含action定义
4、命名空间只有一个级别。如果请求的URL是/book/search/get.action,则系统先在/book/search的命名空间下查找get的action,如果找到,则返回,如果没有找到,则系统将直接进入默认的命名空间中查找名为get的action而不会在book的命名空间下查找get的action。
5、拦截器
6、action使用通配符:
如何在struts.xml中有action为abcAction,*,*Action,则abcAction会找到abcAction,而defAction则会找到struts中写在靠前的那个action,比如是*在*action之前,则找到*。
7、默认action:<default-action-ref name="actionName"/>
8、struts.xml --result 默认结果类型是dispatcher,但可以通过配置文件改变默认结构类型;
struts2内建支持的result结果类型:
chain:action链式处理的结果类型(不明白)
chart:JFreeChart
dispatcher:jsp整合
freemarker:FreeMarker整合
httpheader:控制特殊的http行为的结果类型
jasper:JasperReports
jsf:jsf
redirect:直接跳转到其他的URL
redirect-action跳转到其他的action
stream:向浏览器返回一个InputStream(文件下载)
tiles:Tiles
velocity:velocity
xslt: XML/XSLT
plaintext:显示某个页面的原始代码的结果类型。
9、请求参数决定结果:
${属性名1.属性名2.属性名3} 属性名1即是对应action实例中的属性,如:<result type="">logon.action?name=${currentUser.name}
10、全局结果:
<global-results><result></result></global-results>
如果一个action里面包含了与全局结果里面相同的结果,则局部结果会覆盖全局结果
11、模型驱动:使用模型封装了所有数据,贯穿整个MVC流程,而模型的作用是封装用户的请求参数和处理结果。
编写独立的javabean,而在action类中去实现ModelDriven接口,并实现getModel()方法。
问:系统是如何将请求参数封装到action的model属性中的??
要在jsp页面中输出服务器处理结果,应该写成<s:property value="model.##"/>但也可以把model.去掉,系统如在action中没有找到属性,会自动去管理model中的属性。
12、struts2的异常机制:
开启struts2的异常处理机制,需要一个拦截器,struts-default.xml已经写好开启了。
在struts.xml中配置<exception-mapping result="logon" exception="java.io.IOException"/>
<result name="logon" ..>--->上面的result就是这个result出异常时转入的页面
全局异常映射的result属性值通常不要使用局部结果,局部异常映射的result可以使用局部也是用全局。
显示异常信息:<s:property value="exception"/>:输出异常对象本身
<s:property value="exceptionStack"/> :输出异常堆栈信息