referer:
package cn.hncu.servlets;
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 ShowMsgServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String str = "";
// 获取浏览器发送的HTTP协议请求头中的"Refer"信息
String refer = req.getHeader("Referer");
System.out.println(refer);
if (refer == null) {// 直接在浏览器输入目标地址的
str = "要从广告页面点查看,才能浏览该图片页面";
} else {
if (refer.contains("127.0.0.1")) {
str = "<img src='imgs/1.jpg'/><br/>";
str += "<img src='imgs/5.jpg'/><br/>";
str += "<img src='imgs/6.jpg'/><br/>";
str += "<img src='imgs/7.jpg'/><br/>";
} else {
str = "从别的网站过来的,照样不能看到图片";
}
}
// 利用HTTP协议向浏览器发送内容类型
resp.setHeader("Content-Type", "text/html;charset=utf-8");
// resp.setContentType("text/html;charset=utf-8");
PrintWriter pw = resp.getWriter();
pw.println("<html><head></head><body>");
pw.println(str);
pw.println("</body></html>");
}
}
GZIP 压面压缩:
package cn.hncu.servlets;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GzipServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String str ="1、基于顺丰各项业务的海量优质数据,进行数据分析、人工智能建模、训练,为顺丰业务的数据化智能化运营提供参考和具体应用;";
str +="2、负责深度学习算法设计及开发;666666666666666666666666";
for(int i=0;i<100;i++){
str +="3、负责自然语言处理相关算法设计及开发。7777777777777777777777777777777777";
}
byte src[]=str.getBytes();
System.out.println(src.length);
/*数据压缩输出的技术入口:
* GZIPOutputStream out = new GZIPOutputStream(...);
* out.write(src); //src字节数据 被压缩输出到out流中 *
*/
ByteArrayOutputStream bout =new ByteArrayOutputStream();
GZIPOutputStream gout=new GZIPOutputStream(bout);
gout.write(src);
gout.close(); //必须要关流以刷缓存,把数据刷到bout中
//从bout中到压缩后的字节数据读取出来,存入dest中
byte dest[]=bout.toByteArray();
System.out.println("len2:"+dest.length);
//为了让浏览器知道后台发送的是压缩格式的数据,得利用HTTP协议告诉它
resp.setHeader("Content-Encoding", "gzip");
//把字节数据dest输出到客户端
OutputStream out2 = resp.getOutputStream();
out2.write(dest);
out2.close();
}
}
重定向
方法(利用HTTP协议或者直接用方法);
package cn.hncu.servlets.go;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class OneServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 利用HTTP协议实现重定向
//法1
resp.setStatus(302);
//resp.setStatus(HttpServletResponse.SC_FOUND);//和上一句等价
resp.setHeader("Location", "/httpWeb/jsps/result.jsp");
//法2 我们以后写重定向时,可以用另一种更简单的方式
resp.sendRedirect("/httpWeb/jsps/result.jsp");//该方法内部帮我们以HTTP协议的方式应答
}
}
请求转发
package cn.hncu.servlets.go;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TwoServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher rd = req.getRequestDispatcher("/jsps/result.jsp");
rd.forward(req, resp);
}
}
页面下载:
package cn.hncu.servlets.go;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ThreeServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
/*
* 这一段演示,当浏览器接收到404的状态码之后,后面的内容就不接收,直接显示它早就存在的错误页面
* resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
* resp.getWriter().println("dkjajkajk");
*/
/*
* 利用HTTP协议告诉浏览器,把后续发送的内容下载到一个指定的文件中
*/
resp.setContentType("application/force-download");
// 指定文件名
String name = "a.txt";
resp.setHeader("Content-Disposition", "attachment:filename=\" "+name+"\" ");
//发送内容
resp.getWriter().println("dkjajkajk.....");
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>HTTP协议演示</title>
</head>
<body>
<h1>HTTP协议在后台开发时的用法演示</h1>
<a href="ss">利用HTTP协议实现防盗链功能--看图片</a> <br/>
<a href="gzip">页面压缩输出例子演示</a> <br/>
<hr/>
<a href="One">页面跳转技术演示1: 重定向</a> <br/>
<a href="Two">页面跳转技术演示2: 转发</a> <br/>
<a href="Three">http协议的其它演示</a> <br/>
</body>
</html>