首页 > 技术文章 > 2.struts2的配置

syj1993 2018-03-05 00:40 原文

### Struts2的常见配置(重点) ###
	
----------
	
**Struts2框架配置文件加载的顺序(了解加载配置文件的顺序,重点掌握struts.xml配置文件)**
	
	1.Struts2框架的核心是StrutsPrepareAndExecuteFilter过滤器,该过滤器有两个功能
		* Prepare		-- 预处理,加载核心的配置文件
		* Execute		-- 执行,让部分拦截器执行
	
	2.目的:要了解Struts2的框架默认加载了哪些配置文件的信息,有一些重点的配置文件的信息要记住。还要了解配置文件加载的顺序。以后需要知道在哪个配置文件中来编写配置文件
	
	2.StrutsPrepareAndExecuteFilter过滤器会加载哪些配置文件呢?
		* 通过源代码可以看到具体加载的配置文件和加载配置文件的顺序
			* init_DefaultProperties(); // [1]					-- 加载org/apache/struts2/default.properties
		    * 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]				-- 加载Bean的配置.
	
	3.重点了解的配置文件
		* default.properties		-- 在org/apache/struts2/目录下,代表的是配置的是Struts2的常量的值
		* struts-default.xml		-- 在Struts2的核心包下,代表的是Struts2核心功能的配置(Bean、拦截器、结果类型等)
		* struts.xml				-- 重点中的重点配置,代表WEB应用的默认配置,在工作中,基本就配置它就可以了!!(可以配置常量)
		* web.xml					-- 配置前端控制器(可以配置常量)
		
		* 注意:
			* 前3个配置文件是struts2框架的默认配置文件,基本不用修改。
			* 后3个配置文件可以允许自己修改struts2的常量。但是有一个特点:后加载的配置文件修改的常量的值,会覆盖掉前面修改的常量的值。
	
	4.总结(重点掌握的配置文件)
		* 先加载default.properties文件,在org/apache/struts2/default.properties文件,都是常量。
		* 又加载struts-default.xml配置文件,在核心的jar包最下方,struts2框架的核心功能都是在该配置文件中配置的。
		* 再加载struts.xml的配置文件,在src的目录下,代表用户自己配置的配置文件
		* 最后加载web.xml的配置文件
		
		* 后加载的配置文件会覆盖掉之前加载的配置文件(在这些配置文件中可以配置常量)
	
	5. 注意一个问题
		* 哪些配置文件中可以配置常量?
			* default.properties		-- 默认值,咱们是不能修改的!!
			* struts.xml				-- 可以配置,开发中基本上都在该配置文件中配置常量
			* struts.properties			-- 可以配置,基本不会在该配置文件中配置
			* web.xml					-- 可以配置,基本不会在该配置文件中配置
		
		* 后加载的配置文件会覆盖掉之前加载的配置!!		
	
	6. 总结
		* 加载了哪些重要的配置文件
			* default.properties		-- 在org/apache/struts2(默认的常量)
			* struts-default.xml		-- 在核心包下(Strut2框架的所有的核心功能)
			* struts.xml				-- 在src目录下,自己编写核心的配置
			* web.xml					-- 配置过滤器
		
		* 后加载的常量会覆盖掉之前加载的
			* struts.xml				-- 可以配置,开发中基本上都在该配置文件中配置常量
			* struts.properties			-- 可以配置,基本不会在该配置文件中配置
			* web.xml					-- 可以配置,基本不会在该配置文件中配置
	
----------
	
**struts.xml配置文件的常见配置(重点掌握开发中常用的配置方式)**
	
	1.struts.xml的配置文件是咱们以后开发中最常见的配置,所以它的配置文件需要大家重点掌握!!
		* <package>标签,如果要配置<Action>的标签,那么必须要先配置<package>标签,代表的包的概念。
			* 包含的属性
				* name				-- 包的名称,要求是唯一的,管理action配置。
				* extends			-- 继承,可以继承其他的包,只要继承了,那么该包就包含了其他包的功能,一般都是继承struts-default
				* namespace			-- 名称空间,一般与<action>标签中的name属性共同决定访问路径(通俗话:怎么来访问action),常见的配置如下
					* namespace=""		-- 默认的名称空间(访问的方式和namespace="/"是一样的)
					* namespace="/"		-- 根名称空间
					* namespace="/aaa"	-- 带有名称的名称空间
				* abstract			-- 抽象的。这个属性基本很少使用,值如果是true,那么编写的包是被继承的。		
		
		* <action>标签
			* 代表配置action类,包含的属性
				* name			-- 和<package>标签的namespace属性一起来决定访问路径的。
				* class			-- 配置Action类的全路径(默认值是ActionSupport类)
				* method		-- Action类中执行的方法,如果不指定,默认值是execute.
		
		* <result>标签
			* action类中方法执行,返回的结果跳转的页面
				* name		-- 结果页面逻辑视图名称
				* type		-- 结果类型(默认值是转发,也可以设置其他的值)
		
	2.Action的默认处理类(了解)
		* 如果在<action>标签中,没有指定具体的Action类,那么Struts2的框架中是有默认值的。
		* 例如
			<action name="delete">
		    	<result>/pages/success.jsp</result>
		    </action>
		* 上面这段配置,没有指定具体的Action类,那么在地址栏上敲链接访问,程序也不会报错,而是会跳转到success.jsp的页面。说明默认的Action类执行了。
		* 打开struts-default.xml,在配置文件的最下面,有一段配置
			* <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />	该类就是默认的Action处理类。
	
	3.默认的Action和Action默认的处理类(了解)
		* 听名称容易混淆,需要大家区分这一类的问题
		* 默认的Action
			* 在地址栏上输入一个不存在的action请求,程序会报404的异常。
			* 但是在<package>标签中通过<default-action-ref name="指定action的标签的name属性的值"></default-action-ref>来该请求。
		
		* Action默认处理类
			* 在地址栏上输入一个正确的action请求,但是<action>标签中的class属性没有写具体的Action类
			* 在<package>标签中通过<default-class-ref class="指定action类的全路径"></default-class-ref>
		
	4. 问题:package标签中配置文件出现是有顺序的

struts.xml:

<?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="demo1" extends="struts-default" namespace="/">
	
		<!-- 配置一个默认的action,如果程序出现了404的异常,制定一个具体的action来接收请求,做出响应 -->
		<!-- name属性指定的是下面的具体的action的名称 -->
		<default-action-ref name="hello"></default-action-ref>
	
		<!-- 配置Action的类 -->
		<action name="hello" class="demo1.HelloAction" method="sayHello">
			<!-- 配置Action的结果跳转页面 -->
			<result name="ok">/demo1/suc.jsp</result>
		</action>
		
		<!-- 配置新的action,演示默认值 execute方法 -->
		<action name="hello2" class="demo1.Hello2Action">
			<!-- result的name默认success -->
			<result>/demo1/suc.jsp</result>
		</action>
		
		<!-- 不写class,默认使用ActionSupport处理,返回success -->
		<action name="hello3" >
			<result>/demo1/suc.jsp</result>
		</action>
		
	</package>

</struts>

  

  

推荐阅读