一、HttpServletRequest概述
HttpServletRequest接口继承自ServletRequest接口
HttpServletRequest专门用于封装HTTP请求消息
HttpServletRequest提供了一些用于访问请求消息的方法,如获取请求行、获取请求头等
二、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应用程序的路径,以/开头,结尾没有斜杠
6. String getServletPath() ,该方法用于获取Servlet映射的路径或者Servlet的名称
7、String getRemoteAddr() ,该方法用于获取发送请求的客户端的IP地址
8、String getRemoteHost() ,该方法用于获取发送请求的客户端的完整主机名,如果解析不到则返回IP地址
9、int getRemotePort() ,该方法用于获取发送请求的客户端的端口号
10、String getLocalAddr() ,该方法用于获取Web服务器上接收当前请求的网络的IP地址
11、String getLocalName() ,该方法用于获取Web服务器上接收当前请求的网络的IP地址对应的主机名
12、int getLocalPort() ,该方法用于获取web服务器上接收当前网络连接的端口号
13、String getServerName() ,该方法用于获取当前请求所指向的主机名,即HTTP请求消息中Host字段所对应的主机名部分
14、String getServerPort() ,该方法用于获取当前请求所连接的服务器端口号,即HTTP请求消息中Host字段所对应的端口号部分
15、String getSchema() ,该方法用于获取请求的协议名,如HTTP或HTTPS
16、StringBuffer getRequestURL() ,该方法用于获取客户端发出请求时的完整URL,包括协议、服务器名、端口号、资源路径等,但不包括后面的查询参数部分,StringBuffer类型方便修改
范例:
@WebServlet("/HttpServletRequestDemo") public class HttpServletRequestDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); System.out.println(method); String requestURI = req.getRequestURI(); System.out.println(requestURI); String queryString = req.getQueryString(); System.out.println(queryString); String protocol = req.getProtocol(); System.out.println(protocol); String contextPath = req.getContextPath(); System.out.println(contextPath); String servletPath = req.getServletPath(); System.out.println(servletPath); String remoteAddr = req.getRemoteAddr(); System.out.println(remoteAddr); String remoteHost = req.getRemoteHost(); System.out.println(remoteHost); int remotePort = req.getRemotePort(); System.out.println(remotePort); String localAddr = req.getLocalAddr(); System.out.println(localAddr); String localName = req.getLocalName(); System.out.println(localName); int localPort = req.getLocalPort(); System.out.println(localPort); String serverName = req.getServerName(); System.out.println(serverName); int serverPort = req.getServerPort(); System.out.println(serverPort); String scheme = req.getScheme(); System.out.println(scheme); StringBuffer requestURL = req.getRequestURL(); System.out.println(requestURL); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }
输出结果:
获取请求头信息相关方法:
1、String getHeader(String name) ,该方法作用是获取请求头中指定名称字段的值,如果没有该字段则返回null,如果有多个该指定名称的字段,则返回第一个字段的值
2、Enumeration getHeaders(String name) ,返回一个Enumeration对象,该对象包含所有请求头中指定名称字段的值
3、Enumeration getHeaderName() ,返回一个包含所有请求头字段的Enumeration对象
4、int getIntHeader(String name) ,该方法获取一个指定请求头字段的值,并将该字段的值转为int类型再返回,如果该字段不存在则返回-1,如果该字段的值不能转为int类型则抛出NumberFormatException异常
5、long getDateHeaders(String name) ,该方法获取一个指定请求头字段的值,并将其转为一个代表日期/时间的长整数,这个长整数是1970年1月1日0时0分0秒算起到现在的毫秒值
6、String getContentType() ,获取Content-Type字段的值
7、int getContentLength() ,获取Content-Length字段的值
8、String getCharacterEncoding() ,获取请求消息的实体部分的字符集编码,通常从
Content-Type字段中截取
范例:
@WebServlet("/HttpServletRequestDemo") public class HttpServletRequestDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Enumeration<String> headerNames = req.getHeaderNames(); while(headerNames.hasMoreElements()){ String s = headerNames.nextElement(); System.out.println(s+":"+req.getHeader(s)); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }
获取请求参数相关方法:
1、String getParameter(String name) ,该方法获取指定名称参数的参数值,如果没有该参数则返回null,如果该参数没有设置值则返回空串,如果该参数有多个值则返回第一个
2、String getParameterValues(String name) ,该方法用于获取同一个参数名称的所有值
3、Enumeration getParameterNames() ,该方法用于返回包含所有参数名的Enumeration对象
4、Map getParameterMap() ,将参数名和参数值装入一个Map对象中返回
范例:
@WebServlet("/HttpServletRequestDemo") public class HttpServletRequestDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Enumeration<String> parameterNames = req.getParameterNames(); while (parameterNames.hasMoreElements()) { String s = parameterNames.nextElement(); String[] parameterValues = req.getParameterValues(s); System.out.println(s+":"+Arrays.toString(parameterValues)); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }