> 文章列表 > HttpServletRequest

HttpServletRequest

HttpServletRequest

1、HttpServletRequest对象

在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用于封装HTTP请求消息

1.1 获取请求行信息的相关方法

当访问Servlet时,请求消息的请求行中会包含请求方法、请求资源名、请求路径等信息。因此HttpServletRequest接口定义了一系列用于获取请求行的方法

  • 1、String getMethod()

功能:获取HTTP请求消息中的请求方式(例如GET、POST等)

  • 2、String getRequestURI()

功能:获取请求行中资源名称部分,即位于URL的主机和端口之后、参数部分之前的数据

  • 3、String getQueryString()

功能:获取请求行中的参数部分,也就是资源路径后面问号(?)以后的所有内容

  • 4、String getProtocol()

功能:获取请求行中的协议名和版本,例如HTTP/1.0或HTTP/1.1

  • 5、String getContextPath()

功能:获取请求URL中属于Web应用程序的路径,这个路径以“/“开头,表示相对于整个Web站点的根目录,路径结尾不含“/”。如果请求URL属于Web站点的根目录,那么返回结果为空字符串(“”)

  • 6、String getServletPath()

功能:获取Servlet的名称或Servlet所映射的路径

  • 7、String getRemoteAddr()

功能:获取请求客户端的IP地址,其格式类似于“192.168.0.3”

  • 8、String getRemoteHost()

功能:获取请求客户端的完整主机名,其格式类似于“pc1.itcast.cn”。需要注意的是,如果无法解析出客户机的完整主机名,该方法会返回客户端的IP地址

  • 9、int getRemotePort()

功能:获取请求客户端网络连接的端口号

  • 10、String getLocalAddr()

功能:获取Web服务器上接收当前请求网络连接的IP地址

  • 11、String getLocalName()

功能:获取Web服务器上接收当前请求网络连接的IP所对应的主机名

  • 12、int getLocalPort()

功能:获取Web服务器上接收当前请求网络连接的端口号

  • 13、String getServerName()

功能:获取当前请求所指向的主机名,即HTTP请求消息中Host头字段所对应的主机名部分

  • 14、int getServerPort()

功能:获取当前请求所连接的服务器端口号,即HTTP请求消息中Host头字段所对应的端口号部分

  • 15、String getScheme()

功能:获取请求的协议名,例如HTTP、HTTPS或FTP

  • 16、StringBuffer getRequestURL()

功能:获取客户端发出请求时的完整URL,包括协议、服务器名、端口号、资源路径等信息,但不包括后面的查询参数部分。需要注意的是,getRequestURL()方法返回的结果时StringBuffer类型,而不是String类型,这样便于对结果进行修改

案例:

1.2 获取请求头的相关方法

当请求Servlet时,需要通过请求头向服务器传递附加消息,例如客户端可以接受的数据类型、压缩方式、语言等。为此HttpServletRequest接口定义了一系列用于获取HTTP请求头字段的方法

  • 1、String getHeader(String name)

功能:获取一个指定头字段的值,若没有指定头字段则返回null,若含有多个则返回一个头字段值

  • 2、Enumeration getHeaders(String name)

功能:返回一个Enumeration集合对象,该集合对象由请求消息中出现的某个指定名称的所有头字段值组成。在多数情况下,一个头字段名在请求消息中只出现了一次,但有时候可能出现多次

  • 3、Enumeration getHeaderNames()

功能:获取一个包含所有请求头字段的Enumeration对象

  • 4、int getIntHeader(String name)

功能:获取指定名称的头字段,并且将其值转为int类型。需要注意的是,如果指定名称的头字段不存在,返回值为-1;如果获取到的头字段的值不能转为int类型,将发生NumberFormatException异常

  • 5、long getDateHeader(String name)

功能:获取指定头字段的值,并将其按GMT时间格式转换成一个代表日期/时间的长整数,这个长整数是自1970年1月1日0点0分0秒算起的以毫秒为单位的时间值

  • 6、String getContentType()

功能:获取Content-Type头字段的值,结果为String类型

  • 7、int getContentLength()

功能:获取Content-Length头字段的值,结果为int类型

  • 8、String getCharacterEncoding()

功能:返回请求消息的实体部分的字符集编码,通常从Content-Type头字段中进行提取,结果为String类型

案例:

1.3 请求转发

Servlet之间可以相互跳转,利用Servlet的跳转可以很容易把一项任务按模块分开

Servlet的跳转要通过RequestDispatcher接口的实例对象实现

HttpServletRequest接口提供了getRequestDispatcher()方法用于获取RequestDispatcher对象

  • RequestDispatcher getRequestDispatcher(String path)

该方法返回封装了某条路径所指定资源的RequestDispatcher对象

参数path必须以 “/” 开头,用于表示当前Web应用的根目录

注意:WEB-INF目录中的内容对RequestDispatcher对象也是可见的,因此传递给该方法的资源可以是WEB-INF目录中的文件

获取到RequestDispatcher对象后,如果当前Web资源不想处理请求,RequestDispatcher接口提供了一个forward()方法,该方法可以将当前请求传递给其他Web资源,由其他资源对这些信息进行处理并将响应提交给客户端,这种方式被称为请求转发

  • forward(ServletRequest request,ServletRespon respon)

forward方法用于将请求从一个Servlet传递给另一个Web资源。在Servlet中,可以对请求做一个初步处理,然后通过调用forward方法将请求传递给其他资源进行响应

注意:该方法必须在将响应提交给客户端之前被调用,否则将抛出IllegalStateException异常

forward工作原理:

当浏览器访问Servlet1时,可以通过forward()方法将请求转发给其他Web资源,其他Web资源处理完请求后,直接将响应结果返回到浏览器

案例:使用RequestForwardServlet类将请求转发到一个新的Servlet页面

地址栏显示的是RequestForwardServlet的请求路径,但是浏览器却显示除了ResultServlet中要输出的内容。这是因为请求转发是发生在服务器内部的行为,从RequestForwardServlet到ResultServlet属于一次请求,在一次请求中可以使用request属性进行数据共享

1.4 获取请求参数

HttpServletRequest接口中定义了一系列获取参数的方法

  • 1、String getParameter(String name)

功能:获取某个指定名称的参数值,如果请求消息中没有包含指定名称的参数则返回null;如果指定名称的参数存在但没有设置值则返回一个空串;如果包含多个指定名称的参数则返回第一个出现的参数值

  • 2、String[] getParameterValues(String name)

功能:返回一个String类型的数组,HTTP请求消息中可以有多个相同名称的参数(通常由一个包含多个同名的字段元素的form表单生成)

  • 3、Enumeration getParameterNames()

功能:返回一个包含请求消息中所有参数名的Enumeration对象,在此基础上可以对请求消息中的所有参数进行遍历处理

  • 4、Map getParameterMap()

功能:将请求消息中的所有参数名和值装入一个Map对象中返回

案例;

 

 1.5 通过Request对象传递数据

Request对象不仅可以获取一系列数据,还可以通过属性传递数据

  • 1、void setAttribute()

功能:将一个对象和一个name关联后存储进ServletRequest对象中

注意:如果已经存在指定名称的属性,该方法会先删除原来的属性,然后再添加新属性,如果传的是null则等于removeAttribute()

  • 2、Obj getAttribute()

功能:从ServletRequest对象中返回指定名称的属性对象

  • 3、void removeAttribute()

功能:从ServletRequest对象中删除指定名称的属性

  • 4、Enumation getAttributeNames()

功能:返回一个包含所有ServletRequest对象中的属性名的Enumeration对象