当发出action请求时,Action被初始化,不是在读取配置信息时初始化,且每个Action只被初始化一次。
Action是线程不安全的,因为所有的请求共享一个action实例。
实现Action的安全性编程:
1.注意不要使用实例变量或静态变量共享只是针对某个请求的数据。
2.注意资源操作的同步性。
应用:统计action的请求次数
public class TestAction extends Action { private Integer count=0; public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { synchronized (count){ count++; } PrintWriter out=response.getWriter(); out.print("count=="+count); return null; }
ActionMapping的测试
<action-mappings> <action path="/testAction" type="demo.TestAction" name="addStudentForm2"> <forward name="addStudentSuccess2" path="/addStudentSuccess2.jsp"></forward> <forward name="addStudentFailure2" path="/addStudentFailure2.jsp"></forward> </action> </action-mappings>
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String name=mapping.getName(); String path=mapping.getPath(); String type=mapping.getType(); System.out.println("name="+name+" path="+path+" type="+type); String [] forwardsName=mapping.findForwards(); for(String forwardName:forwardsName){ ActionForward forward=mapping.findForward(forwardName); String forwardPath=forward.getPath(); System.out.println("forward name="+forwardName+" path="+forwardPath); }<span style="font-family: Arial, Helvetica, sans-serif;">}</span>