Struts2的常见配置
1.Struts2的配置文件的加载顺序:
每次从客户端发送到请求到服务器都要先从Struts2的核心过滤器StrutsPrepareAndExeccuteFilter,这个过滤器有两个功能:预处理和执行。在预处理中主要就是来加载配置文件的。对应的过滤器中的init方法,而执行是用来执行一组拦截器完成部分功能的,对应的是过滤器的doFilter方法,所以我们如果要去了解Struts2的配置文件的加载顺序,那么我们需要查询过滤器init方法
在init方法中,调用了init的initDispatcher 的方法来加载配置文件,进入到该代码中
我们会发现这个方法又调用dispatcher的init方法。进入到init 方法内部
这一系列的代码就是用来加载Struts的配置文件的
init_DefaultProperties(); //[1]
加载org.apache.struts.default.properties配置的是struts2的所有常量
init_TraditionalXmlConfigurations()://[2]
加载Struts-default.xml 、Struts-plugin.xml 、 struts.xml
init_LegacyStrutsProperties();// [3]
加载用户自定义Struts.properties
init_CustomConfigurationProviders();//[5]
加载用户配置的提供对象
init_FilterInitParameters(); // 【6】
加载 web.xml
init_AliasStandardObjects(); //[7]
加载标准对象。
根据上面的代码我们可以得到配置文件的加载顺序如下
- default.properties
- struts-default.xml
- struts-plugin.xml
- struts.xml ---------配置Action以及常量(*******)
- Struts.properties ------------配置常量
- web.xml ---------------配置核心过滤器及常量
前三个配置文件是Struts2内部配置文件,我们无法修改。能修改的文件是Struts.xml ,Struts.properties ,web.xml配置文件 。这几个配置文件的加载是有一定的顺序的。这三个配置文件都可以修改Struts常量的值。后加载配置文件中的常量值会将先加载的配置文件中常量的值给覆盖。
Action的配置:
Struts2框架的核心配置文件是Struts.xml 文件,该文件用来配置Action 和请求的对应关系
[<package >的配置]
struts2框架的核心组件是Action和拦截器,它使用包来管理Action和拦截器 。每个包就是多个Action 、多个拦截器、多个拦截器引用的集合。在Struts.xml 文件中,package元素用于定义包配置,每个package元素定义了一个包配置。package元素的常见属性,如表所示:
在配置包时:
1.必须指定name属性,就是包的标识。
2。还可以指定一个可选的extends属性,extends 属性值必须是另一个包的name属性值。该属性值通常都设置为struts-default,这样包中的Action就具有Struts2 框架默认拦截器等功能。
3.abstract: struts2还提供了一种所谓的抽象包struts2还提供了一种所谓的抽象包 。为了显示指定一个包时抽象包,可以为该package元素增加abstract="true"属性
4。namespace : 在package 中还有namespace的配置,namespace的属性与action标签的name属性共同决定了访问路径。namespace有如下三种配置。
- 默认名称空间 : 默认的空间名称就是 namespace=""
- 跟名称空间 : 跟名称空间的就是 namespace="/"
- 带名称的名称空间 :带名称的名称空间就是 namespace="/demo1"
不能为: namespace="demo1"
[Action 的配置]
Action 映射是框架中的基本“工作单元”。Action映射就是将一个请求的URL映射到Action 类,当一个请求匹配某个Action名称是,框架就使用这个映射
来确定如何处理请求。在struts.xml 文件中,通过<action>元素对请求的Action和Action类进行配置
<action >元素*有4个属性,这4个属性的说明如表所示。
默认action请求:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/default" extends="struts-default" >
<!-- 找不到包下的action,会使用Demo2Action作为默认action处理请求 -->
<default-action-ref name="Demo2Action"></default-action-ref>
<!-- method属性:execute -->
<!-- result的name属性:success -->
<!-- result的type属性:dispatcher 转发 -->
<!-- class属性:com.opensymphony.xwork2.ActionSupport -->
<action name="Demo2Action" >
<result >/hello.jsp</result>
</action>
</package>
</struts>