Response
Response 的使用
标签: Java 方法
Response:
1.Response即ServletResponse,继承自HttpServletResponse
ServletResponse-->HttpServletResponse;
2.Response代表响应,浏览器中的所用响应信息都由ServletResponse来进行操作,响应头、状态码、空格行、实体内容等。
3.利用Response输出内容到浏览器,代码如下:
OutputStream out=response.getOutputStream();
response.setHeader("Content-type", "text/html;charset=utf-8");
out.write("中华人民共和国".getBytes("utf-8"));
//以上为Response以字节流的形式输出到浏览器客户端。
response.setContentType("text/html;charset=utf-8");//一行代码解决乱码问题
Writer writer=response.getWriter();
writer.write("我是一个程序员");
//以上代码是以字符串的形式将内容输入到客户端浏览器上的。
//需要注意的是编码的转换问题,以上代码有标注,以及getOutputStream()和getWriter()方法冲突,使用了其中一个之后就不能使用另一个。
4.利用Response头来设置Content-Disposition头来实现文件的下载,设置响应头为:response.setHeader("Content-Disposition","attchment:filename=xxx.xxx");
利用流将文件读出来,然后在通过Response获取响应流输出,如果文件名为中文一定要对响应流进行编码,编码一定为:"utf-8";
代码如下:
response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode("中文.xxx","utf-8"));
//设置响应头,然后通过URLEncoder进行编码转换
InputStream in = new FileInputStream(this.getServletContext().getRealPath("1.jpg"));
OutputStream out = response.getOutputStream();
//设置输入输出流;
byte[] temp = new byte[1024];
int i = 0;
while((i=in.read(temp))!=-1){
out.write(temp,0,i);
}
in.close();
//利用流将文件读出,最后关闭输入流;输出流在Servlet结束后自动关闭,这里不用写out.close();
5.利用response设置页面自动刷新:
refresh的响应头设置格式为:setHeader("Refresh","1");或者是set("Refresh","3;url=/LearnServlet/index.jsp")
具体代码如下:`
/*
response.setHeader("Refresh","1");
Date date=new Date();
response.getWriter().write(date.toLocaleString());
*/
response.setHeader("Content-type","text/html;charset=utf-8");
response.setHeader("Refresh","3;/LearnServlet/index.jsp");
response.getWriter().write("页面将会在3秒后回到主页!");
OK,需要注意的是,在未加注释的代码的第一行添加了设置编码的响应头,这个一定要在第一行设置不然会出现乱码。
6.利用Response设置浏览器是否缓存,设置响应头中的:expires、Content-Cache、Pragma,其中每个响应头都能设置是否缓存,但是由于历史原因和浏览器的不同,我们统一设置3个响应头来实现浏览器是否缓存;
具体代码实现如下:
注意:设置Cache响应头控制浏览器缓存是否为空来实现时间的自动刷新
response.setDateHeader("Expirse", -1);
response.setHeader("Cache-control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setHeader("Refresh", "1");
Date date=new Date();
response.getWriter().write(date.toLocaleString());
注意:通过设置Cache响应头来控制图片的缓存期限,其中系统当前时间+1000l360024*30 中使用的Long型的变量类型,当变量类型设置为int型时,就会报错,数值溢出。
response.setDateHeader("Expires",System.currentTimeMillis()+1000l*3600*24*30);
InputStream in = new FileInputStream(this.getServletContext().getRealPath("2.jpg"));
OutputStream out = response.getOutputStream();
byte[] temp = new byte[1024];
int i = 0;
while((i=in.read(temp))!=-1){
out.write(temp,0,i);
}
in.close();
其中Expirse的值可以设置为0或者-1;
7.Response实现重定向
通过Response设置302状态码和Location响应头来实现重定向,浏览器在收到302状态码的时候会自动寻找Location中的目标地址。
代码:
response.setStatus(302);
response.setHeader("Location","/LearnServlet/index.jsp");
*或者更简洁的代码(更简单):*
response.sendRedirect("/LearnServlet/index.jsp");
由于第一种每次都需要记住状态码和设置响应头,所以我们更推荐使用第二种Response方法来进行重定向。
OK,Response的基本方法就写完了,另外还有验证码的问题,由于用到了Java知识的图形类的一些方法,所以以后用空会写,这里就先将HttpServletResponse中的Response用法给写了。

浙公网安备 33010602011771号