Alan's Blog

导航

Action笔记

一、首先先问一下Action是什么?

  Action是HTTP请求与业务逻辑之间的适配器

二、Action什么时候被初始化?

  是发出Action请求时初始化,不是在读取配置时初始化。

三、其次看一下开发Action的步骤:

1、创建一个类,继承Action

2、注册struts-config.xml(配置文件如下)

 

代码
<!-- 这里的name的值要和form-bean name的值保持一致才能够获取到那个类的东西 -->
    
<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类可以用于什么地方?

  可以用于计数。

 

代码
private int count = 0 ;
    
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编辑  收藏  举报