Action笔记
一、首先先问一下Action是什么?
Action是HTTP请求与业务逻辑之间的适配器
二、Action什么时候被初始化?
是发出Action请求时初始化,不是在读取配置时初始化。
三、其次看一下开发Action的步骤:
1、创建一个类,继承Action
2、注册struts-config.xml(配置文件如下)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<action
input="/form/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="com.yourcompany.struts.action.LoginAction">
</action>
path:指明调用jsp能通过中心控制器ActionServlet找到该Action
type:指该Action类全名
name:该action引用Form的名称(form是为action服务的,所以要先创建form类)
input:如果表单验证不通过,则跳转指定的目标模块
四、Acton是安全的吗?为什么?
Action本身是不安全的,所以要注意线程安全,因为一个Action类只创建一个Action实例,控制器会共享同一实例。
Action实例存放的地方:它的实例是放在RequestProcessor类的processAtionCreate()方法中的HashMap中。
如:protected HashMap actions = new HashMap();
五、如何创建安全的多线程Action类?
保证线程安全的重要原则是在Action类中仅仅使用局部变量,谨慎地使用实例变量,所以每个线程有独立的局部变量,不会被其他线程共享 ,当线程执行完execute()方法时,它的局部变量会被销毁。
六、不安全的Action类可以用于什么地方?
可以用于计数。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
synchronized(new Integer(count)){ //synchronized锁的是一个对象,不能是值,所以要new
count++; //为的是线程安全
}
PrintWriter out = response.getWriter();
out.print("count="+count);
return null;
}
posted on 2010-03-15 10:44 Alan's Blog 阅读(1330) 评论(0) 编辑 收藏 举报