本文主要是介绍HttpServletRequest介绍和头信息的获取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1 Tomcat请求响应
- 2 HttpServletRequest基本功能
- 2.1 HttpServletRequest的功能
- 2.2 request获取请求头数据
- 2.3 request获取请求相关的其它方法
1 Tomcat请求响应
Web
服务器收到客户端的http
请求,会针对每一次请求,分别创建一个用于代表请求的request
对象、和代表响应的response
对象,request和response
对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response
对象就行了
2 HttpServletRequest基本功能
2.1 HttpServletRequest的功能
HttpServletRequest
在JavaWeb
中非常重要的一个类。它是Servlet
的service()
方法的参数之一!所以必须必须要掌握它!
request
的功能可以分为以下几种:
- 封装了请求头数据;
- 封装了请求正文数据,如果是GET请求,那么就没有正文;
- request是一个域对象,可以把它当成Map来添加获取数据;
- 做请求的转发
2.2 request获取请求头数据
String value = request.getHeader(“请求头名称”);
request
对象可以用来获取请求头数据,当然,这些请求数据都是Tomcat
封装到request
中去的。我们在service()
方法中可以直接来获取!
request
与请求头相关的方法有:
String getHeader(String name)
:获取指定名称的请求头;Enumeration getHeaderNames()
:获取所有请求头名称;int getIntHeader(String name)
:获取值为int类型的请求头。
package com.rl.servlet;import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class HelloServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//根据头信息的key获得值String headVal = request.getHeader("Host");System.out.println("Host:" + headVal);// Host:localhost:8080//通过getHeaderNames获得所有头名字的Enumeration集合Enumeration<String> headNames = request.getHeaderNames();while(headNames.hasMoreElements()){String headName = headNames.nextElement();System.out.println(headName+":"+request.getHeader(headName));}
// 打印结果:
// host:localhost:8080
// connection:keep-alive
// cache-control:max-age=0
// upgrade-insecure-requests:1
// user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87Safari/537.36
// accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
// accept-encoding:gzip, deflate, sdch, br
// accept-language:zh-CN,zh;q=0.8}
}
2.3 request获取请求相关的其它方法
request
中还提供了与请求相关的其他方法,有些方法是为了我们更加便捷的方法请求头数据而设计,有些是与请求URL
相关的方法。
int getContentLength()
:获取请求正文的字节数,GET请求没有正文,没有正文返回-1;String getContentType()
:获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认为application/x-www-form-urlencoded
(理解为字符串类型),其它类型以后再学;String getMethod()
:返回请求方法,例如:GETLocale getLocale()
:返回当前客户端浏览器支持的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;String getCharacterEncoding()
:获取请求编码,如果没有setCharacterEncoding(),那么返回null。表示使用ISO-8859-1编码;void setCharacterEncoding(String code)
:设置请求编码,只对正文有效!注意,对于GET而言,没有正文!!!所以此方法只能对POST请求中的参数有效!
http://localhost:8080/hello/oneServlet?name=zhangSan
String getContextPath()
:返回上下文路径,例如:/项目名称String getQueryString()
:返回请求URL中的参数,例如:name=zhangSanString getRequestURI()
:返回请求URI路径,例如:/hello/oneServletStringBuffer getRequestURL()
:返回请求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息;String getServletPath()
:返回Servlet路径,例如:/oneServletString getRemoteAddr()
:返回当前客户端的IP地址;String getRemoteHost()
:返回当前客户端的主机名,但这个方法的实现还是获取IP地址;int getRemotePort()
:返回客户端的端口号,每次请求都会变;String getSchema()
:返回请求协议,例如:http;String getServerName()
:返回主机名,例如:localhostint getServerPort()
:返回服务器端口号,例如:80
注意:
要想获得服务器的绝对路径,之前是使用request.getRealPath(File.separator)
现在已经不推荐使用了
但是可以使用这个方法request.getServletContext().getRealPath(File.separator)
来获取服务器绝对路径
获得的服务器绝对路径如下:
================
D:\SoftWare-NeedSoftWare\Tomcat-Environment\Tomcat8.5\tomcat 8.5 8081\webapps\student-manage
================
代码实战:
System.out.println("request.getContentLength(): " + request.getContentLength());System.out.println("request.getContentType(): " + request.getContentType());System.out.println("request.getContextPath(): " + request.getContextPath());System.out.println("request.getMethod(): " + request.getMethod());System.out.println("request.getLocale(): " + request.getLocale());System.out.println("request.getQueryString(): " + request.getQueryString());System.out.println("request.getRequestURI(): " + request.getRequestURI());System.out.println("request.getRequestURL(): " + request.getRequestURL());System.out.println("request.getServletPath(): " + request.getServletPath());System.out.println("request.getRemoteAddr(): " + request.getRemoteAddr());System.out.println("request.getRemoteHost(): " + request.getRemoteHost());System.out.println("request.getRemotePort(): " + request.getRemotePort());System.out.println("request.getScheme(): " + request.getScheme());System.out.println("request.getServerName(): " + request.getServerName());System.out.println("request.getServerPort(): " + request.getServerPort());
获取结果:
这篇关于HttpServletRequest介绍和头信息的获取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!