23,405
社区成员
发帖
与我相关
我的任务
分享
<struts>
<default-action-ref="defaultAction">
<package name="default" extends="struts-default">
<action name="defaultAction">
<result>error.jsp</result>
</action>
</package>
</struts>
<2.6.2全局Action
全局结果在包中定义,这个包中所有的Action可以共享这个结果(在项目中如果用到了AJAX可以配置一个固定的返回空白页和全局的Action统一配置减少配置文件的冗余)
<!-- 定义全局试图 -->
<global-results>
<result name="ajaxDone">/WEB-INF/ajaxDone.jsp</result>
</global-results>
<2.7 Struts1和Struts2线程安全问题
产生原因:由Servlet的工作原理产生,前面整理Servlet提到了Servlet是单例模式,对于一个Servlet在项目运行期间永远只会有一个Servlet对象存在
<2.7.1 struts1
struts1 是对java web Servlet 接口的直接实现所以继承了Servlet单实例的特性 打个比喻如果你在struts1 Action在类里面定义了一个全局变量 那么只要你执行一个Action修改了它的值 下个Action如果也用到这个变量则它的值是修改后的而不是原来的 这样的话一旦程序员粗心就会造成不可知的错误 这里涉及到了程序开发中使可变性最小化的设计思想 其实安全不安全是相对的 只要开发过程遵守规定struts1也可以很安全struts1是单例模式所以理论上性能会更高
struts1 本质上相当于一个Servlet
<2.7.2 struts2
struts2在底层封装了Servlet Struts2获取http请求给每个请求实例化一个Action,请求结束后销毁Action对象(多实例)。Struts2 action本质上是一个Java类
注意Spring默认采用了单例模式所以在用Spring管理Struts2 Action时应该在配置文件里将scope设置为prototype 多实例