当发出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>
name=addStudentForm2 path=/testAction type=demo.TestAction
forward name=addStudentFailure2 path=/addStudentFailure2.jsp
forward name=addStudentSuccess2 path=/addStudentSuccess2.jsp