Request中藏了什么东东

版权声明:希望能和看到文章的你交个朋友 https://blog.csdn.net/u012954706/article/details/84884213

前言

我们经常会用到后去PV,UV,有时候,

1、判断访问我们网站的ip,
2、以及我们有多个域名,他想知道访问我们的是哪个域名,
3、他想知道访问的是哪个路径(接口)

那么Request就必不可少楼

1、获取Request方法


import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 静态获取HttpServletRequest 和 session的方法
 * 要使用此类需要在web.xml注册org.springframework.web.context.request.RequestContextListener
 */
public class RequestHolder {

    public static HttpSession getSession() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        return request.getSession();
    }

    public static HttpServletRequest getRequest() {
        return ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
    }

    public static HttpServletResponse getResponse() {
        return ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();
    }

}

2、获取Ip


    public static String getIp(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        if(request==null)return null;
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("X-Real-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        if(ip.toLowerCase().contains("x-forwarded-for")){
            String ip_temp = "";
            if(ip.contains(":") && ip.split(":").length>0 && !ip.endsWith(":")){
                ip_temp = ip.split(":")[1];
                if(StringUtils.isBlank(ip_temp)) ip_temp = ip.substring(0,ip.lastIndexOf("X-Forwarded-For"));
            }else{
                ip_temp = ip.substring(0,ip.lastIndexOf("X-Forwarded-For"));
            }
            ip = ip_temp.replaceAll(" ","");
        }
        if (ip.indexOf(",") > -1) {
            String ip_temp = ip.split(",")[0];
            ip_temp = ip_temp.replaceAll(" ", "");
            if(ip_temp.startsWith("10.") && ip.split(",").length>1){
                ip = ip.split(",")[1];
                ip = ip.replaceAll(" ", "");
            }else ip = ip_temp;
        }
        return ip;
    }

3、Request中的其他东西


//http://test.healerjean.cn/healerjean/youhui/web/authorize?params=j4KDX9ovIC%2BD2dKT2FbgcKXduZ9FsJvN3Oq2Y4oBY5eq7qgl4x%2BWWQ%3D%3D

//http://localhost:8081/healerjean/youhui/web/authorize?params=j4KDX9ovIC%2BD2dKT2FbgcKXduZ9FsJvN3Oq2Y4oBY5eq7qgl4x%2BWWQ%3D%3D



3.1、request.getRequestURL 获取全部路径

log.info(request.getRequestURL().toString()); ////全部路径,不带参数 http://localhost:8081/healerjean/youhui/web/authorize

3.2、request.getHeader(“host”) 获取域名+端口(主机名加端口,80不显示)


log.info(request.getHeader("host"));  //localhost:8081  test.healerjean.cn

3.3、request.getServerName 获取服务器的 主机名

log.info(request.getServerName());       //localhost    test.healerjean.cn

3.4、request.getContextPath 、request.getServletPath 、request.getRequestURI具体路径


//4、当然我们的Springboot项目中是没有用项目的名字的,下面来源于网络)  
System.out.println(request.getContextPath()); ///可返回站点的根路径。也就是项目的名字   打印结果:/news  
System.out.println(request.getServletPath()); //打印结果:/main/list.jsp  
System.out.println(request.getRequestURI());  //打印结果:/news/main/list.jsp  

我的项目中,因为没有项目的名字,所以下面二者显示的是一样的
log.info(request.getRequestURI());  //我的项目中没有项目的名字 healerjean/youhui/web/authorize
log.info(request.getServletPath());      //healerjean/youhui/web/authorize

3.5、request.getServerPort() 获取端口号


log.info(request.getServerPort()+"");        //8081  80

3.6、request.getLocalPort() 获取本机端口号(第二个是阿里云的)

log.info(request.getLocalPort()+"");        //8081  8086

3.7、request.getQueryString() 访问的参数

log.info(request.getQueryString()); //参数 ,只适用于get

params=j4KDX9ovIC%2BD2dKT2FbgcKXduZ9FsJvN3Oq2Y4oBY5eq7qgl4x%2BWWQ%3D%3D

3.8、request.getHeader( “referer” ) 获取来源于上一次网页的url

如果是直接根据地址访问的则,则为null
log.info(request.getHeader( "referer" )); //进入这个地址之前是从那个连接过来的,防盗连接使用

3.9、request.getMethod 获取请求方法

request.getMethod() //POST 、GET

3.10、request.getContentType ContentType


request.getContentType()

//get方法中 :null
//post方法 :multipart/form-data; boundary=----WebKitFormBoundaryaIFtRs1mZ4nS9I7j


3.11、request.getParameterNames 获取参数

不适用contentType为multipart/form-data


获取参数的名字,不管你代码里面接收不接收,反正我这里是可以获取到的
request.getParameterNames()

   Enumeration enu=request.getParameterNames();
   while(enu.hasMoreElements()){
       String paraName=(String)enu.nextElement();
       System.out.println(paraName+": "+request.getParameter(paraName));
   }
        
参数如下:
accessDate: 2019-01-02 00:00:00
pageNum: 1
pageSize: 10
post: Healerjean




3.12、request.getHeaderNames 获取head

request.getHeaderNames()

Enumeration headerNames=request.getHeaderNames();
   while(headerNames.hasMoreElements()){
       String paraName=(String)headerNames.nextElement();
       System.out.println(paraName+": "+request.getHeader(paraName));
   }




Post方法

host: localhost:8081
connection: keep-alive
content-length: 453
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
cache-control: no-cache
origin: chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop
postman-token: bfd0da34-bed9-b903-e852-5656de78883c
token: ZDjQ7mDEwlU7t6yEcAK2Xw==
content-type: multipart/form-data; boundary=----WebKitFormBoundaryaIFtRs1mZ4nS9I7j
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en,zh-CN;q=0.9,zh;q=0.8


get方法 

host: localhost:8081
connection: keep-alive
cache-control: max-age=0
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding: gzip, deflate, br
accept-language: en,zh-CN;q=0.9,zh;q=0.8
cookie: _Token=9UUife5cUeoOLO4AOaExoA==; _aToken=ceshib; ab.storage.userId.8f0d3f99-1e3f-4444-bb6c-f73da32cc97c=%7B%22g%22%3A%22437277%22%2C%22c%22%3A1546077272288%2C%22l%22%3A1546077272288%7D; ab.storage.deviceId.8f0d3f99-1e3f-4444-bb6c-f73da32cc97c=%7B%22g%22%3A%229a4b0cd9-da59-9c0e-5aee-a8356e4ea5dd%22%2C%22c%22%3A1546077272296%2C%22l%22%3A1546077272296%7D; ab.storage.sessionId.8f0d3f99-1e3f-4444-bb6c-f73da32cc97c=%7B%22g%22%3A%22c137279a-3f33-6df2-b1fa-189f47793f93%22%2C%22e%22%3A1546079072315%2C%22c%22%3A1546077272293%2C%22l%22%3A1546077272315%7D; CONTAINERID=7485f72559e40cd7d5f09b1347a03d3a73e9a0be752d74c0f76412a132033784|XC3gl|XC3gW; JSESSIONID=13A2286D04353AD554B27FF77DF8CABA



3.13、request.getParameterMap 获取参数map值

不适用contentType为multipart/form-data

request.getParameterMap()


Map<String, String[]> parameterMap = request.getParameterMap();
log.info(JsonUtils.toJson(parameterMap));
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
  System.out.println(entry.getKey());
  for (String string : entry.getValue()) {
      System.out.println(string);
  }
  System.out.println("----------------");
}

4、对于大数据参数的读取

1.getQueryString()
只适用于GET,比如客户端发送http://localhost/testServlet?a=b&c=d&e=f,通过request.getQueryString()得到的是a=b&c=d&e=f.

2.getParameter()
GET和POST都可以使用

但如果是POST请求要根据,表单提交数据的编码方式来确定能否使用.当编码方式是(application/x- www-form-urlencoded)时才能使用.

这种编码方式(application/x-www-form-urlencoded)虽然简单,但对于传输大块的二进制数据显得力不从心.




对于传输大块的二进制数这类数据,浏览器采用了另一种编码方式("multipart/form-data"),这时就需要使用下面的两种方法.

3.getInputStream()
4.getReader()
上面两种方法获取的是Http请求包的包体,因为GET方式请求一般不包含包体.所以上面两种方法一般用于POST请求获取参数.

需要注意的是:
request.getParameter()、 request.getInputStream()、request.getReader()这三种方法是有冲突的,因为流只能被读一次。所以一般使用一次就可以了





感兴趣的,欢迎添加博主微信,

哈,博主很乐意和各路好友交流,如果满意,请打赏博主任意金额,感兴趣的在微信转账的时候,备注您的微信或者其他联系方式。添加博主微信哦。


请下方留言吧。可与博主自由讨论哦

微信 微信公众号 支付宝
微信 微信公众号 支付宝

猜你喜欢

转载自blog.csdn.net/u012954706/article/details/84884213
今日推荐