Servlet常用对象
一.HttpServletRequest对象
1.介绍
HttpServletRequest对象:用来接收客户端发送过来的请求信息,例如:请求参数,发送的消息头信息等都属于客户端发来的信息。
2.常用方法
1.常用方法
getRequestURL() 获取客户端发出请求时的完整URL
getRequestURL() 获取请求行中的资源名称部分(项目名称开始)
getMethod() 获取客户端的请求方式
getContextPath() 获取web项目名称
getProtocol() 获取HTTP版本号
getQueryString() 获取请求行中的参数部分
2.获取请求头
getHeader(String) 获取单个请求头内容
Enumeration getHeaderNames() 获取所有的请求头名称集合
3.获取客户端请求参数
getParameter(name) 获取指定名称的参数
getParameterValues(String name) 获取指定名称参数的所有值
getParameterNames() 获取一个包含请求消息中的所有参数名的Enumeration对象
getParameterMap() 获取一个保存了请求信息中的所有参数名称和值的Map对象
3. 请求乱码解决
1.由于现在的request是属于客户端的参数,所以用的客户端中的编码格式,在服务端中解析一定会造成乱码问题,要想解决乱码问题,需要设置request中的编码方式
方式一:(该方式只针对POST有效)
req.setCharacterEncoding("UTF-8");
方式二:
new String(req.getParameter(name).getBytes("ISO-8859-1"));
在Tomcat8起,get方式请求是不会出现乱码问题
4.请求转发
请求转发是一种服务器行为,当客户端请求到达后,服务器进行转发,
此时会将请求对象进行保存,地址栏中的URL不会改变,得到响应后,服务端会将响应发送给客户端,从始至终只有一次请求发出
request.getRequestDispatcher().forward();
5.request请求作用域对象
该对象可以在一次请求中存储数据或传递数据,作用范围:一次请求中有效。
request.setAttribute():设置域对象内容
request.getAttribute(String name):获取域对象内容;
request.removeAttribute(String name): 删除域对象内容。
二.HttpServletResponse对象
1.介绍
Web服务器收到客户端的请求,会针对每个请求,做出不同的响应,req是代表请求对象,response是代表响应对象
HttpServletResponse 的主要功能用于服务器对客户端的请求进行响应,将 Web 服 务器处理后的结果返回给客户端。 service()方法中形参接收的是 HttpServletResponse 接 口的实例化对象,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方 法。
2.常用方法
getWriter() 获取输出字符流
getOutputStream 获取输出字节流
setContentType(String ContentType) 设置响应类型
3.重定向
重定向是客户端发送请求给服务端,服务端接收到请求后做出响应给客户端,客户端接收地址后,在根据该地址向服务端发送第二次请求,并响应。
重定向的数据是不能共享的,地址栏发生改变,地址可以访问其他外部资源,请求转发的数据是可以共享的,地址栏不发生改变,只可以访问本地资源。
三.Cookie对象
1.Cookie的创建和发送
通过 new Cookie(“key”,”value”);来创建一个 Cookie 对象,要想将 Cookie 随 响应发送到客户端,需要先添加到 response 对象中,resp.addCookie(cookie);此时该 cookie 对象则随着响应发送至了客户端。在浏览器上可以看见。
//创建一个Cookie
Cookie cookie = new Cookie("name","李某人");
//在响应给浏览器
resp.addCookie(cookie);
2.Cookie获取
在服务器端只提供了一个 getCookies()的方法用来获取客户端回传的所有 cookie 组成的一个数组,如果需要获取单个 cookie 则需要通过遍历,getName()获取 Cookie 的名称,getValue()获取 Cookie 的值。
//获取到所有的Cookie
Cookie[] cookies = req.getCookies();
//遍历打印
for (Cookie cookie2 : cookies) {
System.out.println("键:"+cookie2.getName()+" 值:"+cookie2.getValue());
}
3.Cookie时间设定
通过 setMaxAge(int time);方法设定 cookie 的最大有 效时间,以秒为单位。大于 0 的整数,表示存储的秒数; 若为负数,则表示不存储该 cookie; 若为 0,则删 除该 cookie。
4.Cookie的覆盖
如果服务器发送的Cookie是个重复Cookie,那么会覆盖原有的Cookie的值。