当我们在编写java web服务端代码时,经常使用HttpServletRequest.getParameter(value)来获取http的参数,但你有没有发现只有getParameter而没有setParameter方法?
例如:https://www.pornhub.com/v?mode=mila&type=teen
假如pornhub服务端的逻辑是你提供,你只需对应的servlet方法中写上一句request.getParameter("mode")就能获取url传递的参数,但你并没有看到request.setParameter方法。
那么这个参数设置是谁做的呢? 答案是web服务器,tomcat,jetty等。
问题又来了,tomcat是如何实现参数设置的呢?
HttpServletRequest是一个接口,它定义了http请求对象中一系列操作方法,诸如:getHeader,getSession等。
getParameter方法在它的父级接口ServletRequest中,通过ideal跟踪其实现方法,分别经过ServletRequest->ServletRequestWrapper->httpServletRequestWrapper->ApplicationHttpRequest
最后具体实现定位于:tomcat-embed-core-9.0.37.jar org.apache.catalina.ApplicatonHttpRequest类中。
该类中定义了一个Map来存放http request的参数。
……
/**
* The request parameters