快速掌握servlet技术-d1_2

来源:互联网 发布:python 结束程序 编辑:程序博客网 时间:2024/06/05 15:58

http响应:

HTTP/1.1 200 OK ---状态行

Server:Microsoft-IIS/6.0

Date:

Content-Length:

Content-Type: -----------------多个消息头

Cache-control: private

--------空行

…html代码

常用状态吗:

  1. 200 OK

  2. 302让浏览器转向另个资源(response.setStatus(302),response.setHeader(“Location”,”/servlet/test”)这个呢就是sendRedriect的底层实现);

  3. 404 找不到资源

  4. 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 发生Exceptionif(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);}}