前言
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,以后會記得關注,知道了就會更新。