007_ServletRequest
2024-04-30 01:42:27
简介
Servlet API 中定义的 ServletRequest 接口类用于封装请求消息。
HttpServletRequest 是专用于HTTP协议的ServletRequest 子接口,它用于封装HTTP 请求消息。
在service() 方法内部调用HttpServletRequest 对象的各种方法来获取请求消息。
获取请求行的相关信息
- HTTP请求消息的请求行包括请求方式、资源路径和HTTP协议版本:
GET /lampbrother/servlet/RequestURI?param1=a¶m2=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相关推荐
最新文章
- 计算阶比分析 matlab_(案例)层次聚类分析Matlab编码计算
- Graph Normalization (GN):为图神经网络学习一个有效的图归一化
- CSRF攻击原理与防御方法
- linux系统声卡安装教程,Linux系统下如何安装声卡驱动?
- 计算机教学研讨会议记录,教学教研工作会议记录3.doc
- Mycat分库分表的简单实践 / 用Mycat,学会数据库读写分离、分表分库
- 心理测评全系统设计与代码实现
- imdisk虚拟光驱安装linux,imdisk使用教程_Imdisk工具使用方法介绍_imdisk_imdisk虚拟光驱...
- 英寸和厘米的换算python_OJ实例:厘米换算英尺英寸
- 笔记本电脑无法进入睡眠状态_小方法解决电脑无法进入睡眠模式问题
- SDN控制器Ryu、Floodlight、OpenDayLight的安装以及Mininet连接
- 201671030116宋菲菲 实验三作业互评与改进报告
- RK平台 USB转RS485
- WebService的简单案例记录(Java)
- python2中print不换行及print不换行且无空格写法
- 基于SSM的家政服务管理系统
- C++学习/温习:新型源码学编程(三)
- XAG的真实性以及投资价值
- “狼来了”的VR风,占领不了的客厅
- JSON与fastjson