什么是HttpServletRequest
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
简单来说,要得到浏览器信息,就找HttpServletRequest对象
HttpServletRequest常用方法
获得客户机【浏览器】信息
- getRequestURL方法返回客户端发出请求时的完整URL。
- getRequestURI方法返回请求行中的资源名部分。
- getQueryString 方法返回请求行中的参数部分。
- getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
- getRemoteAddr方法返回发出请求的客户机的IP地址
- getRemoteHost方法返回发出请求的客户机的完整主机名
- getRemotePort方法返回客户机所使用的网络端口号
- getLocalAddr方法返回WEB服务器的IP地址。
- getLocalName方法返回WEB服务器的主机名
获得客户机请求头
- getHeader方法
- getHeaders方法
- getHeaderNames方法
获得客户机请求参数(客户端提交的数据)
- getParameter方法
- getParameterValues(String name)方法
- getParameterNames方法
- getParameterMap方法
HttpServletRequest应用
防盗链
什么是防盗链呢?比如:我现在有海贼王最新的资源,想要看海贼王的要在我的网页上看。现在别的网站的人看到我有海贼王的资源,想要把我的资源粘贴在他自己的网站上。这样我独家的资源就被一个CTRL+C和CTRL+V抢走了?而反盗链就是不能被他们CRTL+C和CRTL+V
- 下面我模拟一下场景。现在我首页先有一个超链接,指向着海贼王最新资源
- 当我点进去,就能看到海贼王最新资源了
- 其他的人可以通过复制粘贴我的地址,放到它们的网页上
- 这样我就划不来啦【我的广告你来没看呢!】。想要看我的资源,就必须经过我的首页点进去看。
- 想要实现这样的效果,就要获取Referer这个消息头,判断Referer是不是从我的首页来的。如果不是从我的首页来的,跳转回我的首页。
//获取到网页是从哪里来的 String referer = request.getHeader("Referer"); //如果不是从我的首页来或者从地址栏直接访问的, if ( referer == null || !referer.contains("localhost:8080/zhongfucheng/index.jsp") ) { //回到首页去 response.sendRedirect("/zhongfucheng/index.jsp"); return; } //能执行下面的语句,说明是从我的首页点击进来的,那没问题,照常显示 response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("路飞做了XXXXxxxxxxxxxxxxxxxx");
首先按正常预想的,别人从首页点击我的资源,访问我海贼王最新的资源
\
- 能够成功访问到资源
如果我在浏览器直接输入地址【此时Referer是为null的】,我们来看看
跳回到首页上,不能访问到海贼王资源
再试试,如果别人粘贴了我的资源url,在它的网页上挂了一个网址呢。
在别人网页上点击的时候
又跳回到了我的首页了。