HttpServletRequest
1. Servlet基础
生命周期的阶段:初始化、运行、销毁
- 初始化 : 先解析请求已有该Servlet直接使用,没有创建Servlet实例,然后调用init()方法
- 运行:为这个请求创建ServletRequest和ServletResponse对象,他们作为参数传递给 service() 方法
- 销毁: Servlet 对象创建后就一直在,只有服务程序关闭时调用destroy() 方法
web 域的范围: servletContxt > HttpSession > HttpServletRequest
注:一个web应用对应一个ServletContext
2. session
服务器会为每一个用户 创建一个独立的HttpSession, Session有默认的存活时间(30分钟)
HttpSession对象由HttpServletRequest对象的getSession方法获取
常用方法
setAttribute(String name, Object value)
getAttribute(String name)
removeAttribute(String name)
getId()
getServletContext()
3.cookie
Cookie[]对象由HttpServletRequest对象通过getCookies()方法获取
遍历数组,并使用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值
response.addCookie(cookie) //给响应HttpServletResponse添加cookie
4.request常用方法
- 获得客户机信息
- 获取请求头: getHeader、getHeaders、getHeaderNames
- 获取请求参数: getParameter、getParameterValues
5. RequestContextHolder
优雅的在需要用的地方使用HttpServletRequest
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
要理解上面的为何可以这么使用,需要理解两个问题:
- RequestContextHolder为什么能获取到当前的HttpServletRequest:
ThreadLocal的应用
- HttpServletRequest是在什么时候设置到RequestContextHolder
HttpServletRequest是在执行doService方法之前设置的,执行完业务逻辑或者抛出异常时重置RequestContextHolder移除当前的HttpServletRequest