转自:ServletContextAware、ServletRequestAware、ServletResponseAware、SessionAware

Struts 2提供了Aware接口。Aware为"感知"的意思,实现了相关Aware接口的Action能够感知相应的资源。Struts在实例化一个Action实例时,如果发现它实现了相应的Aware接口,会把相应的资源通过Aware接口方法注射进去。这种方式也可以叫做注射方式(IoC方式)。

Servlet API中常用对象application、request、response、Session对应的Aware接口分别为ServletContextAware、ServletRequestAware、ServletResponseAware、SessionAware。例如,下面的Action实现了这4种接口,能够感知到这些对象。代码如下:


package com.helloweenvsfei.struts2.action;  
import org.apache.struts2.interceptor.ServletRequestAware;  
import org.apache.struts2.interceptor.ServletResponseAware;  
import org.apache.struts2.interceptor.SessionAware;  
import org.apache.struts2.util.ServletContextAware;  
public class ServletAwareAction extends ActionSupport implements 
        ServletRequestAware, ServletResponseAware, 
SessionAware, Servlet            ContextAware {  
 
    private ServletContext application;         // Servlet上下文  
    private HttpServletRequest request;         // request对象  
    private HttpServletResponse response;           // response对象  
    private Map session;                            // session对象  
 
    public void setServletRequest(HttpServletRequest request) {  
                                                    
// request的setter方法  
        this.request = request;  
    }  
    public void setServletResponse(HttpServletResponse response) {  
                                                    
// request的setter方法  
        this.response = response;  
    }  
    public void setSession(Map sessionValues) { // 
session的setter方法  
        this.session = sessionValues;  
    }  
    public void setServletContext(ServletContext application) {  
                                            // 
servletContext的setter方法  
        this.application = application;  
    }  
 
    public String execute() {               // 主方法  
        String upload = application.getRealPath("upload");  
                                            // 使用application  
        request.getRemoteAddr();            // 使用request  
        response.getContentType();          // 使用response  
        session.get("account");             // 使用Session  
        return Action.SUCCESS;  
    }  

}  实现了ServletRequestAware接口便会有一个setServletRequest()方法获取request对象。实现了ServletResponseAware接口便会有一个setServletResponse()方法获取response对象。不同的是SessionAware接口的setter方法是setSession()方法的参数是Map类型。该Map代表Session内存储的各种数据。

Aware接口其实是一种拦截器,拦截器代码会在执行Action之前执行,将相关的Servlet对象设置进来

Spring aware相关接口

最新文章

  1. java基础知识(二)字符串处理
  2. VBA Excel 对比两列数据
  3. 【python】实践中的总结——列表『持续更新中』
  4. PBcR - 纠错及组装算法
  5. 转:电子取证中AVI文件的文件雕复
  6. codeforces #Round354-div2-D(BFS)
  7. FireBug 调试JS入门
  8. php Laravel 框架 介绍及安装
  9. jemalloc/jemalloc.h: No such file or directory
  10. HDU4681 String(dp)
  11. MongoDB C++ 2.4.5 driver 编译安装问题
  12. Linux开发工具之gcc
  13. nisi 脚本示例
  14. 基于C++11的线程池,简洁且可以带任意多的参数
  15. 微信小程序-滚动消息通知效果
  16. Java正则表达式语法
  17. [转]【安卓笔记】AsyncTask源码剖析
  18. Windows下安装Python3和Django
  19. [Project] Simulate HTTP Post Request to obtain data from Web Page by using Python Scrapy Framework
  20. [leetcode]23. Merge k Sorted Lists归并k个有序链表

热门文章

  1. 在窗体中把DataGridView中的数据导出Excel
  2. c++ 中一个类或者一个对象所占的字节数
  3. 在64位WindowsServer2012R2中安装Oracle10g第二版(10.2.0.4.0)-20160106
  4. Deutsch lernen (09)
  5. Java_Reflect反射
  6. scrapy爬虫--10分钟入门
  7. Python 切片 day3
  8. eas之辅助编辑功能
  9. code runner运行终端的目录设置
  10. 宏、预编译(day12)