1.典型的请求头信息
GET/servlet/Request?keywords=servlets+jsp HTTP/1.1
Accept:image/gif.image/jpg.*/*
Accept-Encoding:gzip
Connection:Keep-Alive
Cookie:userID=id456578
Host:www.somegbookstore.com
Referer:http://www.somebookstore.com/findbooks.html
User-Agent:Mozilla/4.0(compatible:MSIE 6.0:Windows NT 5.0)
2.读取HTTP请球头
使用HttpServletRequest中的方法
一般方法
getHeader(header名称不区分大小写)
getHeaders
getHeaderNames
专门方法
getCookies
getAuthType
getRemoteUser
getContentLength
getContentType
getDateHeader
getIntHeader
相关信息
getMethod
getRequestURL
getQueryString
getProtocol
3.使用表格显示有请求头信息
实例
package com.geek99.demo;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HeaderServlet
*/
public class HeaderServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HeaderServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Enumeration<String> enum1=request.getHeaderNames();
while(enum1.hasMoreElements())
{
String name = enum1.nextElement();
String value=request.getHeader(name);
System.out.println(name+":"+value);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
理解各种请求头的含义
Accept
标识浏览器能处理MIME类型
能发送不同的内容的客户端,例如PNG文件有好的压缩特性,但是在浏览器中支持的不是很广泛、例如,一个Servlet可以检查是否支持PNG文件格式,如果支持<IMG SRC = “picture.png”...>否则<IMG SRC="picture.gif"...>
-Accept-Encoding
标识浏览器能处理的编码类型
-Authorization
授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中
-Connection
表示是否需要持久连接。如果Servlet看到这里的值为"Keep-Alive",或者看到请求使用的是HTTP1.1(HTTP1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Apple图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先吧内容写入ByteArrayOutStream,然后在正式写出内容之前计算它的大小。
-Cookie
保存在客户端的消息
-Host
包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
-If-Modified-Since
只有当所请求的内容,在指定的日期之后,又经过修改才返回它,否则返回304 “Not Modified”应答
-Referer
包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
-User-Agent
浏览器类型,如果Servlet返回的内容与浏览器类型有关则改值非常有用
响应头信息
构建Excel电子表格
package com.geek99.demo;
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;
/**
* Servlet implementation class ResponseHeaderServlet
*/
public class ResponseHeaderServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ResponseHeaderServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("application/vnd.ms-excel");
PrintWriter out = response.getWriter();
out.println("\tQ1\tQ2\tQ3\tQ4\tTotal");
out.println("Apples\t78\t87\t92\t29\t=SUM(B2:E2)");
out.println("Oranges\t77\t86\t93\t30\t=SUM(B3:E3)");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
动态生成JPEG图片
package com.geek99.demo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ResponseHeaderServlet
*/
public class ResponseHeaderServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ResponseHeaderServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("image/jpeg");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("practice.jpg");
int len = in.available();
byte [] buffer = new byte[len];
in.read(buffer);
OutputStream out = response.getOutputStream();
out.write(buffer);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
定时刷新页面
package com.geek99.demo;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ResponseHeaderServlet
*/
public class ResponseHeaderServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ResponseHeaderServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setHeader("refresh", "1");
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
out.println(new Date().toLocaleString());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}