Servlet客户端HTTP请求:

当用户通过浏览器请求网页时,会向Web服务器发送特定的信息,这些信息不能被直接读取,因为这些信息是作为HTTP请求的头的一部分进行传输的。

来自于浏览器端的重要的头信息:

头信息

信息的具体描述

Accept

指定浏览器或其他客户端可以处理的MIME类型,值image/png或image/jpeg是最常见的两种可能值。

Accept-Charset

指定浏览器可以用来显示信息的字符集,例如ISO-8859-1。

Accept-Encoding

指定浏览器知道如何处理的编码类型,值gzip或compress是最常见的两种可能值。

Accept-Language

指定客户端的首选语言,在这种情况下,Servlet会产生多种语言的结果,例如en,en-us,ru等等。

Authorization

用户客户端在访问受密码保护的网页时识别自己的身份。

Connection

指示客户端是否可以处理持久的HTTP连接,持久连接允许客户端或其他浏览器通过单个请求来检索多个文件,值Keep-Alive意味着使用了持续连接。

Content-Length

只适合于POST请求,并给出POST数据的大小(以字节为单位)。

Cookie

把之前发送到浏览器的cookies返回到服务器。

Host

指定原始的URL中的主机和端口。

If-Modified-Since

只有当页面在指定的日期后已更改时,客户端想要的页面。如果没有新的结果可以使用,服务器会发送一个304代码,表示NOt Modified头信息。

If-Unmodified-Since

与If-Modified-Since对立,它指定只有当文档早于指定日期时,操作才会成功。

Referer

指示所指向的Web页的URL,例如如果您再网页1,点击一个连接到网页2,当浏览器请求网页2时,网页1的URL就会包含在Referer头信息中。

User-Agent

识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。

Servert提供的读取HTTP头的方法:

以下方法都可以通过HttpServletRequest对象进行调用。

方法

描述

Cookie[]  getCookies()

返回一个数组,包含客户端发送该请求的所有的Cookie对象。

Enumeration  getAttributeNames()

返回一个枚举,包含提供给该请求的可用的属性名称。

Enumeration  getHeaderNames()

返回一个枚举,包含在该请求中所包含的所有的头名。

Enumeration  getParameterNames()

返回一个String对象的枚举,包含在该请求中包含的参数的名称。

HttpSession  getSession(boolean  create)

返回与该请求关联的当前session会话,如果请求没有session的话,则创建一个。

Locale  getLocale()

基于Accept-Language头,返回客户端接受内容的首选的区域设置。

Object  getAttribute(String  name)

以对象的形式返回已命名的属性值,如果没有给定名称的属性值,返回null。

ServletInputStream  getInputStream()

使用ServletInputStream,以二进制数据形式检索请求的主体。

String  getAuthType()

返回用于保护Servlet的身份验证方案的名称,例如:“BASIC”或“SSL”,如果JSP没有受到保护则返回null。

String  getCharacterEncoding()

返回请求主体中使用的字符编码的名称。

String  getContentType()

返回请求主体的MIME类型,如果不知道返回类型则返回null。

String  getContextPath()

返回指示请求上下文的URI部分。

String  getHeader(String name)

以字符串形式返回指定的请求头的值。

String  getMethod()

返回请求的HTTP方法的名称,例如GET,POST或者PUT。

String  getParameter(String name)

以字符串形式返回请求参数的值,或者如果参数不存在则返回null。

String  getPathInfo()

当请求发出时,返回与客户端发送的URL相关的任何额外的路径信息。

String  getProtocol()

返回请求协议的名称和版本。

String  getQueryString()

返回包含在路径后的请求URL中的查询字符串。

String  getRemoteAddr()

返回发送请求的客户端的IP地址。

String  getRemoteHost()

返回发送请求的客户端的完全限定名称。

String  getRemoteUser()

如果用户已通过身份验证,则返回请求的登录用户,或者如果用户未通过身份验证,则返回null。

String  getRequestURI()

从协议名称知道HTTp请求的第一行的查询字符串中,返回该请求的URL的一部分。

String  getRequestedSessionId()

返回由客户端指定的session会话ID。

String  getServletPath()

返回调用JSP的请求的URL的一部分。

String[]  getParamaterValues(String name)

返回一个字符串对象的数组,包含所有给定的请求参数的值,如果参数不存在则返回null。

boolean  isSecure

返回一个布尔值,知识请求是否使用安全通道,如HTTPS。

int  getContentLength()

以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回-1。

int  getIntHeader(String name)

返回指定的请求头的值为一个int值。

int  getServletPort()

返回接收到这个请求的端口号。

int  getParameterMap()

将参数封装成Map类型。

案例:

创建一个web工程,src目录下创建servletdemo包,包下创建servletDemo1类。

package servletdemo;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.jasper.tagplugins.jstl.core.Out;

@WebServlet("/getContent")

//扩展HttpServlet类
public class ServletDemo1 extends HttpServlet{
	//处理get方法的请求
	public void doGet(HttpServletRequest request,HttpServletResponse response) 
		throws ServletException,IOException {
		//设置响应内容类型
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		String title = "Servlet的HTTP请求";
		String htmlStr = new String("<!DOCTYPE html> \n");
		htmlStr += "<html>\n";
		htmlStr += "<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n";
		htmlStr += "<body bgcolor=\"#f0f0f0\">\n";
		htmlStr += "<h1 align=\"center\">" + title + "</h1>\n";
		
        //客户端接受内容的首选的区域设置
		Locale locale = request.getLocale();    
        //请求主体中使用的字符编码的名称
		String encodeStr = request.getCharacterEncoding();
        //请求主体的 MIME类型
		String contentStr = request.getContentType();
        //请求的 HTTP 方法的名称
		String methodStr = request.getMethod();
        //与客户端发送的 URL 相关的任何额外的路径信息
		String pathInfoStr = request.getPathInfo();
        //发送请求的客户端的互联网协议(IP)地址
		String remoteAddrStr = request.getRemoteAddr();
        //发送请求的客户端的完全限定名称
		String remoteHostStr = request.getRemoteHost();
        //调用 JSP 的请求的 URL的一部分
		String servletPathStr = request.getServletPath();
        //请求的 URL 的一部分
		String requestURIStr = request.getRequestURI();
        //接收到这个请求的端口号
		int servletPortStr = request.getServerPort();
		
		htmlStr += "<p>客户端接受内容的首选的区域设置:"+locale+"+<p>";
		htmlStr += "<p>请求主体中使用的字符编码的名称:"+encodeStr+"</p>";
		htmlStr += "<p>请求主体的 MIME类型:"+contentStr+"</p>";
		htmlStr += "<p>请求的 HTTP 方法的名称:"+methodStr+"</p>";
		htmlStr += "<p>与客户端发送的 URL 相关的任何额外的路径信息:"+pathInfoStr+"</p>";
		htmlStr += "<p>发送请求的客户端的互联网协议(IP)地址:"+remoteAddrStr+"</p>";
		htmlStr += "<p>发送请求的客户端的完全限定名称:"+remoteHostStr+"</p>";
		htmlStr += "<p>调用 JSP 的请求的 URL的一部分:"+servletPathStr+"</p>";
		htmlStr += "<p>请求的 URL 的一部分:"+requestURIStr+"</p>";
		htmlStr += "<p>接收到这个请求的端口号:"+servletPortStr+"</p>";
		htmlStr += "</body>";
		htmlStr += "</html>";
		
		out.println(htmlStr);
	}
	//处理POST请求的方法
	public void doPost(HttpServletRequest request,HttpServletResponse response)
		throws ServletException,IOException {
		doGet(request, response);
	}
}

在web.xml中添加如下内容:

<servlet>
  <!-- 类名 -->
  <servlet-name>ServletDemo1</servlet-name>
  <!-- 所在的包 -->
  <servlet-class>servletdemo</servlet-class>
</servlet>
<servlet-mapping>
  <!-- 类名 -->
  <servlet-name>ServletDemo1</servlet-name>
  <!-- 访问路径 -->
  <url-pattern>/servletdemo/getContent</url-pattern>
</servlet-mapping>

访问结果:

java ServletRequest设置请求header servlet请求入口_servlet客户端请求