03-【request对象获取请求的数据 & request对象存取值】
request概述(封装了客户端所有的请求数据)
request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。
request对象的创建:
request是由tomcat服务器创建的。request对象是在发出请求的时候创建的,一次请求会伴着request对象的创建和失效
1、获取网络信息【HttpServletReuest对象】
>获取客户端IP:request.getRemoteAddr()
>获取客户端口号:request.getRemotePort()
>获取服务端IP:request.getLocalAddr()
>获取服务端口号:request.getLocalPort();
>请求方式,request.getMethod(),可能是POST也可能是GET
通过User-Agent识别用户浏览器类型
1 public void getNetInfo(HttpServletRequest request, 2 HttpServletResponse response){ 3 //获取客户端的ip 4 String remoteAddr = request.getRemoteAddr(); 5 //获取客户端的端口号 6 int remotePort = request.getRemotePort(); 7 //获取服务器的ip 8 String localAddr = request.getLocalAddr(); 9 //获取服务器的端口号 10 int localPort = request.getLocalPort(); 11 System.out.println("客户端ip和端口号:"+remoteAddr +"---"+remotePort); 12 System.out.println("服务器的ip和端口号:"+localAddr +"---"+localPort); 13 // 获取请求方法 14 String method = request.getMethod(); 15 System.out.println("获取请求方式:"+method); 16 // 获取请求头信息 17 String userAgent = request.getHeader("User-Agent"); 18 System.out.println(userAgent);// 获取名为User-Agent请求头 19 // 判断浏览器的类型 20 if(userAgent.toLowerCase().contains("chrome")){ 21 System.out.println("注意:"+remoteAddr+"正在使用Google浏览器访问您的服务器"); 22 }else if(userAgent.toLowerCase().contains("firefox")){ 23 System.out.println("注意:"+remoteAddr+"正在使用火狐浏览器访问您的服务器"); 24 }else if(userAgent.toLowerCase().contains("msie")){ 25 System.out.println("注意:"+remoteAddr+"正在使用Internet Explorer浏览器访问您的服务器"); 26 }else{ 27 System.out.println("不知名的浏览器正在访问您的服务器"); 28 }
测试访问:当别人输入你的网络地址就可以获取到是谁的IP访问的:http://192.168.58.82:8080/servlet02/login.html
2、获取请求行信息 请求的url
http://127.0.0.1:8080/servlet02/request01?uname=zhangsan&pwd=123456
>String getScheme():返回请求协议:http
>String getServerName():返回主机名:127.0.0.1
>int getServerPort():返回服务器端口号:8080
>String getContextPath():返回上下文路径(获取项目名):/servlet02
>String getServletPath():返回Servlet路径(对应的是url-pattern):/request01
>String getQueryString():返回请求URL中的参数:uname=zhangsan&pwd=123456
>String getRequestURI():返回请求URI路径(等于项目名+Servlet路径):/servlet02/request01
>StringBuffer getRequestURL():返回请求URL路径(除了参数以外的路径信息):http://127.0.0.1:8080/servlet02/request01
>String getMethod():返回请求方式:GET
代码:
1 private void getRequestLine(HttpServletRequest request, 2 HttpServletResponse response) { 3 //request获取URL的相关信息 4 // 获取请求协议 5 String scheme = request.getScheme(); 6 System.out.println("返回请求协议:"+scheme); 7 // 获取主机名 8 String serverName = request.getServerName(); 9 System.out.println("返回请求协议:"+serverName); 10 // 获取服务器端口号 11 int serverPort = request.getServerPort(); 12 System.out.println("返回获取端口号:"+serverPort); 13 // 获取上下文路径 14 String contextPath = request.getContextPath(); 15 System.out.println("返回上下文路径(获取项目名):"+contextPath); 16 // 获取servlet路径 17 String servletPath = request.getServletPath(); 18 System.out.println("返回Servlet路径(对应的是url-pattern):"+servletPath); 19 // 获取URL中的参数 20 String queryString = request.getQueryString(); 21 System.out.println("参数信息(?后面的参数):"+queryString); 22 // 获取URI的路径 23 String requestURI = request.getRequestURI(); 24 System.out.println("URI路径(等于项目名+Servlet路径):"+requestURI); 25 // 获取URL路径 26 StringBuffer requestURL = request.getRequestURL(); 27 System.out.println("URL路径(除了参数以外的路径信息):"+requestURL); 28 // 获取请求方法 29 String method = request.getMethod(); 30 System.out.println("获取请求方式:"+method); 31 }