http协议的部分应用

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>

猜你喜欢

转载自blog.csdn.net/lx678111/article/details/82145451