Request中的各种方法
前言
Request中方法众多,对于Java Web程序员来说,种种方法都会在工作中常常用到。Request由于不是JDK的一部分,这些方法的用法也没有专门的API可以查,所以在工作中遇到Request中方法的时候,所以常常感到困惑,因为觉得网上写的不清楚,自己又懒得写一个Web测试程序。这篇文章,一次性把Request中的各个方法的返回写在这里并做一个详细的总结,以备以后工作中用到可以随时查看。
示例
为了让后台可以取到queryString(这个专门在get和post的区别的文章中会讲解的),做一个表单,用post方式提交:
<body> <form action="request?a=1&b=2&c=3" method="post"> <input type="submit" value=" 提交 " /> </form> </body>
web.xml就不写了,大家应该都会配置,看下后台doPost方法的写法:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("request.getAuthType():" + request.getAuthType()); // 获取保护servlet的认证方案名(BASIC或SSL),未受保护的servlet返回的就是null System.out.println("request.getCharacterEncoding():" + request.getCharacterEncoding()); // 获取字符编码 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.getLocalAddr():" + request.getLocalAddr()); // 获取应用服务器的IP地址 System.out.println("request.getLocalName():" + request.getLocalName()); // 获取应用服务器的主机名 System.out.println("request.getLocalPort():" + request.getLocalPort()); // 获取应用服务器的端口号 System.out.println("request.getMethod():" + request.getMethod()); // 获取请求方式获取请求方式(GET与POST为主,也会有PUT、DELETE、INPUT) System.out.println("request.getPathInfo():" + request.getPathInfo()); System.out.println("request.getPathTranslated():" + request.getPathTranslated()); System.out.println("request.getProtocol():" + request.getProtocol()); // 获取客户端向服务端传送数据使用的协议名称 System.out.println("request.getQueryString():" + request.getQueryString()); // 获取追加到Url后面的查询字符串 System.out.println("request.getRemoteAddr():" + request.getRemoteAddr()); // 获取发出请求的客户端的IP地址 System.out.println("request.getRemoteHost():" + request.getRemoteHost()); // 获取发出请求的客户端的主机名 System.out.println("request.getRemotePort():" + request.getRemotePort()); // 获取发出请求的客户端的端口号 System.out.println("request.getRemoteUser():" + request.getRemoteUser()); // 如果用户已经过认证,则返回发出请求的用户登录信息 System.out.println("request.getRequestedSessionId():" + request.getRequestedSessionId()); // 获取sessionId System.out.println("request.getRequestURI():" + request.getRequestURI()); // 获取"/"+工程名+请求路径 System.out.println("request.getRequestURL():" + request.getRequestURL()); // 获取完整的请求地址,不带queryString System.out.println("request.getScheme():" + request.getScheme()); // 获取当前链接使用的协议,一般应用就是http,SSL返回https System.out.println("request.getServerName():" + request.getServerName()); // 获取URL请求的名字(以Ip请求就是Ip,以域名请求就是域名) System.out.println("request.getServerPort():" + request.getServerPort()); // 获取URL请求的端口号 System.out.println("request.getServletPath():" + request.getServletPath()); // 获取请求路径 System.out.println("request.isSecure():" + request.isSecure()); // 获取此请求是否使用安全协议(比如https) }
我从本地发起一个请求"http://localhost:8080/TestWeb/request?a=1&b=2&c=3",先看下用工具抓取的此次请求、响应的数据(火狐、360、谷歌都有,按F12即可):
再看一下后台的运行结果:
request.getAuthType():null request.getCharacterEncoding():null request.getContentLength():0 request.getContentType():application/x-www-form-urlencoded request.getContextPath():/TestWeb request.getLocalAddr():127.0.0.1 request.getLocalName():dell request.getLocalPort():8080 request.getMethod():POST request.getPathInfo():null request.getPathTranslated():null request.getProtocol():HTTP/1.1 request.getQueryString():a=1&b=2&c=3 request.getRemoteAddr():127.0.0.1 request.getRemoteHost():127.0.0.1 request.getRemotePort():3405 request.getRemoteUser():null request.getRequestedSessionId():B198D2D352F2F23A1B3754246D68B803 request.getRequestURI():/TestWeb/request request.getRequestURL():http://localhost:8080/TestWeb/request request.getScheme():http request.getServerName():localhost request.getServerPort():8080 request.getServletPath():/request request.isSecure():false
getParameter、getAttribute/setAttribute、getSession/setSession等类似方法,大家都比较熟悉,也比较不会搞错,就不列了,列的都是一些相对不常用的request方法。很多方法都已经能看出返回的是什么了,但是有些方法由于我这里是从本地发到本地的,所以看不到效果,不过注释上也给了详细的解释了,两个没写注释的方法查不到是什么意思,也试不出来怎么样才不是null,以后会记得关注,知道了就会更新。
==================================================================================
我不能保证写的每个地方都是对的,但是至少能保证不复制、不黏贴,保证每一句话、每一行代码都经过了认真的推敲、仔细的斟酌。每一篇文章的背后,希望都能看到自己对于技术、对于生活的态度。
我相信乔布斯说的,只有那些疯狂到认为自己可以改变世界的人才能真正地改变世界。面对压力,我可以挑灯夜战、不眠不休;面对困难,我愿意迎难而上、永不退缩。
其实我想说的是,我只是一个程序员,这就是我现在纯粹人生的全部。
==================================================================================
我不能保证写的每个地方都是对的,但是至少能保证不复制、不黏贴,保证每一句话、每一行代码都经过了认真的推敲、仔细的斟酌。每一篇文章的背后,希望都能看到自己对于技术、对于生活的态度。
我相信乔布斯说的,只有那些疯狂到认为自己可以改变世界的人才能真正地改变世界。面对压力,我可以挑灯夜战、不眠不休;面对困难,我愿意迎难而上、永不退缩。
其实我想说的是,我只是一个程序员,这就是我现在纯粹人生的全部。
==================================================================================