[[toc]]

第一节 获取原生Servlet API对象

1、原生 Servlet API

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • ServletContext

原生:最原始的、本真的,没有经过任何的加工、包装和处理。
API:直接翻译过来是应用程序接口的意思。对我们来说,提到 API 这个词的时候,通常指的是在某个特定的领域,已经封装好可以直接使用的一套技术体系。很多时候,特定领域的技术规范都是对外暴露一组接口作为这个领域的技术标准,然后又在这个标准下有具体实现。

2、可以直接拿到的对象

①在 IDEA 中创建代码模板

使用快捷键调出代码模板能够极大的提升开发效率
第一节 获取原生Servlet API对象 - 图1

②测试获取三个可以直接得到的对象

[1]创建超链接

第一节 获取原生Servlet API对象 - 图2

可以直接得到的三个

[2]声明 handler 方法

@RequestMapping(“/original/api/direct”)
public String getOriginalAPIDirect(

  1. // 有需要使用的 Servlet API 直接在形参位置声明即可。<br /> // 需要使用就写上,不用就不写,开发体验很好,这里给 SpringMVC 点赞<br /> HttpServletRequest request,<br /> HttpServletResponse response,<br /> HttpSession session<br />) {
  2. logger.debug(request.toString());<br /> logger.debug(response.toString());<br /> logger.debug(session.toString());
  3. return "target";<br />}

ServletContext对象没法通过形参声明的方式直接获取,如果非要在形参位置声明ServletContext类型的变量,那么会抛出下面的异常:
java.lang.IllegalStateException: No primary or single public constructor found for interface javax.servlet.ServletContext - and no default constructor found either

3、获取ServletContext

①方法一:通过HttpSession获取

@RequestMapping(“/original/servlet/context/first/way”)
public String originalServletContextFirstWay(HttpSession session) {

// 获取ServletContext对象的方法一:通过HttpSession对象获取<br />    ServletContext servletContext = session.getServletContext();<br />    logger.debug(servletContext.toString());

return "target";<br />}

②方法二:通过 IOC 容器注入

// 获取ServletContext对象的方法二:从 IOC 容器中直接注入
@Autowired
private ServletContext servletContext;

@RequestMapping(“/original/servlet/context/second/way”)
public String originalServletContextSecondWay() {

logger.debug(this.servletContext.toString());

return "target";<br />}

4、原生对象和 IOC 容器关系

第一节 获取原生Servlet API对象 - 图3

回目录 下一节