请求的响应流程
1.response概述
response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使用response对象可以完成对客户端的响应工作。
response对象的功能分为以下四种:
设置响应头信息;
发送状态码;
设置响应正文;
重定向;
1.response响应状态码
setStatus(int sc)
:一般用来发送非错误的状态码。sendError(int sc)
:一般用来发送错误的状态码sendError(int sc, String msg)
:同上,但可以带错误信息
2.response发送响应头:
setHeader(String header, String value)
:设置响应头;addHeader(String header, String value)
:添加响应头;适合一头多值。setIntHeader(String header, int value)
:专门为int类型值由准备的!\addIntHeader(String header, int value)
setDateHeader(String header, long value)
:专门为时间毫秒值类型准备的!addDateHeader(String header, long value)
3.response发送响应体:
PrintWriter getWriter()
:用来向客户端发送文本数据(html就是文本数据);ServletOutputStream getOutputStream()
:用来向客户端发送字节数据(图片、mp3等);同一个response对象,不能即使用getOut()和getOutputStream();
缓冲区
response.getWriter()是PrintWriter类型,所以它有缓冲区,缓冲区的默认大小为8KB。也就是说,在响应数据没有输出8KB之前,数据都是存放在缓冲区中,而不会立刻发送到客户端。当Servlet执行结束后,服务器才会去刷新流,使缓冲区中的数据发送到客户端。
如果希望响应数据马上发送给客户端:
向流中写入大于8KB的数据;
调用response.flushBuffer()方法来手动刷新缓冲区;
* 4.响应编码问题*
response.setCharaceterEncoding(“utf-8”)
:让tomcat把数据转换成utf-8再发;response.setHeader(“Content-Type”, “text/html;chartset=utf-8”)
:让tomcat把数据转换成utf-8再发;
添加Content-Type头,即通知浏览器我们发送的是什么编码的字符!
设置ContentType响应头的便捷方法:
response.setContentType(“text/html;charset=utf-8”)
等同与response.setHeader(“Content-Type”, “text/html;charset=utf-8”)
;
5.重定向的便捷方法:
原始的重定向:
设置状态码为302:response.setStatus(302);
设置Location头:response.setHeader(“Location”, “url”);
便捷方法:
response.sendRedirect(“url”);
2.request概述
request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。
request的功能可以分为以下几种:
封装了请求头数据;
封装了请求正文数据,如果是GET请求,那么就没有正文;
request是一个域对象,可以把它当成Map来添加获取数据;
request提供了请求转发和请求包含功能。
1.获取请求参数
- 无论是GET还是POST都能获取:String getParameter(String 参数的名称)
2.request的获取请求方式和客户端IP
String getMethod():获取请求方式;
String getRemoteAddr():获取客户端的IP地址。
3.request获取请求参数
String getParameter(String paramName):通过参数名获取参数值(适用与单值参数)
String[] getParameterValues(String paramName):通过参数名获取参数值(适用与多值参数)
Enumeration getParameterNames():获取所有参数的名称
Map