服务器每次收到请求时,都会为这个请求开辟一个新的线程。
服务器会把客户端的请求数据封装到这个request对象中,request是请求数据的载体!
服务器还会创建response对象,这个对象和客户端连接在一起,他可以用来向客户端发送相应
1.response:其类型为HttpServletResponse
ServletResponse-->与协议无关的类型
HttpServletResponse-->与http协议有关的类型
** 状态码:200表示成功,302表示重定向,404表示客户端错,500表示服务器端错
方法
sendError(int sc) 发送错误的状态码
sendError(int sc, String msg) 也是发送错误状态码,同时带一个错误信息
sendStatus(int sc) 发送成功的状态码,也可以发送302
** 头就是一个键值对,可能会存在一个头(一个名字,一个值),也可能会存在一个头(一个名字,多个值)
setHeader(String name, String value):适用于单值的响应头,例如 response.addHeader("aaa", "AAA"); (重要)
addHeader(String name, String value):适用于多值的响应头
response.addHeader("aaa", "A");
response.addHeader("aaa", "AA");
response.addHeader("aaa", "AAA");
setIntHeader(String name, int value):适用于单值的int类型的头
addIntHeader(String name, int value):适用于多值的int类型的头
setDataHeader(String name, long value):适用于单值的毫秒类型的头
addDataHeader(String name, long value):适用于多值的毫秒类型的头
2.重定向
/**
* 重定向
* 1.设置location
* 2.发送302状态码
*/
response.setHeader("Location", "/Response/CServlet");
response.sendError(302);
重定向分为两步,设置location,发送302,Java提供了一个快捷方式,完成重定向
--sendRedirect(String location) 方法
3.定时刷新
5秒后跳转到FServlet页面
response.setHeader("Refresh", "5;URL = /Response/FServlet");
//Refresh是定时刷新响应头,5是5秒,URL是跳转页面
4.禁用浏览器缓存
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragma", "no-cache");
response.setDateHeader("expires", -1);
5.相应体:通常是HTML或图片
- response的两个流
(1)ServletOutputStream:用来向客户端发送字节数据 ServletOutputStream out = response.getOutputStream();
(2)PrintWriter,用来向客户端发送字符数据!需要设置编码 PrintWriter writer = response.getWriter();
(3)两个流不能同时使用
1.在request中,请求协议中的数据都可以通过request对象获取
请求行
请求头
空行
请求体(GET没体)
2.获取常用信息
获取客户端IP: request.getRemoteAddr();
获取请求方式:request.getMethod(),可能是POST可能是GET
3.获取HTTP请求头
String getHeader(String name) 适用于单值请求头
int getIntHeader(String name) 适用于单值int类型的请求头
long getDateHeader(String name) 适用于单值毫秒的请求头
Enumeration