简介

  • Servlet API 中定义的 ServletRequest 接口类用于封装请求消息。

  • HttpServletRequest 是专用于HTTP协议的ServletRequest 子接口,它用于封装HTTP 请求消息。

  • 在service() 方法内部调用HttpServletRequest 对象的各种方法来获取请求消息。

获取请求行的相关信息

  • HTTP请求消息的请求行包括请求方式、资源路径和HTTP协议版本:
GET /lampbrother/servlet/RequestURI?param1=a&param2=b HTTP/1.1
  • getMethod:返回HTTP请求消息中的请求方式。
  • getRequestURI:返回请求行中的资源名部分。
  • getQueryString :返回请求行中的参数部分。
  • getProtocol:返回请求行中的协议名和版本。
  • getContextPath:返回请求资源所属于的WEB应用程序的路径。
  • getPathInfo:返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
  • getPathTranslated:返回URL中的额外路径信息所对应的资源的真实路径。
  • getServletPath方法:Servlet的名称或Servlet所映射的路径。

获取网络连接信息

  • getRemoteAddr方法返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。 (*)

  • getRemoteHost方法返回发出请求的客户机的完整主机名,即“pc1.atguigu.com”这种格式。

  • getRemotePort方法返回发出请求的客户机所使用的网络接口的端口号。

  • getLocalAddr方法返回WEB服务器上接收当前请求的网络接口的IP地址。

  • getLocalName方法返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。

  • getLocalPort方法返回WEB服务器上接收当前请求的网络接口的端口号。

  • getServerName方法返回当前请求所指向的主机名。

  • getServerPort方法返回当前请求所连接的服务器端口号。

  • getScheme方法返回请求的协议名,例如http、https或ftp。

  • getRequestURL方法返回客户端发出请求时的完整URL。

获取请求头信息

  • getHeader方法
  • getHeaders方法
  • getHeaderNames方法
  • getIntHeader方法
  • getDateHeader方法
  • getContentType方法
  • getContentLength方法
  • getCharacterEncoding方法

获取请求参数

  • getParameter方法
  • getParameterValues方法
  • getParameterNames方法
  • getParameterMap方法

请求域属性

  • 存储在ServletRequest对象中的对象称之为请求域属性,属于同一个请求的多个处理模块之间可以通过请求域属性来传递对象数据。
  • 与请求域属性相关的方法:
    • setAttribute方法
    • getAttribute方法
    • removeAttribute方法
    • getAttributeNames方法

测试代码

login.jsp

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><form action="LoginServlet"  method="get">          <!-- action里面的值,就是对应的Servlet的url-pattern值 -->user:<input type="text" name="user"/>password:<input type="password" name="password"/><br />                  interest:                                       <!-- 这里就存在一个name,多个取值的情况 --><input type="checkbox" name="interest" value="reading"/>读书<input type="checkbox" name="interest" value="shopping"/>逛街<input type="checkbox" name="interest" value="watchTV"/>看电视<input type="checkbox" name="interest" value="writeCode"/>写代码<input type="submit" value="submit"/></form></body>
</html>

LoginServlet.java

package mac.com;import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;/** ServletRequest:*  1.获取用户输入内容*      1.1.public String   getParameter(String name):根据请求参数的name,返回参数值。*      1.2.public String[] getParameterValues(String name):根据请求参数的name,返回参数值的数组。*      1.3.public Enumeratinon<String> getParameterNames():获取所有的name值。*      1.4.public *  2.获取URI(URL = IP + 端口 + URI)(强转成HTTPServletRequest,这是ServletRequest的一个子接口)*      2.1.public String getRequestURI():获取请求的URI*  3.获取请求方式(强转成HTTPServletRequest,这是ServletRequest的一个子接口)*      3.1.public String getMethod():获取请求方式*  4.获取查询字符串(强转成HTTPServletRequest,这是ServletRequest的一个子接口)*      4.1.public String getQueryString():获取查询字符串(就是URL?后面的那一部分,所以POST请求方式值是null)*  5.和Attribute相关的方法,后面写*  6.基本上都可以获取,自己去查询API(强转成HTTPServletRequest,这是ServletRequest的一个子接口)*      */
public class LoginServlet implements Servlet{@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic ServletConfig getServletConfig() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getServletInfo() {// TODO Auto-generated method stubreturn null;}@Overridepublic void init(ServletConfig arg0) throws ServletException {// TODO Auto-generated method stub}/** public void  service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException:* 由 servlet 容器调用,以允许 servlet 响应某个请求。* 此方法仅在 servlet 的 init() 方法成功完成之后调用。* 应该为抛出或发送错误的 servlet 设置响应的状态代码。* servlet 通常运行在可同时处理多个请求的多线程 servlet 容器中。开发人员必须知道要同步对所有共享资源* (比如文件、网络连接以及 servlet 的类和实例变量)的访问。有关 Java 中多线程编程的更多信息,可从*  the Java tutorial on multi-threaded programming 中获得。*  req 包含客户端请求的 ServletRequest 对象*  res 包含 servlet 的响应的 ServletResponse 对象*  Throws  ServletException: *      如果发生妨碍 servlet 正常操作的异常*  Throws  java.io.IOException: *      如果发生输入或输出异常*/@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {/** 每一次请求都会调用这个方法。*//** ServletRequest:* 定义将客户端请求信息提供给某个 servlet 的对象。servlet 容器创建 ServletRequest 对象,并将该对象作为参* 数传递给该 servlet 的 service 方法。* ServletRequest 对象提供包括参数名称、参数值、属性和输入流的数据。扩展 ServletRequest 的接口可提供* 其他特定于协议的数据,例如 javax.servlet.http.HttpServletRequest 提供的 HTTP 数据。*//** ServletResponse:* 定义辅助 servlet 将响应发送到客户端的对象。servlet 容器创建 ServletResponse 对象,* 并将它作为参数传递给 servlet 的 service 方法。*/System.out.println("有人在请求我!!!");/** ServletReques:封装了请求信息。* ServletResponse:封装了请求信息。* 他们的实现都是服务器完成的,当服务器调用service方法的时候,会自动的传入这两个各个参数。 */System.out.println("--------------------------------");/** public String    getParameter(String name):* 以 String 形式返回请求参数的值,如果该参数不存在,则返回 null。* 请求参数是与请求一起发送的额外信息。对于 HTTP servlet,参数包含在查询字符串* 或发送的表单数据中。* 只有在确定参数只有一个值时,才应该使用此方法。如果参数可能拥有一个以上的值,则使* 用 #getParameterValues。* 如果将此方法用于一个有多个值的参数,则返回的值等于 getParameterValues 返回的数组中的第一个值。* 如果参数数据是在请求正文中发送的,比如发生在 HTTP POST 请求中,则通过 #getInputStream 或*  #getReader 直接读取正文可能妨碍此方法的执行。*  name    指定参数名称的 String*  return  表示单个参数值的 String*///1.获取form表单中name所对应的单个输入值String user = req.getParameter("user");String password = req.getParameter("password");System.out.println("user: " + user);System.out.println("password: " + password);System.out.println("--------------------------------");/** public String[]  getParameterValues(String name):* 返回包含给定请求参数拥有的所有值的 String 对象数组,如果该参数不存在,则返回 null。* 如果该参数只有一个值,则数组的长度为 1。* name 包含请求其值的参数的名称的 String* return   包含参数值的 String 对象数组*///2.获取form表单中name的多个输入值String[] interestValues = req.getParameterValues("interest");for( String value : interestValues ) {System.out.println("interest: " + value);}System.out.println("--------------------------------");/** ublic java.util.Enumeration<E>   getParameterNames()* 返回包含此请求中所包含参数的名称的 String 对象的 Enumeration。* 如果该请求没有参数,则此方法返回一个空的 Enumeration。* return   String 对象的 Enumeration,每个 String 都包含一个请求参数的名称;如果该请求没有参数,*          则返回一个空的 Enumeration*///3.获取所有的name值Enumeration<String> names = req.getParameterNames();while( names.hasMoreElements() ) {String name = names.nextElement();System.out.println("names: " + name);}System.out.println("--------------------------------");/** public java.util.Map<K, V>   getParameterMap()* 返回此请求的参数的 java.util.Map。请求参数是与请求一起发送的额外信息。* 对于 HTTP servlet,参数包含在查询字符串或发送的表单数据中。* return   将参数名称作为键、参数值作为映射值的不可变 java.util.Map。参数映射*          中的键的类型为 String。参数映射中的值的类型为 String 数组。*///4.获取name-values的Map//MapMap<String, String[]> parameterMap = req.getParameterMap();//KeysSet<String> keySet = parameterMap.keySet();//keyfor( String name : keySet ) {//key-valuesString[] values = parameterMap.get(name);//key-valuefor( String value : values ) {System.out.println(name + ": " + value );}}System.out.println("------------------------------");/** HttpServletRequest:* Implements: ServletRequest* Implemented by: HttpServletRequestWrapper* 扩展 javax.servlet.ServletRequest 接口,为 HTTP servlet 提供请求信息。* servlet 容器创建 HttpServletRequest 对象,并将该对象作为参数传递给 * servlet 的 service 方法(doGet、doPost,等等)。*/HttpServletRequest hsr = (HttpServletRequest)req;/** public String    getRequestURI()* 返回此请求的 URL 的一部分,从协议名称一直到 HTTP 请求的第一行中的查询字符串。* Web 容器不会解码此 String。例如:* HTTP请求的第一行                       返回的值* POST /some/path.html HTTP/1.1        /some/path.html* GET http://foo.bar/a.html HTTP/1.0   /a.html* HEAD /xyz?a=b HTTP/1.1               /xyz* 要使用某个方案和主机重新构造 URL,可使用 HttpUtils#getRequestURL。* return   包含 URL 从协议名称一直到查询字符串的那一部分的 String*///5.获取URIString uri = hsr.getRequestURI();System.out.println("URI: " + uri);System.out.println("URL: " + hsr.getRequestURL());//URI: /006_ServletRequest/LoginServlet//URL: http://localhost:8080/006_ServletRequest/LoginServletSystem.out.println("------------------------------");/** public String    getMethod()* 返回用于发出此请求的 HTTP 方法的名称,例如 GET、POST 或 PUT。* 返回的值与 CGI 变量 REQUEST_METHOD 的值相同。* return   指定用于发出此请求的方法名称的 String*///6.获取请求方式String method = hsr.getMethod();System.out.println("method: " + method);//7.获取查询字符串String queryString = hsr.getQueryString();System.out.println("QueryString: " + queryString);//QueryString: user=mac&password=123&interest=reading&interest=watchTV&interest=writeCode}}

运行结果

欢迎加入交流群:451826376

更多信息:www.itcourse.top

007_ServletRequest相关推荐

最新文章

  1. 成功解决local variable 'str' referenced before assignment
  2. vscode设置标签页多行显示
  3. 解决DataGridView绑定List后不能排序的问题
  4. TensorFlow8-mnist手写数字识别入门
  5. 测试常用——linux 基础命令
  6. 董承非: 如何从各种类型的错误中学习
  7. 新手必看:PS钢笔抠图教程
  8. 信号与系统2022春季学期:作业内容与参考答案-汇总
  9. 程序员的macOS系列:精选Mac App
  10. “码头工人”的Docker进阶之路:从轻装上路到网络、存储和安全
  11. Discuz发帖如何设置默认回帖仅作者可见回帖
  12. 【Python计算机视觉】图像到图像的映射(单应性变换、图像扭曲)
  13. 爱因斯坦的逻辑思维题
  14. 360前端星计划学习笔记0410
  15. Android 图片波浪动画,Android水纹波浪动画
  16. 重庆大学计算机在职研究生,重庆大学在职研究生招生学院_重庆大学在职研究生_学校查找_在职研究生教育信息网...
  17. 大学开学初计算机水平测试,请查收这份大学生开学攻略——
  18. 中国修边压力机行业市场供需与战略研究报告
  19. 基于java派大星水产商城mp4计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  20. 通过对比3PL和4PL,来了解什么是4PL

热门文章

  1. php 读取远程txt,asp和PHP读取远程txt文件
  2. Autodesk Inventor Pro 2023 三维机械设计软件安装说明
  3. java程序员玩游戏吗_Java程序员:工作还是游戏 该好好衡量一下
  4. python实现煲机脚本
  5. 个人项目:库洛牌占卜
  6. 指纹识别与指静脉识别在市场应用的情况
  7. 车牌识别--提取HOG特征
  8. max 3485 使用方法详解
  9. gorm preload 搜索_Win10 的13个最佳免费搜索工具(上)
  10. 数据压缩 Huffman编码