HttpServletRequest
1. HttpServletRequest概述
客户端发送给服务器端的数据。 我们在创建Servlet时会覆盖service()⽅法,或doGet()/doPost(),这些⽅法都有两个参数,代表 请求的request和代表响应response。 service⽅法中的request的类型是ServletRequest,⽽doGet/doPost⽅法的request的类型是 HttpServletRequest,HttpServletRequest是ServletRequest的⼦接⼝,功能和⽅法更加强⼤, 所以我们学习HttpServletRequest。
request: ServletRequest HttpServletRequest
客户端 -> 服务器(Servlet) get方法
URL: 协议 + ip + port + uri
URI: 统一资源路径 从 / 开始
2. request的运⾏流程
所有的被访问的资源都Servlet处理的 ,没有Servlet对象的资源会调用 默认的Servlet
3. 通过抓包⼯具抓取Http请求![](https://i-blog.csdnimg.cn/blog_migrate/1d192293879ff1f6a4d82eef58d0f6b6.png)
因为request代表请求,所以我们可以通过该对象分别获得Http请求的请求⾏、请求头和请求 体。
4 通过request获得请求⾏
- 获得客户端的请求⽅式:String getMethod()
- 获得请求的资源:
- String getRequestURI() -- 获取请求URI
- StringBuffer getRequestURL() --获取请求行,?后面的是参数
- String getContextPath() -- 获取应用的虚拟⽬录
- String getServletPath() -- 获取Servlet路径
- String getQueryString() -- 获取get⽅式请求参数 username=zhangsan&password=123
- String getRemoteAddr() -- 获取客户机的IP地址
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.获得请求行信息
// 请求方式
String method = req.getMethod(); // 大写
System.out.println(method);
// URI
String uri = req.getRequestURI();
System.out.println(uri);
String url = req.getRequestURL().toString();
System.out.println(url);
// 获得客户端IP地址
String addr = req.getRemoteAddr();
System.out.println(addr);
}
5 通过request获得请求头
- long getDateHeader(String name)
- String getHeader(String name)
- int getIntHeader(String name)
- Enumeration getHeaderNames() -- 获取所有的请求头名称
- 常⻅的请求头:
- 1. User-Agent:浏览器告诉服务器,我访问你使⽤的浏览器版本信息 作⽤:可以在服务器端获取该头的信息,解决浏览器的兼容性问题
- 2.Referer:告诉服务器,我(当前请求)从哪⾥来?作⽤:防盗链
防盗:通过Referer的URL 可以判断请求的来源,从而过滤不是自己的请求;
通过Referer里面有没有包含关键词来过滤