lHTTP的常用请求头
Range: 指示服务器只传输一部分Web资源。这个头可以用来实现断点续传功能。
Range字段可以通过三种格式设置要传输的字节范围:
1.Range: bytes =1000-2000 // 传输范围从1000到2000字节
2.Range: bytes= 1000- //传输Web资源中第1000个字节以后的所有内容
3.Range: bytes = 1000 //传输最后1000个字节
Accept-Ranges : 这个字段说明Web服务器时否支持Range 支持,支持则返回:Accept-Range: bytes, 不支持返回:Accept-Ranges:none.
Content-Range: 指定了返回的Web资源的字节范围,
例子:Content-Range: 1000-3000/5000 // 回送1000-3000中间的字节,总共5000字节
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException ,IOException{
//test1(response);
//test2(response);
//test3(response);
//test4(response);
test5(response);
}
// 用location和302实现请求重定向
public void test1(HttpServletResponse response){
response.setStatus(302);
response.setHeader("location","/dayo4/1.html");
}
// 压缩数据输出
public void test2(HttpServletResponse response){
String data = "dddddddddddddddddddddddddddddddddddddddddddddd";
System.out.println("原始数据大小:"+data.getBytes().length);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
// 压缩流
GZIPOutputStream gout = new GZIPOutputStream(bout);// 压缩流gout.write(data.getBytes());
// 当用装饰流(gout)来包装一个底层流(bout)时,会有一个缓冲区,如果数据太少,缓冲区不会被装满也//就不会被自动刷新。所以要手动刷新,让数据进入到底层流中
gout.close();//或者gout.flush();
byte gzip[]= bout.toByteArray();// 得到压缩后的数据
// 通知浏览器数据采用压缩格式
response.setHeader("Content-Encoding","gzip");
response.setHeader("Content-Length",gzip.length+"");
response.getOutputStream().write(gzip);
}
// content-type通知浏览器以哪种数据类型打开数据
public void test3(HttpServletResponse response){
response.setHeader("content-type","image/bmp"); // 表示输出的是bmp格式图片数据,
//在Tomcat,conf目录下的web.xml文件中查找各种数据对应的content-type类型(.jpg对应 "image/jpeg"
// 获取图片文件读取流
InputStream in = this.getServletContext().getResourceAsStream("/1.bmp");
int len = 0;
byte buffer[] = new byte[1024];
OutputStream out = response.getOutputStream();
while( (len = in.read(buffer) )> 0 ){
out.write(buffer,0,len);
}
}
// 定时刷新
public void test4(HttpServletResponse response){
response.setHeader("refresh","3"); // 每隔3秒钟刷新一次页面: 如股票页面会自动动态刷新,
// response.setHeader("refresh","3;url='http://www.sina.com'"); // 3秒钟后跳转到指定页面;如注册完成后,会出现5秒后自动跳转到首页
String data = "aaaa";
response.getOutputStream().write(data.getBytes() );
}
/ 下载方式打开数据
public void test5(HttpServletResponse response){
/*
如果下载文件是中文,则文件名需要经过url编码
String filename= "赏花.jpg";
response.setHeader("content-disposition","attachment;filename="+URLEncoder.encod(filename,"UTF-8"));
*/
response.setHeader("content-disposition","attachment:filename=3.jpg");
// 获取图片文件读取流
InputStream in = this.getServletContext().getResourceAsStream("/3.jpg");
int len = 0;
byte buffer[] = new byte[1024];
OutputStream out = response.getOutputStream();
while( (len = in.read(buffer) )> 0 ){
out.write(buffer,0,len);
}
}
// 断点续传
public static void main(String[] args) throws Exception{
URL url = new URL("http://localhost:8080/day05/a.txt");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestProperty("Range","bytes=5-");//从第5个字节开始传送
InputStream in = conn.getInputStream();
int len =0;
byte buffer[] = new byte[1024];
FileOutputStream out = new FileOutputStream("c:\\a.txt",true); // 以追加方式打开文件
while( (len = in.read(buffer)) > 0 )
{
out.write(buffer,0,len);
}
in.close();
out.close();
}