上篇我们大致了解了一下採用了Struts框架的web页面运行流程。
接下来的几篇我们通过Struts的源代码来学习一下Struts的内部原理。
当server启动的时候。server会依据配置文件初始化一系列的參数和对象。所以一切都要从配置文件開始说起。
<span style="font-family:KaiTi_GB2312;"> <servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet> <!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping></span>
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdsZWlsZWk0ODY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
从Struts1的结构体系上来看,仅仅要符合配置要求的client的请求都会被ActionServlet这个类进行接受和处理。在这里配置的是*.do,全部以.do 结尾的request请求都会被转到ActionServlet中进行处理。Tomcat启动时,对于创建的ActionServlet,还有其它的一些重要的參数。
首先,是config參数,这里配置的是/WEB-INF/struts-config.xml。系统默认的Struts配置文件名。这里我们能够删除。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdsZWlsZWk0ODY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
能够知道,在ActionServlet中已经写好了默认的文件配置信息名称,也就是标准名称,所以我们再web.xml中不配置Struts的配置文件项也是能够的。假设这样必须保证Struts配置文件的名称和ActionServelt中的一样。
其次,配置中的debug和detail。是关于日志记录方面的配置。无关紧要,值越小,表示日志记录粒度越大。相对来说内容就越不具体。
最后是 <load-on-startup>的配置。这个是用来确定Servlet在server启动的时候server先载入哪个Servlet,值越小。表示server越先载入。
当Tomcat启动的时候,会读取web.xml文件。创建一个单实例的ActionSerlvet。这个ActionServlet去读取Struts-config.xml文件到内存中,以map形式进行保存,然后会在之后的Services方法中用到。为之后最基本的process方法做好必要的准备。顺带着提一下,Struts对ActionServlet的封装,使得自身成为了一个具有侵入性的框架。假设不继承Action就不会实现相应的功能。
还有一方面,Tomcat实例化ActionServlet採用的单实例,也会存在线程安全问题,这是后话,我们之后会谈到。
这篇博客主要是了解Struts框架最核心的ActionServelt的在web.xml中的配置,至于载入好配置文件之后,怎样进一步的实现处理和分发请求,后面的文章继续!