http响应:
HTTP/1.1 200 OK ---状态行
Server:Microsoft-IIS/6.0
Date:
Content-Length:
Content-Type: -----------------多个消息头
Cache-control: private
--------空行
…html代码
常用状态吗:
-
200 OK
-
302让浏览器转向另个资源(response.setStatus(302),response.setHeader(“Location”,”/servlet/test”)这个呢就是sendRedriect的底层实现);
-
404 找不到资源
-
500 服务器内部错误
Location:http://www.xxx.com[让浏览器重新定位到rul]
Server:apache tomcat[告诉浏览器服务器使用的是tomcat]
Content-Encoding:gzip [使用gzip压缩]
Content-Length: 500 [告诉浏览器发送过去的字节数]
Content-Language:zh-cn [队中文的支持]
Content-Type: text/html;charset=gb3212[文档编码]
Last-Modified: [访问资源的更新时间]
Refresh: 2;url=。。。告诉浏览器过多久 刷新到url]
Content-Disposition:attachment;filename=aaa.zip; [下载资源]
Transfer-Encoding:chunked [校验传输的编码]
Set-Cookie:SS=…
Expires:-1 [指定缓存,如何缓存数据IE]
Cache-Control:no-cache 火狐
Pragma:no-cache
Connection:close/Keep-Alive
Date:
实现页面跳转:
response.setStatus(302);
response.setHeader("Location", "/ServletStudy/Link");
页面各多久跳转:
response.setHeader("Refresh","3;url=/ServletStudy/Link");
防盗链:
String checkAddress = "localhost:8080/ServletStudy";
String referer = request.getHeader("Referer");
//这里判断条件不能写反啦 如果反啦就会出现使用NULL去调用indexof 发生Exception
if(referer != null && referer.indexOf(checkAddress) != -1){
out.println("正确链接");
}else{
out.println(" 盗链");
}
最后做一个下载的页面:
要求:可以下载文件,并防止盗链接,禁用页面缓存
请求代码:
package com.codeguy.d1.protocol;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Link extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("<a href='/ServletStudy/DownLoad'>stardict-3.0.2.tar.bz2</a>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
下载页面代码:
package com.codeguy.d1.protocol;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.w3c.dom.ls.LSException;
public class DownLoad extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
OutputStream os = response.getOutputStream();
String checkAddress = "localhost:8080/ServletStudy";
String referer = request.getHeader("Referer");
if(!(referer != null && referer.indexOf(checkAddress) != -1)){
os.write(" 盗链".getBytes());
return;
}
String path = this.getServletContext().getRealPath("/file/stardict-3.0.2.tar.bz2");
response.setHeader("Content-Disposition", "attachment;filename=stardict-3.0.2.tar.bz2");
FileInputStream fis = new FileInputStream(path);
int len = 0;
byte[] buf = new byte[1024];
while((len=fis.read(buf))>0){
os.write(buf,0,len);
}
os.close();
fis.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}