一.ServletContext

ServletContext是什么
ServletContext是一个web应用的上下文对象,封装着全局信息的存储空间,所有servlet共享这个唯一的对象。
ServletContext生命周期
ServletContext在web应用加载时被创建,在web应用卸载时销毁。
ServletContext获取方法

ServletContext sc = request.getSession().getServletContext();
//或者使用 this 指代servlet对象
//ServletContext sc = this.getServletContext();

ServletContext的用处

  1. 所有servlet共享,可以存放一些重要,共享的信息。
    sc.setAttribute("name", "太谷饼");在别的servlet取出。
  2. 读取web.xml中的全局配置参数
<!-- 全局配置参数,因为不属于任何一个servlet,但是所有的servlet都可以通过servletContext读取这个数据 -->

  <context-param>

         <param-name>param1</param-name>

         <param-value>value1</param-value>

  </context-param>

   <context-param>

         <param-name>param2</param-name>

         <param-value>value2</param-value>

  </context-param>
sc.getInitParameter("param1");//value1

3.获取web应用中任何资源的绝对路径

String path = sc.getRealPath("/WEB-INF/classes/p1.properties");
上面这种方式在spring boot中不适用,因为spring boot内嵌tomcat,所以无法得到路径,
可以使用下面这种方法,这种方法得到的是resources的绝对路径。
String realPath = ResourceUtils.getURL("classpath:").getPath().substring(1);
//转为字节流
InputStream is = getResourceAsStream("/WEB-INF/classes/p1.properties")

二.HttpServletRequest

HttpServletRequest是什么
HttpServletRequest是ServletRequest的子接口,tomcat在接受到web请求后,tomcat将Http请求的信息封装成request对象。
HttpServletRequest的生命周期
一次请求访问时创建,响应结束后销毁。
HttpServletRequest的用处

request获得行的内容
	request.getMethod()
	request.getRequestURI()
	request.getContextPath()
	request.getRemoteAddr()
request获得头的内容
	request.getHeader(name)
request获得体(请求参数)
	String request.getParameter(name)
	Map<String,String[]> request.getParameterMap();
	String[] request.getParameterValues(name);
	注意:客户端发送的参数 到服务器端都是字符串

request转发和域
	request.getRequestDispatcher(转发的地址).forward(req,resp);
	request.setAttribute(name,value)
	request.getAttribute(name)

几个概念
假定你的web application 名称为news,你在浏览器中输入请求路径:
http://localhost:8080/news/main/list.jsp 则执行下面向行代码后打印出如下结果:
1、 System.out.println(request.getContextPath());
打印结果:/news
2、System.out.println(request.getServletPath());
打印结果:/main/list.jsp
3、 System.out.println(request.getRequestURI());
打印结果:/news/main/list.jsp
4、 System.out.println(request.getRealPath("/"));
打印结果: F:\Tomcat 6.0\webapps\news\test

三.HttpRequestResponse

HttpRequestResponse是什么
tomcat将web对请求的响应信息封装在Response,write方法是将内容写到response的缓冲区内。
HttpRequestResponse生命周期
HttpRequestResponse和HttpRequestRequest的生命周期一样,请求时创建,响应完毕后销毁。
HttpRequestResponse的作用
response内部封装了http响应的各种信息

//设置响应状态
response.setStatus(int sc)
//设置响应头
response.addHeader(String name, String value) 
//得到字符流,字节流将内容写进响应体
PrintWriter getWriter() = response.getWriter();
OutputStream os = getOutputStream();
//设置内容类型
response.setContentType("xxx");

四.Cookie

由于Http协议是无状态的,服务端无法知道当前访问的客户端是谁,所以需要会话技术帮助服务器记住客户端状态。

会话:从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。

会话技术包括Cookie和Session
Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除 cookie
Session:将数据存储到服务器端,安全性相对好,增加服务器的压力,session是基于cookie实现的

cookie的用法

//服务端向客户端发送cookie
Cookie cookie = new Cookie(String cookieName,String cookieValue);//不能存中文
cookie.setMaxAge(int seconds); //不设置持久化时间的话,浏览器关闭就销毁
cookie.setPath(String path);//访问路径下的任何资源都携带cookie
response.addCookie(Cookie cookie);//服务端向客户端发送cookie,若是要删除cookie则覆盖一个同名的持久化时间为0的cookie

//服务端接收客户端cookie
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
		if(cookie.getName().equal(cookieName)){
			String cookieValue = cookie.getValue();
		}
}

五.Session

服务端为每个客户端都创建一块内存空间存储客户数据,但客户端需要携带JSESSIONID去寻找自己的空间。Session借助Cookie去存储这个ID。

//获得session,如果不存在则创建,已存在则直接返回
HttpSession session = request.getSession();

//域对象存取数据
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);

session生命周期
第一次request.getSession时创建,默认过期时间30分钟,可以在web.xml中设置。
销毁:服务器非正常关闭,session过期时间到,手动销毁session.invalidate()