31-Servlet(1)-Response
response参数
javax.servlet.http.HttpServletResponse
response是代表HTTP响应信息的对象。response一般用来把数据响应给浏览器
常用方法
返回值 | 方法 | 说明 |
---|---|---|
void |
setCharacterEncoding(String encoding) |
设置字符编码类型为encoding |
PrintWriter |
getWriter() |
返回一个输出字符流 |
int |
getCharacterEncoding() |
取得字符编码类型 |
void |
sendRedirect() |
重定向客户的请求到指定页面 |
void |
addCookie(Cookie cookie) |
给客户端添加一个Cookie对象,以保存客户端的信息 |
void |
addDateHeader(String name,long value) |
添加一个日期类型的HTTP首部信息,覆盖同名的HTTP首部 |
void |
addIntHeader(String name,int value) |
添加一个整型的HTTP首部,并覆盖旧的HTTP首部 |
String |
encodeRedirectURL(String url) |
对使用的URL进行编译 |
String |
encodeURL(String url) |
封装URL并返回到客户端,实现URL重写 |
void |
flushBuffer() |
清空缓冲区 |
String |
getContentType() |
取得MIME类型 |
ServletOutputStream |
getOutputStream() |
返回一个二进制输出字节流 |
void |
reset() |
重设response对象 |
void |
resetBuffer() |
重设缓冲区 |
void |
sendError(int sc) |
向客户端发送HTTP状态码的出错信息 |
void |
setBufferSize(int size) |
设置缓冲区的大小为size |
void |
setContentLength(int length) |
设置响应数据的大小为size |
void |
setContentType(String type) |
设置MIME类型 |
void |
setDateHeader(String s1,long l) |
设置日期类型的HTPP首部信息 |
void |
setLocale(Locale locale) |
设置本地化为locale |
void |
setStatus(int status) |
设置状态码为status(200, 500, 404等) |
由于服务器在通过response获取的流发送数据时,默认使用iso8859-1编码,而这个编码中没有中文字符,所以在通过response获取的流发送中文数据时,会出现乱码问题。
解决方法: response.setContentType("text/html;charset=utf-8");
重定向
当浏览器向服务器发请求访问某一个资源A,资源A在响应时通知浏览器需要再进一步请求才能获取到对应的资源,浏览器再次发请求访问服务器中的资源B,最终由资源B响应浏览器要获取的资源,这个过程叫做重定向。
重定向代码
response.sendRedirect(所重定向到资源的URL地址);
如果主机名相同, URL可以省略主机名
也可以写相对路径, 例如:
从localhost:8080/a1/b1
转发到localhost:8080/a2/b2
url可以写: `../a2/b2`
重定向图解
重定向特点
- 重定向是两次请求、两次响应
- 重定向前后,浏览器的地址栏地址会发生变化。(因为两次请求都是通过浏览器发起,浏览器知道这个跳转的过程,因此地址栏地址会变化)
- 重定向前后的request对象不是同一个(因为重定向是两次请求,服务器会根据两次请求创建两个不同的request对象,request对象不是同一个,也就不能在重定向时通过request带数据到目的地。)
- 重定向前后的两个资源可以是来自不同的web应用,甚至可以是来自不同的服务器。(进行跳转的两个资源之间没有限制)
什么时候用转发forward
?什么时候用重定向redirect
?
- 如果希望跳转前后地址栏地址不会发生变化, 只能使用转发; 如果希望跳转前后地址栏地址会发生变化, 只能使用重定向
- 如果希望在跳转前后, 能够通过request对象带数据到目的地, 只能使用转发
- 如果仅仅是做一个跳转,没有其他要求,此时推荐使用转发(转发是一次请求,一次响应,可以减少访问服务器的次数,降低服务器的压力)