您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
11_Request_获取请求头数据
发布时间:2022-08-07 23:01:11编辑:雪饮阅读()
本次主要就是了解下通过Request对象获取请求头数据,支持一次性获取一个迭代器,然后迭代出所有请求头的键与值,也支持手动仅获取指定请求头的键对应的值。
接下来就是两个案例,第一个案例是判断访问者来源的浏览器类型。
第二个案例稍微麻烦点,是防盗链的处理测试的一个简单演示。
需要至少两个tomcat端口,我们建立相同的静态页面,一个放在我们的youku项目上,用于播放电影的,同样的这个页面也拷贝到另外一个项目的根目录,即web目录下,另外一个目录的,然后这另外的一个项目名叫myMovie。这另外的这个项目其它配置就像之前一样,一般不用动了就行了。然后两个项目都restart server在youku项目中访问自己的Movie路由是有做防盗链处理,一般referer来自自己的项目肯定是放行咯,然后从另外一个项目访问这个youku的Movie路由就不给予放行咯。
这里youku是8080,然后myMovie端口是8081。youku配置就是默认的。而myMovie配置为了防止端口冲突,最好还是修改下相关端口为好。
那么youku项目实例Movie.java:
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 java.io.IOException;
import java.util.Enumeration;
@WebServlet("/Movie")
public class Movie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("---------获取的请求头信息----------");
Enumeration<String> headerNames=request.getHeaderNames();
while(headerNames.hasMoreElements()){
String name=headerNames.nextElement();
String val=request.getHeader(name);
System.out.println(name+":"+val);
}
System.out.println("----------获取user-agent(其实也就是获取请求头,只是这里不在是动态获取了),获取请求头时,入参的键名不区分大小写----------");
String userAgent=request.getHeader("user-agent");
System.out.println("user-agent:"+userAgent);
System.out.println("----------根据user-agent判断来访者的浏览器----------");
if(userAgent.contains("Edg/")){
System.out.println("来访者浏览器是edge浏览器");
}
else if(userAgent.contains("Chrome/")){
System.out.println("来访者浏览器是Chrome浏览器");
}
System.out.println("----------获取referer----------");
String referer=request.getHeader("referer");
System.out.println("referer:"+referer);
System.out.println("----------根据referer去判断并解决防盗链问题,并给用户响应在浏览器上(referer并非每次都能获取到值,像是直接通过浏览器输入目标url直达的,则referer获取的就是null)------------");
//来源来自我自己的项目中,允许播放电影
if(referer.contains("http://localhost:8080/youku_war_exploded/")){
System.out.println("正在播放电影........");
//响应给浏览器
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("正在播放电影....");
}
else if(referer.contains("http://localhost:8081/")){
System.out.println("对不起你从一个盗链的网站观看我优酷的电影,请来优酷观看该电影........");
//响应给浏览器
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("对不起你从一个盗链的网站观看我优酷的电影,请来优酷观看该电影........");
}
}
}
以及这两个项目都用的一份静态的播放电影的发起页的源代码如:
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="http://localhost:8080/youku_war_exploded/Movie">看电影</a>
</body>
</html>
那么youku项目访问发起页为:
http://localhost:8080/youku_war_exploded/
然后myMovie项目访问发起页为:
http://localhost:8081/myMovie_war_exploded/
这两个发起页的代码都是相同的,就是上面这个index.html
关键字词:Request,获取,请求,头,数据