这一篇来学习HttpServletRequest对请求头的相关操作,其实一共就两个方法学习,第一个是得到请求头中具体属性的值,第二个方法就是得到全部属性,返回是一个枚举类型。
1.得到某一个请求头中的name的值
这里name我通过User-Agent来演示,这个值告诉我们请求的浏览器是什么类型,主要可以明显看出来是IE,Firefox,Chrome。
package com.anthony.servlet;
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 ServletDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求头某一个name的值, 例如User-Agent
String browser = req.getHeader("User-Agent");
System.out.println(browser);
if(browser.toLowerCase().contains("msie")) {
System.out.println("你使用的是IE浏览器。");
}else if(browser.toLowerCase().contains("firefox")) {
System.out.println("你使用的是火狐浏览器。");
}else if(browser.toLowerCase().contains("chrome")) {
System.out.println("你使用的是谷歌浏览器。");
}else {
System.out.println("你使用的是其他浏览器。");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
部署到tomcat,我用火狐浏览器访问,打印日志如下
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0
你使用的是火狐浏览器。
2.得到全部请求头的names
先把上面代码抽取成方法test1(),然后来写获取全部names并遍历这个枚举对象。
package com.anthony.servlet;
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;
public class ServletDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//test1(req);
//获取全部请求头中names
Enumeration<String> headerNames = req.getHeaderNames();
while(headerNames.hasMoreElements()) {
String e = (String)headerNames.nextElement();
System.out.println(e + ":" + req.getHeader(e));
}
}
private void test1(HttpServletRequest req) {
//获取请求头某一个name的值, 例如User-Agent
String browser = req.getHeader("User-Agent");
System.out.println(browser);
if(browser.toLowerCase().contains("msie")) {
System.out.println("你使用的是IE浏览器。");
}else if(browser.toLowerCase().contains("firefox")) {
System.out.println("你使用的是火狐浏览器。");
}else if(browser.toLowerCase().contains("chrome")) {
System.out.println("你使用的是谷歌浏览器。");
}else {
System.out.println("你使用的是其他浏览器。");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
部署到tomcat服务器,然后测试下效果
host:localhost:8080
user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0
accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-language:en-US,zh-CN;q=0.7,en;q=0.3
accept-encoding:gzip, deflate
cookie:jenkins-timestamper-offset=-28800000
connection:keep-alive
upgrade-insecure-requests:1
cache-control:max-age=0
3.getHeaders(name)
如果一个请求头中有多个name相同的可以使用这个方法,例如前面我们介绍setHeader()可以设置多个重复的encoding等于UTF-8,我们就可以使用这个方法,这个方法一般用处不大。