Response_输出数据,实现文件下载,定时刷新页面,是否缓存,重定向,实现验证码

1.Response_输出数据

1、Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象.

ServletResponse -- 通用的response提供了一个响应应该具有最基本的属性和方法|-HttpServletResponse -- 在ServletResponse的基础上针对于HTTP协议增加了很多强化的属性和方法

2、HttpServletResponse对象封装了向客户端发送响应状态码、响应头、实体数据的方法

案例一:向浏览器输出一段数据

*response.setContentType("text/html;charset=utf-8");

同时设定服务器的字符集编码,浏览器所用的字符集编码。

1、用getOutputStream() 获得一个ServletOutputStream 字节流输出数据

按字节输出数据,如果输出的数据是表示一段字符的字节数据,则一定要指定浏览器以什么码表解码,浏览器默认用平台码表打开。

response.setHeader("content-type", "text/html;charset=utf-8"); //指定浏览器用utf-8解码
response.getOutputStream().write("中国".getBytes("utf-8"));  //设置服务器用utf-8编码

 

2、用getWriter()获得一个PrintWriter字符输出流输出数据

response对象默认以ISO8859-1将需要输出到浏览器的字符进行编码,如果输出的字符在IOS8859-1中不存在,就会导致乱码问题。可以使用setCharacterEncoding(String charset)方法设置编码用的字符集

response.setHeader("content-type", "text/html;charset=utf-8"); //指定浏览器用utf-8解码//response.setCharacterEncoding("utf-8"); //设置服务器用utf-8编码
response.getWriter().write("中国");
//服务器很智能,setHeader这个头里设置了utf-8,服务器也会按utf-8编码,发给浏览器。

2.response实现文件下载

默认请求头和响应头都不能包含中文,包含的字符要属于ISO8859-1里存在的字符,乱码。

url编码方式  -百分号编码

利用这种算法将ascii码中没有的字符转换为ascii码中的有的字符表示的形式

//设置下载文件的名称,设置为“美女.jpg”
        response.setHeader("Content-Disposition",   
                      "attachment;filename="+URLEncoder.encode("美女.jpg", "utf-8"));
FileInputStream fis = new     
                       FileInputStream(this.getServletContext().getRealPath("1.jpg"));
OutputStream os = response.getOutputStream();
byte[] bs = new byte[1024];
int i =0;
while((i=fis.read(bs))!=-1){
os.write(bs,0,i);
}
fis.close();

3.response实现定时刷新页面

1、利用Response设置响应头refresh可以实现页面的定时刷新功能。

response.getWriter().write(new Date().toLocaleString());
response.setHeader("Refresh", "2"); //本页刷新
 
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("恭喜注册成功,2秒回到主页"); response.setHeader("Refresh", "2;url=/day04/index.jsp");

2、用<meta http-equiv= "" content="">可以模拟头功能,实现页面刷新,虽然响应头里没有Refresh头

<html>
  <head>
     <meta http-equiv="Refresh" content="2;url=/day04/index.jsp"/>
  </head>
  <body>
        注册成功啦...2秒回到主页 <br>
  </body>
</html>

4.控制浏览器是否缓存资源

控制浏览器不要缓存当前资源:

response.setIntHeader("Expires",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");

告诉浏览器缓存这个页面一个月时间:

response.setDateHeader("Expires", System.currentTimeMillis()+1000L*3600*24*30); 
//以毫秒为单位,从1970年1月1日0时到当前的毫秒值+一个月的毫秒值

5.请求重定向_response注意事项

在大部分情况下请求重定向和转发的效果是差不多的,这时候我们推荐使用转发,以减少对服务器的访问。

而在某些情况下是需要使用重定向的,目的往往是为了改变浏览器地址栏里的地址(如登录成功后转到主页),和更改刷新操作(如加入商品到购物车后转到购物车页面的操作)

//重定向
//response.setStatus(302);
//response.setHeader("Location", "/day04/index.jsp");
或
response.sendRedirect("/day04/index.jsp");

response生成响应注意事项

1、同一个response,*getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。要注意转发的情况,是同一个请求和响应,只能使用getOutputStream和getWriter其中一种方法。

这两个流,缓存的数据会在response的缓冲区里,缓冲区已经定义为字节数据,就不要随便改为字符数据了。

//如果在getOutoutStream()后希望使用Writer输出,可以这么做:
ServletOutputStream out = response.getOutputStream();
//编码要和response.setCharacterEncoding()一致
PrintWriter writer = new PrinterWriter(new OutputStreamWriter(out,”utf-8”));
//上述使用方式和getWriter()没有区别

2、*response中获取的输出流,在service方法结束服务器会帮我们关闭,所以一般不要自己在Servlet中关闭这个流.

6.respons_实现验证码

ValiImg.java

//告诉浏览器不用缓存该图片
response.setDateHeader("Expires",-1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma","no-cache" );
//随机数
private Random r = new Random();
private int randNum(int begin,int end){
//nextInt(end-begin) 返回0到(end-begin)之间的随机数字
return r.nextInt(end-begin)+begin;
}

regist.html

    <script type="text/javascript">
    //地址变了就会重新加载图片
     function changeImg(img){
      img.src="/day04/servlet/ValiImg?time="+new Date().getTime();
     }  
    </script>
时间: 2024-10-17 21:45:17

Response_输出数据,实现文件下载,定时刷新页面,是否缓存,重定向,实现验证码的相关文章

Angular 定时器$timeout和$interval关于定时刷新页面和发送请求的用法

项目中有用到定时器定时刷新页面的数据,在网上查看了一些资料,整理了一下,备忘. $timeout 用法如下:$timeout(fn,[delay],[invokeApply]); fn:一个将被延迟执行的函数. delay:延迟的时间(毫秒). invokeApply:如果设置为false,则跳过脏值检测,否则将调用$apply. 方法:cancel(promise); promise:$timeout函数的返回值. 具体使用:在项目中用到的其中一处是键入字符然后自动发送请求查询,如果每键入一个

JSP简单练习-定时刷新页面

<%@ page contentType="text/html; charset=gb2312" %> <%@ page import="java.util.Date" %> <html> <head> <title>定时刷新页面</title> </head> <body> <% // 设置刷新页面的时间,每隔1秒钟刷新一次 response.setHeader(

response常见应用、response细节、输出随机图片、定时刷新网页

response常见应用 向客户端输出中文数据 分别以OutputStream和PrintWriter输出 多学一招:使用HTML语言里面的<meta>标签来控制浏览器行为 思考:用OutputStream输出1,为什么用户看到的不是1? 文件下载和中文文件的下载 输出随机图片 package com.hbsi.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java

http-equiv=&quot;Refresh&quot; 实现定时刷新页面

***.html自动跳转文件代码如下: <HTML> <HEAD><META http-equiv="Refresh" content="5; url=******.htm"> <META http-equiv="content-type" content='text/html; charset=UTF-8'> <script language="JavaScript" s

JS定时刷新页面及跳转页面

Javascript 返回上一页1. Javascript 返回上一页 history.go(-1), 返回两个页面: history.go(-2); 2. history.back(). 3. window.history.forward()返回下一页 4. window.history.go(返回第几页,也可以使用访问过的URL) 例: <a href="javascript:history.go(-1);">向上一页</a> response.Write(

三、vue如何配置路由 、获取路由的参数、部分刷新页面、缓存页面

1.路由配置:所有的启动文件都在最初始的main.js文件里面,这个文件中首先需要引入: 2.路由文件配置说明: 3.如何获取页面url的参数? this.$route.query 4.页面之间之间的跳转? 5.返回历史记录页面 6.在项目中遇到的问题: 如何做到页面的部分刷新,如果做到部分页面进入的时候需要刷新,部分页面需要缓存? 首选需要了解keep-alive,在路由配置中增加如下代码: { "path": "/test", "component&q

Ajax实现定时刷新页面

function deleteValue(){ var refresh = function() { $.ajax({ type:'post', url:'/Application/index', timeout:30000, data:{time:"3"}, dataType:'html', success:function(data){ if(data.state==200){ alert("nihao"); }else{ alert(data.message)

PHP定时刷新当前页面

PHP中定时刷新页面的功能如何实现! 1分钟刷新一次页面! 这一般不用php实现,用客户端的脚本就可以,甚至用html自带的就行. html实现: <meta http-equiv="refresh" content="60"> echo "<META HTTP-EQUIV=REFRESH CONTENT='60;URL=index.php'>"; php刷新当前页面 echo "<script langu

刷新页面

定时刷新页面,最常见的有两种实现方式:一种是通过JavaScript+HTMLDOM,另一种则是通过meta标签来实现. 1.JavaScript+HTMLDOM,示例代码如下: 1 2 3 4 functionrefresh(seconds){ setTimeout("self.location.reload()",seconds*1000); } refresh(600);//调用方法启动定时刷新,数值单位:秒. 2.通过meta标签来实现(在页面中添加meta标签refresh也