JavaWEB开发之<HttpServletRequest>的应用
(本新手正在学习)本贴为每天通过笔记整理的一些内容,只为了解自己的学习进度,不足之处请见谅^_^
小知识:可以修改Tomcat里的连接器的编码为UTF-8(默认为ISO-8859-1)
Web客户端发送给Web服务器的HTTP请求消息可以分为三个部分:请求行、请求头、消息正文(也叫实体内容)。消息下正文只在以PSOT、PUT和DELETE等方式发出的请求消息中才出现,譬如,HTML的FORM表单中的各个元素信息通常都以POST请求方式的消息正文传递给WEB服务器。HTTP和HTML这两个WEB应用的协议都提供了对表单提交数据的支持,但数据接收则由WEB服务器自行处理。Servlet API中定义了一个ServletRequest接口类来作为获取客户端请求信息的基本接口,Servlet程序通过调用ServletRequest对象的方法可以获知客户端的请求信息,以及客户机和服务器的网络环境信息,例如,获取客户发送的请求消息的各个部分和客户端IP地址。HttpServletRequest是专用于HTTP协议的ServletRequest子接口,它用于封装HTTP请求信息,增加了获取HTTP协议专有的头信息的方法,支持Cookies和session跟踪,以及获取HTTP请求消息参数的功能。
客户端对一个Servlet的每次访问请求,Servlet引擎都会创建一个HttpServletRequest请求对象和一个HttpServletResponse响应对象,然后调用Servlet的service()方法,并将这两个对象作为参数传递给它。所以,对HttpServletRequest的编程应用,也就是在service()方法内部调用作为参数传递进来的HttpServletRequest请求对象的各种方法。
HTTP请求消息的请求行可以分为三个部分:请求方式、资源路径和HTTP协议版本,例:GET /web/servlet/RequestURI?param1=a¶m2=b HTTP/1.1
HttpServletRequest接口定义了若干获取请求行中的各个部分的方法。
getMethod 方法返回HTTP请求消息中的请求方式(如GET POST)请求行第一部分
getRequestURI方法返回请求行中的资源名部分,也就是位于URL的主机和端口之后、参数部分之前的部分内容。例:http://localhost:8080/servlet/RequestURI?name=a
getRequestURI返回/servlet/RequestURI.
getQueryString方法返回请求行中的参数部分,也就是资源路径后面的问号(?)后面的内容,例?name=a 如果资源路径后本身就没有参数getQueryString 返回null。
getProtocol方法返回请求行中的协议名和版本,即HTTP/1.0 或HTTP/1.1
getContextPath方法返回请求URL所属于的Web应用程序的路径,这个路径以/开头,表示相对于整个web站点的根目录,路径结尾不含/。如果请示URL属于web站点的根目录,那么返回结果为空字符串(“”)。
getPathInfo方法返回请求URL的额外路径信息。额外路径信息是请求URL的位于Servlet的路径之后和参数之前的内容,以/开头。如果没有getPathInfo返回null。
setRemoteAddr方法返回发出请求的客户机的IP地址,其格式为 127.0.0.1
getRemoteHost方法返回发出请求的客户机的完整主机名,如Servlet引擎不能解析出客户机的完整主机名,那么该方法就返回客户机的IP地址。
getRemoteProt方法返回发出请求的客户机所使用的网络接口的端口号。
getLocalAddr方法返回Web服务上接收当前请求的网络接口的IP地址。
getLocalName方法返回Web服务上接收当前请求的网络接口的IP地址所对应的主机名。
getLocalProt方法返回WEB服务器上接收当前请求的网络接口的端口号。
getServerName方法返回当前请求所指向的主机名。如果HTTP请求消息的Host头字段中包含有主机名部分,那么返回值即为该主机名部分。
getServerPort方法返回当前请求所连接的服务器端口号。如果HTTP请求消息的Host头字段中包含有端口号部分,那么返回值即为该端口号部分。
getScheme方法返回请求的协议名,例如http、https或ftp。
getRequestURL方法返回客户端发出请求时的完整URL,包括协议、服务器名、端口号、资源路径信息,但不包含后面的查询参数部分。注意,getRequestURL方法返回的结果是StringBuffer类型、而不是String类型,这样更便于对结果进行修改,例如,在其后面追加查询参数。
ServletRequest和HttpServletRequest接口中定义了若干用于读取HTTP请求消息中的头字段的方法,其中的getHeader方法是一个通用的方法,可用于读取所有的头字段。除了getHeader方法外,HttpServletRequest还定义了一些便利的方法,例如,getContentType、getContentLength、getIntHeader、getDateHeader等方法,用来方便地读取那些常用的请求头和读取包含有日期、整数数据的请求头。
getHeader方法用于返回一个指定名称的头字段的值,语法定义:public java.lang.String getHeader(java.lang.String name)
如果请求消息中没有包含指定名称的头字段,getHeader方法返回Null;
getHeaders方法用于返回一个Enumeration集合对象,该集合对象请求消息中出现的某个指定名称的所有头字段值组成。语法定义 : public java.util.Enumeration getHeader(java.lang.String name)
getHeaderNames方法用于返回一个包含请求消息的所有字段名的Enumeration对象,在此基本上,可以对请求消息中的所有头字段进行遍历处理。getHeaderNames方法的语法定义: public java.util.Enumeration getHeaderNames()
getIntHeader方法用于获取一个指定名称的头字段的值并将其转换成int类型后返回,如果指定名称的头字段不存在,返回值为-1;
getDateHeader方法用于获取一个指定名称的头字段的值并将其按GMT时间格式转换成一个代表日期/时间的长整数后返回,这个长整数是自1970年1月1日0点0分0秒算起的以毫秒为单位的时间值。getDateHeader方法用于读取含有日期的头字段,例如:If-Modified-Since,如果指定的头字段不存在,返回值为-1;
getContentType方法用于直接返回Content-Type头字段的值,结果为String类型。
getContentLength方法用于直接返回Content-Length头字段的值,结果为int类型。
getCharacterEncoding方法用于返回请求消息的实体部分的字符编码,通常从Content-Type头字段中进行提取。