tomcat服务器把http请求信息封装到HttpServletRequest对象中。
开发者通过HttpServletRequest对象得到http请求信息。
常用方法:
请求行:
request.getMethod(); 请求方式
request.getRequestURI() 请求资源
request.getRequestURL()
request.getProtocol() 协议版本
请求头:
request.getHeader("name"): 根据请求头获取请求值
request.getHeaderNames(): 获取所有请求头名称
实体内容:
request.getInputStream();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//:获取请求行信息
System.out.println("请求方法:"+request.getMethod());
System.out.println("请求URI:"+request.getRequestURI());
System.out.println("请求URL:"+request.getRequestURL());
System.out.println("请求协议版本:"+request.getProtocol());
//:获取请求头信息
System.out.println("获取某一头信息:"+request.getHeader("Accept-Encoding"));
// System.out.println("一个头信息多个值:");request.getHeaders(xxx);
System.out.println("获取所有头信息:");
Enumeration en = request.getHeaderNames();
while(en.hasMoreElements()){
String name=(String) en.nextElement();
System.out.println(name+":"+request.getHeader(name));
}
//:获取实体内容
InputStream in = request.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while( (len=in.read(buf))!=-1 ){
String str = new String(buf,0,len);
System.out.print(str);
}
}
结论: service方法和doXXX方法的关系?
- service方法是程序的入口。我们的代码逻辑就在这个方法被调用到。
- 在HttpServlet的service方法源码中,根据不同请求方式调用了不同的doXX方法,
所以我们在开发servlet的时候,就不需要去覆盖service方法,而是去doXX方法。
因为get和post是最常用的的两种请求方式,所以只需要覆盖doGet和doPost方法即可!
userAgent的作用:
userAgent可以识别出浏览器的所属性设备:
- chrome浏览器
- firefox浏览器
- ie
- iphone
- ......
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String userAgent = request.getHeader("user-agent");
if(userAgent.contains("Firefox")){
response.getWriter().write("你正在使用火狐浏览器");
}else if(userAgent.contains("Chrome")){
response.getWriter().write("你正在使用谷歌浏览器");
}else if(userAgent.contains("Trident")){
response.getWriter().write("你正在是IE浏览器");
}else{
response.getWriter().write("识别不了的浏览器");
}
}
referer的作用:
referer表示当前的请求资源来自哪里;
可以用来判断用户是否是通过广告页面进来的;