Servlet学习笔记(三)之HttpServletRequest
2016-11-24 21:43
435 查看
HttpServletRequest(HttpServletRequest 想比 ServletRequest 添加与协议相关 API)对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户信息。
通过Request对象进行的常用操作:
获取客户机信息
获取请求头信息
获取请求参数
利用请求域传递对象
(一)获取客户机信息
常用方法:
输出:
区别URL(统一资源定位符)与URI(统一资源标识符):
url:http://localhost/requesttest/request1 — 完整
uri:/requesttest/request1 —- 部分
URI 包含 URL的 ,URL 一定完成路径,URI可以相对路径
http://localhost/requesttest/request1 是一个URL 同时也是 URI
./hello /requesttest/request1 —- 都是URI 不是URL
querystring:null
由于请求中没有查询串,因此querystring为null,如果改成http://localhost/requesttest/request1?username=megustas则输出变为
即通过 getQueryString 可以获得 get方式提交查询串 url中?后面部分
获得当前访问资源路径 :
在URI的基础上去掉工程虚拟目录名称的部分,剩下的就是当前访问的资源的路径。
(二)获取请求头信息
getHeader 获得头信息的值,转换一个字符串
getHeaders 获得头信息值 ,获得Enumeration
getHeaderNames 获得所有头信息名称 返回 Enumeration
掌握getHeader使用,遍历Enumeration 获得所有头信息
通过头信息可以进行防盗链,存在合法referer不是盗链,否则控制目标资源无法访问 (因为直接输入网址的情况没有refer的头信息)
* 通过URL 绕过盗链判断
(三)获取请求参数
请求参数:用户通过请求提交服务器的一些数据—–< a href=”url?xxx=xxx” >、< form method=”get”> 、 < form method=”post”>
可以通过getParameter(name)方法来获取
html页面:
通过Request对象进行的常用操作:
获取客户机信息
获取请求头信息
获取请求参数
利用请求域传递对象
(一)获取客户机信息
常用方法:
public String getContextPath();/获取请求的上下文路径 public StringBuffer getRequestURL();/返回客户端发出请求的完整URL public String getRequestURI();/返回请求行中的资源名部分 public String getQueryString();/返回请求行中的参数部分 public String getMethod();/返回客户机请求方式,如get,post等 public String getRemoteAddr();/返回发出请求的客户机的IP地址
public class RequestServlet1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 问题一 区分 getRequestURL 和 getRequestURI System.out.println("url:" + request.getRequestURL()); System.out.println("uri:" + request.getRequestURI()); // 返回 // /day06/request1 // 问题二:了解 通过 getQueryString 可以获得 get方式提交查询串 url中?后面部分 System.out.println("querystring:" + request.getQueryString()); // 获得客户端ip System.out.println("ip: " + request.getRemoteAddr()); // 通过 getContextPath 获得工程虚拟目录名称 System.out.println(request.getContextPath()); // 返回 /requesttest // 通过getMethod 获得请求方式 System.out.println("请求方式 : " + request.getMethod()); // 问题: 获得当前访问资源路径 --- /request1 System.out.println("当前访问资源路径 :" + request.getRequestURI().substring( request.getContextPath().length())); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
输出:
url:http://localhost:8080//requesttest/request1 uri://requesttest/request1 querystring:null ip: 127.0.0.1 //requesttest 请求方式 : GET 当前访问资源路径 :/request1
区别URL(统一资源定位符)与URI(统一资源标识符):
url:http://localhost/requesttest/request1 — 完整
uri:/requesttest/request1 —- 部分
URI 包含 URL的 ,URL 一定完成路径,URI可以相对路径
http://localhost/requesttest/request1 是一个URL 同时也是 URI
./hello /requesttest/request1 —- 都是URI 不是URL
querystring:null
由于请求中没有查询串,因此querystring为null,如果改成http://localhost/requesttest/request1?username=megustas则输出变为
querystring:username=megustas
即通过 getQueryString 可以获得 get方式提交查询串 url中?后面部分
获得当前访问资源路径 :
request.getRequestURI().substring(request.getContextPath().length());
在URI的基础上去掉工程虚拟目录名称的部分,剩下的就是当前访问的资源的路径。
(二)获取请求头信息
getHeader 获得头信息的值,转换一个字符串
getHeaders 获得头信息值 ,获得Enumeration
getHeaderNames 获得所有头信息名称 返回 Enumeration
掌握getHeader使用,遍历Enumeration 获得所有头信息
public class RequestServlet2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("test..."); // 获得指定头信息字段 Accept-Encoding: gzip, deflate String value = request.getHeader("Accept-Encoding"); // 如果头信息存在多个值,将多个值拼接到一起,形成String System.out.println(value); // gzip, deflate System.out.println("--------------------------------"); // 获得所有头信息内容 ---- 获得所有头信息名称 Enumeration<String> enumeration = request.getHeaderNames(); while (enumeration.hasMoreElements()) { String name = enumeration.nextElement(); // name 就是一个头信息名字 System.out.println(name + ":" + request.getHeader(name)); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
通过头信息可以进行防盗链,存在合法referer不是盗链,否则控制目标资源无法访问 (因为直接输入网址的情况没有refer的头信息)
* 通过URL 绕过盗链判断
(三)获取请求参数
请求参数:用户通过请求提交服务器的一些数据—–< a href=”url?xxx=xxx” >、< form method=”get”> 、 < form method=”post”>
可以通过getParameter(name)方法来获取
html页面:
<body> <h1>分别以get 和 post方式 提交数据</h1> <h1>第一种 通过超链接 提交数据 以?方式</h1> <!-- 包括两个参数的 name 和 city --> <a href="/requestexample/request4?name=zhangsan&city=beijing">超链接提交数据</a> <h1>第二种 通过form的post方式提交数据</h1> <form action="/requestexample/request4" method="post"> 请输入姓名 <input type="text" name="name" /><br/> 请输入城市 <input type="text" name="city" /> <br/> <input type="submit" value="提交" /> </form> </body>
public class RequestServlet4 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 通过getParameter 获得请求数据 String name = request.getParameter("name"); System.out.println(name); String city = request.getParameter("city"); System.out.println(city); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
相关文章推荐
- Servlet学习笔记(HttpServletRequest对象)
- servlet学习笔记---HttpServletRequest
- 修改HttpServletRequest的参数【转】
- HttpServletRequest的部分方法解析
- JavaWeb基础--HttpServletRequest
- Servlet3.0中HttpServletRequest增加了对文件上传的支持
- ServletRequest和HttpServletRequest的联系与区别
- myeclipse 导入web工程后,有些页面显示 javax.servlet.http.HttpServletRequest 有错
- javax.servlet.http.HttpServletRequest cannot be resolved错误解决方案
- Spring中MultipartHttpServletRequest实现文件上传
- 在Action类中获得HttpServletResponse,HttpServletRequest对象的方法
- HttpServletRequest常用获取URL的方法
- httpservletrequest的概念
- HttpServletRequest对象(一)
- 微信公众号回调接口HttpServletRequest 操作
- httpServletRequest.setCharacterEncoding 、httpServletResponse.setCharacterEncoding
- Struts2 中用Fileupload上传文件得不到HttpServletRequest值的解决办法
- Java如何从HttpServletRequest中读取HTTP请求的body
- IDEA启动WEB项目访问Controller一直提示错误:No mapping found for HTTP request with URI [xxxx] in DispatcherServlet
- 【明哥报错簿】之【 "javax.servlet.http.HttpServlet" was not found on the Java Build Path || HttpServletRequest/HttpServletResponse cannot be resolved to a type】