struts1源码学习9,command链对request和response的处理

先看chain-config.xml

<?xml version="1.0" ?>
<catalog name="struts">

	<define name="lookup" className="org.apache.commons.chain.generic.LookupCommand" />
	<!-- ========== Servlet Complete Request Chain ========================= -->

	<chain name="servlet-standard">

	// 异常处理command,这个类实现了filter接口,会做process后处理。在做precess后处理时,先判断ActionContext中是否有exception对象,如果存在,则找到name是servlet-exception的command来处理
		<command className="org.apache.struts.chain.commands.ExceptionCatcher"
			catalogName="struts" exceptionCommand="servlet-exception" />
//找到name是process-action的command处理
		<lookup catalogName="struts" name="process-action" optional="false" />
//找到name是process-view的command处理
		<lookup catalogName="struts" name="process-view" optional="false" />

	</chain>

<!-- ========== Action Processing chain ======================== -->
<chain name="process-action">
<!-- Look up optional preprocess command -->实际上是一个前置处理,但是没有配置。optional=true表示该lookupcommand在找不到servlet-standard-preprocess时,也能正常执行(optional=false时会抛出异常)。
<lookup catalogName="struts" name="servlet-standard-preprocess" optional="true" />
<!-- 选择区域信息,会从session,request中得到,如果都不存在,则生成默认locale,然后放入session中 -->
<command className="org.apache.struts.chain.commands.servlet.SelectLocale" />

<!-- 设定应用访问路径,放入request中 -->
<command className="org.apache.struts.chain.commands.servlet.SetOriginalURI" />


<!-- 设置响应信息头:禁用缓存 -->
<command className="org.apache.struts.chain.commands.servlet.RequestNoCache" />


<!-- 设定响应内容类型,默认是text/html -->
<command className="org.apache.struts.chain.commands.servlet.SetContentType" />


<!-- 清除session中的部分信息 -->
<command className="org.apache.struts.chain.commands.RemoveCachedMessages" />


<!-- 根据请求,匹配action -->
<command className="org.apache.struts.chain.commands.servlet.SelectAction" />


<!-- Authorize the selected ActionConfig for this request JAAS权限 -->
<command className="org.apache.struts.chain.commands.servlet.AuthorizeAction" />


<!-- 根据action的name创建form -->
<command className="org.apache.struts.chain.commands.CreateActionForm" />


<!-- 处理上传form,并且把form放进session -->
<command className="org.apache.struts.chain.commands.servlet.PopulateActionForm" />


<!-- 验证,在form中要重写validate方法 -->
<command className="org.apache.struts.chain.commands.servlet.ValidateActionForm" />


<!-- 设定form验证失败时候的跳转页面 ,主要是根据action中配置的input属性-->
<command className="org.apache.struts.chain.commands.servlet.SelectInput" />


<!-- 如果在action中配置了command,并且能够找到这个command,那么执行这个command(前提是form通过验证) -->
<command className="org.apache.struts.chain.commands.ExecuteCommand" />

<!-- 设定跳转,根据action中的forward属性(不是action标签里面的forward标签) -->
<command className="org.apache.struts.chain.commands.servlet.SelectForward" />

<!-- 在actioncontext中设置include属性 -->
<command className="org.apache.struts.chain.commands.SelectInclude" />

<!-- 如果存在include,那么跳转 -->
<command className="org.apache.struts.chain.commands.servlet.PerformInclude" />

<!-- 根据type创建action -->
<command className="org.apache.struts.chain.commands.servlet.CreateAction" />

<!-- 执行action的excute -->
<command className="org.apache.struts.chain.commands.servlet.ExecuteAction" />
</chain>

<!-- ========== View Processing chain ======================== -->
<chain name="process-view">

<!-- Lookup and execute a chain command if the current ForwardConfig is  so-configured. -->
<command className="org.apache.struts.chain.commands.ExecuteForwardCommand" />

<!-- Follow the returned ForwardConfig (if any) -->
<command className="org.apache.struts.chain.commands.servlet.PerformForward" />

</chain>

<!-- ========== Servlet Exception Handler Chain ======================== -->

<chain name="servlet-exception">

<!-- Execute the configured exception handler (if any) -->
<command className="org.apache.struts.chain.commands.servlet.ExceptionHandler" />

<!-- Follow the returned ForwardConfig (if any) -->
<command className="org.apache.struts.chain.commands.servlet.PerformForward" />
</chain>

</catalog>

	

猜你喜欢

转载自blog.csdn.net/wtc860104/article/details/38434595