1、请求相应流程
上面是简易流程图(直接把老师的图放在上面):
首先是客户端(浏览器)向服务器发出请求服务器接收到请求后,
(1)创建request对象:用来存放请求数据,创建response对象:用来向客户端响应的。
(2)调用Servlet的service方法将request和response两个对象作为参数传入。
(3)service方法通过request获取客户端数据,进行操作,然后通过response向客户端响应。
2、response对象概述
类型:javax.servlet.http.HttpServletResponse。客户端每次发出请求,服务器就会创建一个response对象,并传给service方法
response对象的四种功能:
(1)设置相应头
可以使用response对象的setHeader()方法来设置响应头!使用该方法设置的响应头最终会发送给客户端浏览器!
response.setHeader("content-type","text/html;charset=utf-8")
response.setHeader("Refresh","5;URL=http://www.baidu.com") 5秒后自动跳转到百度
(2)设置发送状态码
- response.setContentType("text/html;charset=utf-8"):等同与调用response.setHeader(“content-type”, “text/html;charset=utf-8”);
- response.setCharacterEncoding(“utf-8”):设置字符响应流的字符编码为utf-8;
- response.setStatus(200):设置状态码;
- response.sendError(404, “您要查找的资源不存在”):当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。
(3)设置响应正文
response向客户端响应有两种响应流:字符响应流,字节响应流
(1)PrintWriter out = response.getWriter():获取字符流;
(2)ServletOutputStream out = response.getOutputStream():获取字节流;
在一个请求中不能同时使用这两个流。不然会抛出IllegalStateException异常。
字符编码:
在使用response.getWriter()时需要注意默认字符编码为ISO-8859-1,如果希望设置字符流的字符编码为utf-8,可以 使用 response.setCharaceterEncoding(“utf-8”)来设置。这样可以保证输出给客户端的字符都是使用UTF-8编码的!
但客户端浏览器并不知道响应数据是什么编码的!如果希望通知客户端使用UTF-8来解读响应数据,那么还是使用 response.setContentType("text/html;charset=utf-8")方法比较好,因为这个方法不只会调用response.setCharaceterEncoding(“utf-8”),还会设置content-type响应头,客户端浏览器会使用content-type头来解读响应数据。
(4)重定向
重定向是客户端请求一个地址,但是服务器通知客户端请求另一个地址。(客户端需要请求两次)
请求过程:(1)设置响应码为302,在设置请求地址url:
response.setStatus(302);
response.setHeader("Location", "http://www.baidu.com");
也可以使用response.sendRedirect("http://www.baidu.com");