struts2:Action、interceptor继承的基类和获得作用域的方式

来源:互联网 发布:json格式化工具下载 编辑:程序博客网 时间:2024/05/17 08:21
一、Struts2
 1、Action:
  1)、实现struts2的Action类功能,需要继承ActionSupport类(ActionSupport实现了Action接口),可以重写excute()方法,实际开发中一般不用
  2)、在Action中获得作用域的方式:有三种
   A、方式一:纯粹的servlet  api 
    HttpServletRequest request=ServletActionContext.getRequest();
    HttpServletResponse response=ServletActionContext.getResponse();
    request.setAttribute("name", this.getUsername());
    HttpSession session=request.getSession();
    ServletContext application=session.getServletContext();
   B、方式二:通过Action上下文ActionContext  
    获取request session application
    ActionContext request=ActionContext.getContext();
    request.put("req_key", "req_value");
    
    Map<String,Object> session=request.getSession();
    session.put("ses_key", "ses_value");
    
    Map<String,Object> application=request.getApplication();
    application.put("app_key", "app_value");
   C、方式三:通过接口实现,重写里面的方法,位置struts  API包为:org。apache。struts2。interceptor
    ServletRequestAware
    ServletResponseAware
    SessionAware
    ApplicationAware
    例如:
     //实现下面三个接口,声明对应作用域的对象,生成对应的set方法,当struts2被加载时,会将对应的作用域参数注入到当前声明的对象中
     publicclass TestAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
         private Map session;
         private HttpServletRequest request;
         private HttpServletResponse response;   
         //重写接口中的方法,只提供set方法,并不需要get方法,可以自定义生成
         publicvoid setSession(Map att) {
      this.session = att;
         }
        
         publicvoid setServletRequest(HttpServletRequest request) {
      this.request = request;
         }
        
         publicvoid setServletResponse(HttpServletResponse response) {
      this.response = response;
         }
 2、Interceptor:拦截器
  1)、实现struts2的Interceptor类功能,需要继承AbstractInterceptor类,并重写intercept(ActionInvocation invocation)方法
  2)、获得作用域的方法:通过拦截器方法里面的参数ActionInvocation invocation获得(注意:拦截器中任何参数的获得都通过invocation,其他方式都是非法的)
   获取request session application
   ActionContext request=invocation.getInvocationContext().getContext();
   request.put("req_key", "req_value");
   
   Map<String,Object> session=request.getSession();
   session.put("ses_key", "ses_value");
   
   Map<String,Object> application=request.getApplication();
   application.put("app_key", "app_value");
  3)、此处说一下invoke()方法和invokeActionOnly()方法的区别:
   invocation.invoke()方法:请求被响应的过程:action-----result-----interceptor
   invocation.invokeActionOnly()方法:请求被响应的过程:action-----interceptor-----result
原创粉丝点击