个人主页(http://hi.youkuaiyun.com/space.php?do=home)
1.Struts初始化详解
● Struts入口启动
tomcat启动的时候会读取web.xml文件,对其中的一些信息进行初始化的工作,Struts的启动工作就从这里开始
web.xml中的配置信息入:
在web.xml文件中有如下的配置信息:
<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>
即表示tomcat启动的时候会初始化org.apache.struts.action.ActionServlet类.
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
●Struts的ActionServlet初始化
根据web.xml进行初始化
根据struts-config.xml进行初始化
●Struts中的Action是在请求时初始化,而不是在而不是在读取配置时初始化,且只初始化一次,Action是线程不安全的,因为所有的请求共享一个Action实例
2.Struts的线程安全性
Struts1和Struts2都是线程不安全的,struts1.x一般不考虑安全性问题,这是因为struts1.x调用方法用到的参数一般都是局部变量,我们用于封装客户端请求参数的ActionForm,也是作为一个参数传入,也是局部变量,局部变量是线程安全的
但如果execute方法中使用了实例变量,就存在线程安全性问题,所以不建议使用,如果非用不可,可以使用同步机制去处理
struts1中的Action实例会被多个请求共享,所以要注意线程安全性问题
struts2中Action为每个请求产生一个实例,因此没有安全性问题