在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用于封装HTTP请求消息
当访问Servlet时,请求消息的请求行中会包含请求方法、请求资源名、请求路径等信息。因此HttpServletRequest接口定义了一系列用于获取请求行的方法
功能:获取HTTP请求消息中的请求方式(例如GET、POST等)
功能:获取请求行中资源名称部分,即位于URL的主机和端口之后、参数部分之前的数据
功能:获取请求行中的参数部分,也就是资源路径后面问号(?)以后的所有内容
功能:获取请求行中的协议名和版本,例如HTTP/1.0或HTTP/1.1
功能:获取请求URL中属于Web应用程序的路径,这个路径以“/“开头,表示相对于整个Web站点的根目录,路径结尾不含“/”。如果请求URL属于Web站点的根目录,那么返回结果为空字符串(“”)
功能:获取Servlet的名称或Servlet所映射的路径
功能:获取请求客户端的IP地址,其格式类似于“192.168.0.3”
功能:获取请求客户端的完整主机名,其格式类似于“pc1.itcast.cn”。需要注意的是,如果无法解析出客户机的完整主机名,该方法会返回客户端的IP地址
功能:获取请求客户端网络连接的端口号
功能:获取Web服务器上接收当前请求网络连接的IP地址
功能:获取Web服务器上接收当前请求网络连接的IP所对应的主机名
功能:获取Web服务器上接收当前请求网络连接的端口号
功能:获取当前请求所指向的主机名,即HTTP请求消息中Host头字段所对应的主机名部分
功能:获取当前请求所连接的服务器端口号,即HTTP请求消息中Host头字段所对应的端口号部分
功能:获取请求的协议名,例如HTTP、HTTPS或FTP
功能:获取客户端发出请求时的完整URL,包括协议、服务器名、端口号、资源路径等信息,但不包括后面的查询参数部分。需要注意的是,getRequestURL()方法返回的结果时StringBuffer类型,而不是String类型,这样便于对结果进行修改
案例:
当请求Servlet时,需要通过请求头向服务器传递附加消息,例如客户端可以接受的数据类型、压缩方式、语言等。为此HttpServletRequest接口定义了一系列用于获取HTTP请求头字段的方法
功能:获取一个指定头字段的值,若没有指定头字段则返回null,若含有多个则返回一个头字段值
功能:返回一个Enumeration集合对象,该集合对象由请求消息中出现的某个指定名称的所有头字段值组成。在多数情况下,一个头字段名在请求消息中只出现了一次,但有时候可能出现多次
功能:获取一个包含所有请求头字段的Enumeration对象
功能:获取指定名称的头字段,并且将其值转为int类型。需要注意的是,如果指定名称的头字段不存在,返回值为-1;如果获取到的头字段的值不能转为int类型,将发生NumberFormatException异常
功能:获取指定头字段的值,并将其按GMT时间格式转换成一个代表日期/时间的长整数,这个长整数是自1970年1月1日0点0分0秒算起的以毫秒为单位的时间值
功能:获取Content-Type头字段的值,结果为String类型
功能:获取Content-Length头字段的值,结果为int类型
功能:返回请求消息的实体部分的字符集编码,通常从Content-Type头字段中进行提取,结果为String类型
案例:
Servlet之间可以相互跳转,利用Servlet的跳转可以很容易把一项任务按模块分开
Servlet的跳转要通过RequestDispatcher接口的实例对象实现
HttpServletRequest接口提供了getRequestDispatcher()方法用于获取RequestDispatcher对象
该方法返回封装了某条路径所指定资源的RequestDispatcher对象
参数path必须以 “/” 开头,用于表示当前Web应用的根目录
注意:WEB-INF目录中的内容对RequestDispatcher对象也是可见的,因此传递给该方法的资源可以是WEB-INF目录中的文件
获取到RequestDispatcher对象后,如果当前Web资源不想处理请求,RequestDispatcher接口提供了一个forward()方法,该方法可以将当前请求传递给其他Web资源,由其他资源对这些信息进行处理并将响应提交给客户端,这种方式被称为请求转发
forward方法用于将请求从一个Servlet传递给另一个Web资源。在Servlet中,可以对请求做一个初步处理,然后通过调用forward方法将请求传递给其他资源进行响应
注意:该方法必须在将响应提交给客户端之前被调用,否则将抛出IllegalStateException异常
forward工作原理:
当浏览器访问Servlet1时,可以通过forward()方法将请求转发给其他Web资源,其他Web资源处理完请求后,直接将响应结果返回到浏览器
案例:使用RequestForwardServlet类将请求转发到一个新的Servlet页面
地址栏显示的是RequestForwardServlet的请求路径,但是浏览器却显示除了ResultServlet中要输出的内容。这是因为请求转发是发生在服务器内部的行为,从RequestForwardServlet到ResultServlet属于一次请求,在一次请求中可以使用request属性进行数据共享
HttpServletRequest接口中定义了一系列获取参数的方法
功能:获取某个指定名称的参数值,如果请求消息中没有包含指定名称的参数则返回null;如果指定名称的参数存在但没有设置值则返回一个空串;如果包含多个指定名称的参数则返回第一个出现的参数值
功能:返回一个String类型的数组,HTTP请求消息中可以有多个相同名称的参数(通常由一个包含多个同名的字段元素的form表单生成)
功能:返回一个包含请求消息中所有参数名的Enumeration对象,在此基础上可以对请求消息中的所有参数进行遍历处理
功能:将请求消息中的所有参数名和值装入一个Map对象中返回
案例;
Request对象不仅可以获取一系列数据,还可以通过属性传递数据
功能:将一个对象和一个name关联后存储进ServletRequest对象中
注意:如果已经存在指定名称的属性,该方法会先删除原来的属性,然后再添加新属性,如果传的是null则等于removeAttribute()
功能:从ServletRequest对象中返回指定名称的属性对象
功能:从ServletRequest对象中删除指定名称的属性
功能:返回一个包含所有ServletRequest对象中的属性名的Enumeration对象