响应头信息详解

f. 响应头信息

* Location : 服务端用来告诉浏览器,请求需要重定向.(必须结合状态吗302使用)

Server : 服务端用来告诉浏览器,服务器的类型

* Content-Encoding: 服务端用来告诉浏览器,服务器对数据采用的编码(gzip、deflate)

Content-Length:  服务端用来告诉浏览器,响应正文的长度

Content-Language: 服务端用来告诉浏览器,zh-cn服务发送的文本的语言

*Content-Type: 服务端用来告诉浏览器,你要用哪个码表来解析二进制数据

* Last-Modified : 服务端用来告诉浏览器,访问资源的最后修改时间

 *Refresh:服务端用来告诉浏览器,多长时间刷新一次

*Content-Disposition: 服务端用来告诉浏览器,以下载文件的方式打开文件

 * Expires: -1 : 服务端用来告诉浏览器,不要缓存 Cache-Control:no-cache (1.1)   Pragma: no-cache   (1.0)

 ***** Set-Cookie: 服务端用来告诉浏览器,要存储的内容


Location:

doGet(HttpServletRequest request, HttpServletResponse response):处理页面上的get请求

HttpServletRequest request:代表了一个请求,从客户端浏览器发送过来的请求信息

当请求到达服务端的时候,tomcat会自动创建该对象,把所有的请求信息包装到了request对象中,就可以通过该对象拿到各种信息

HttpServletResponse response:代表了服务端向客户端的一个响应。


doPost(HttpServletRequest request, HttpServletResponse response):处理页面上的post请求

ServletDeom1.java:

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;
//演示响应头location
public class ServletDemo1 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("ServletDemo1");
		response.setStatus(302) ;
		//设置响应头
		response.setHeader("Location", "/day07_00_httpresponse/servlet/ServletDemo2") ;//请求重定向
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
ServletDemo2.java:

package com.heiam.response;

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 ServletDemo2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		System.out.println("过来了啊");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
把项目部署到服务器上后,在浏览器中敲入:

http://localhost:8080/day07_00_httpresponse/servlet/ServletDemo1就访问到了项目了

在控制台中输出了对应的内容


* Content-Encoding

服务端用来告诉浏览器,服务器对数据采用的编码(gzip、deflate)

ServletDemo3.java:


import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.zip.GZIPOutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示响应头Content-Encoding编码格式
public class ServletDemo3 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
				"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
				"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ;
//		s.length()
		//压缩的时候是一个字节(压缩流中需要的参数是字节数组),先把字符串变成一个字节
		byte[] bs = s.getBytes() ;//转换为字节数组的原因是往压缩流里写的数据要求是字节数组
		System.out.println("压缩前的长度:" + bs.length);
		//创建一个字节数组输出流:因为可以从字节数组输出流中取出我们需要的数据
		ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
		
		//希望用Gzip压缩一下然后发送
		//创建一个压缩流,包装了一下输出流
		GZIPOutputStream gzip = new GZIPOutputStream(baos) ;
		//将数据进行压缩
		gzip.write(bs) ;
		gzip.close() ;
		
		//从压缩流中拿出数据
		bs = baos.toByteArray() ;  //压缩后的数据
		System.out.println("压缩后的长度: " + bs.length);
		//通知浏览器发送的数据格式是gzip
		response.setHeader("Content-Encoding", "gzip") ;
		
		response.getOutputStream().write(bs) ;
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}


响应头信息详解_第1张图片


*Content-Type

服务端用来告诉浏览器,你要用哪个码表来解析二进制数据



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;
//演示Content_type响应头
public class ServletDemo4 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String s = "一个人的武林!!" ;
		//通知浏览器的Content-Type
		response.setHeader("Content-Type", "text/html;charset=UTF-8") ;
		response.getWriter().write(s) ;
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

*Refresh

服务端用来告诉浏览器,多长时间刷新一次


import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示Refresh响应头
public class ServletDemo5 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//隔一段时间刷新自己
//		response.setHeader("Refresh", "2") ;
//		response.getWriter().write("aa" + new Random().nextInt()) ;
		
		//隔2秒时间刷新到其他资源
		response.setHeader("Refresh", "2;url=/day07_00_httpresponse/servlet/ServletDemo2") ;
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}


*Content-Disposition 

服务端用来告诉浏览器,以下载文件的方式打开文件



import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示响应头Content-Disposition
public class ServletDemo6 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//拿到图片的路径
		String path = this.getServletContext().getRealPath("/WEB-INF/classes/1.gif") ;
		System.out.println(path);
		
		//创建一个输入流对象
		FileInputStream is = new FileInputStream(path) ;
		byte[] bs = new byte[1024] ;
		int b = 0 ;
		
		//创建一个输出流对象
		ServletOutputStream os = response.getOutputStream() ;
		
		//通知浏览器不要直接显示,而要下载下来再显示
		response.setHeader("Content-Disposition", "attachment;filename=1.gif") ;
		
		//读取数据发送数据
		while((b = is.read(bs)) != -1){
			os.write(bs,0,b) ;//该流是由response对象产生的,不需要关闭,服务器会自动关闭
		}
		
		is.close() ;
		os.close() ;
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

* Expires: -1(立刻过期)

服务端用来告诉浏览器,不要缓存 Cache-Control:no-cache (1.1)   Pragma: no-cache   (1.0)

因为不清楚客户端使用的是什么版本的协议,所以都写上


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;
//演示响应头Expires
public class ServletDemo7 extends HttpServlet {

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//通知浏览器不要缓存
		response.setHeader("Expires", "-1") ;
		response.setHeader("Cache-control", "no-cache") ;
		response.setHeader("Pragma", "no-cache") ;
		
		response.getWriter().write("hello world!") ;
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}





你可能感兴趣的:(JavaWeb)