HttpServletResponse对象
Posted c.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpServletResponse对象相关的知识,希望对你有一定的参考价值。
HttpServletResponse对象
- HttpServletResponse对象服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。
response常见应用
向客户端输出中文数据。
分别以OutputStream和PrintWriter输出。文件下载。
生成随机图片。
发送http头,控制浏览器定时刷新网页(REFRESH)。
发送http头,控制浏览器禁止缓存当前文档内容 。
多学一招:使用HTML语言里面的<meta>
标签来控制浏览器行为通过response实现请求重定向。
请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。
应用场景:用户注册。
实现方式
response.sendRedirect()
实现原理:302状态码和location头即可实现重定向
请求重定向的运行流程
response细节
getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。
getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。
Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。
在servlet中用outputStream输出数据的问题,以及输出中文的问题
代码示例:
package response;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//在servlet中用outputStream输出数据的问题,以及输出中文的问题
public class ResponseDemo1 extends HttpServlet {
//在servlet中用outputStream输出中文的问题
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
test1(response);
test2(response);
test3(response);
test4(response);
}
private void test1(HttpServletResponse response) throws IOException,
UnsupportedEncodingException {
response.setHeader("Content-type", "text/html;charset=UTF-8"); //指定浏览器以什么码表打开
//程序以什么码表输出了,程序就一定要控制浏览器以什么码表打开
String data = "中国";
OutputStream out = response.getOutputStream();
out.write(data.getBytes());//写给response//乱码
out.write(data.getBytes("UTF-8"));
}
//用html技术中的meta标签模拟了一个http响应头,来控制浏览器的行为
private void test2(HttpServletResponse response) throws IOException,
UnsupportedEncodingException {
//html: <meta>标签:这个标签可以模拟http响应头
//程序以什么码表输出了,程序就一定要控制浏览器以什么码表打开
String data = "中国";
OutputStream out = response.getOutputStream();
out.write("<meta http-equiv=‘content-type‘ content=‘text/html;charset=UTF-8‘>".getBytes());
//out.write(data.getBytes());//写给response
out.write(data.getBytes("UTF-8"));//乱码
}
private void test3(HttpServletResponse response) throws IOException,
UnsupportedEncodingException {
//注意,下面写错了,浏览器会提示下载
response.setHeader("content-type", "text/html,charset=UTF-8");
//程序以什么码表输出了,程序就一定要控制浏览器以什么码表打开
String data = "中国";
OutputStream out = response.getOutputStream();
//out.write(data.getBytes());//写给response
out.write(data.getBytes("UTF-8"));//乱码
}
private void test4(HttpServletResponse response) throws IOException,
UnsupportedEncodingException {
response.setHeader("Content-type", "text/html;charset=UTF-8");
//程序以什么码表输出了,程序就一定要控制浏览器以什么码表打开
OutputStream out = response.getOutputStream();
//out.write(1);
out.write((1+" ").getBytes());//正常
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
测试test1方法,注释掉其他方法,在浏览器可以看到以下结果:
测试test2方法,注释掉其他方法,在浏览器可以看到以下结果:
测试test3方法,注释掉其他方法,浏览器会提示下载。
测试test4方法,注释掉其他方法,发现out.write((1+” “).getBytes());语句显示正常。
以上是关于HttpServletResponse对象的主要内容,如果未能解决你的问题,请参考以下文章