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对象带数据到目的地, 只能使用转发
 - 如果仅仅是做一个跳转,没有其他要求,此时推荐使用转发(转发是一次请求,一次响应,可以减少访问服务器的次数,降低服务器的压力)
 
                
            
        
浙公网安备 33010602011771号