字节流可以写任何数据,字符流只能写字符数据
getOutputStream字节流,getWriter字符流
1、response的outputStream输出中文问题
程序以什么码表输出了,程序就一定要控制浏览器以什么编码打开:
response.setHeader("Content-type","text/html;charset=UTF-8");
String data = "中国";
OutputStream out = response.getOutputStream();
out.write(data.getBytes("UTF-8");
也可用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("UTF-8");
2、response常见应用
1)向客户端输出中文数据
A.分别以OutputStream和PrintWriter输出
B.使用HTML语言里的<meta>标签来控制浏览器行为
2)文件下载和中文文件的下载
如果下载文件是中文文件,则文件需要经过url编码
3)输出随机图片
4)发送http头,控制浏览器定时刷新网页(REFRESH)
5)发送http头,控制浏览器禁止缓存当前文档内容
3.response实现请求重定向:response.sendRedirect("/day06/index.jsp");
等价于
response.setStatus(302);
response.setHeader("location", "/day06/index.jsp");
所以最好不要使用请求重定向,因为它会导致两次服务器请求,但是平时登录页面,购物这种情况最好使用请求重定向,不用转发的原因是,如果刷新会重新出来之前的页面(例如购物车显示页面,刷新会不停的出来购物车显示页面),重定向就不会出现这个问题,京东使用的是转发。
重定向特点:<1>浏览器会向服务器发送两次,意味着就有2个request\response
<2>用重定向技术,浏览器地址栏会发生变化
<3>用户登录和显示购物车时,通常会用到重定向技术
4、Reponse细节问题
(1)getOutputStream和getWriter()方法分别用于得到输出二进制数据、输出文本数据的ServletOutputStream、Printwriter对象
(2)getOutputStream和getWriter()方法这两个方法互斥,一次请求,调用其中任何一个方法后,不能再调用另一方法,否则会抛异常:java.lang.IllegalStateException:getOutputStream() has already bean...但是使用重定向就不会出现这个问题,因为是两次response请求
(3)
网友评论