Request常用方法
getRequestURL方法返回客戶端發出請求時的完整URL。
getRequestURI方法返回請求行中的資源名部分。
getQueryString 方法返回請求行中的參數部分。
getPathInfo方法返回請求URL中的額外路徑信息。額外路徑信息是請求URL中的位於Servlet的路徑之后和查詢參數之前的內容,它以“/”開頭。
getRemoteAddr方法返回發出請求的客戶機的IP地址。
getRemoteHost方法返回發出請求的客戶機的完整主機名。
getRemotePort方法返回客戶機所使用的網絡端口號。
getLocalAddr方法返回WEB服務器的IP地址。
getLocalName方法返回WEB服務器的主機名。
所用工具:Myeclipse
實例1 通過request對象獲取客戶端請求信息(JSP實現)
在Myeclipse中新建web project,在WebRoot中新建requestApp1.jsp,發布到Tomcat,代碼如下:
<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.util.*" %> <html> <head> </head> <body> 請求信息如下:<br> 請求的方法是:<%=request.getMethod()%> <br> 請求的URI是:<%=request.getRequestURI()%> <br> 請求的協議是:<%=request.getProtocol()%> <br> 接受客戶提交信息的頁面路徑是:<%=request.getServletPath()%> <br> 請求的協議是:<%=request.getProtocol()%> <br> 請求中的查詢字符串是:<%=request.getQueryString()%> <br> 請求信息的總長度是:<%=request.getContentLength()%> <br> 服務器名稱是:<%=request.getServerName()%> <br> 提供HTTP服務的服務器端口號是:<%=request.getServerPort()%> <br> 客戶端IP地址是:<%=request.getRemoteAddr()%> <br> 客戶端機器的名稱是:<%=request.getRemoteHost()%> <br> HTTP頭文件中User-Agent的值是:<%=request.getHeader("User-Agent")%> <br> HTTP頭文件中accept的值是:<%=request.getHeader("accept")%> <br> HTTP頭文件中Host的值是:<%=request.getHeader("Host")%> <br> HTTP頭文件中accept-encoding的值是:<%=request.getHeader("accept-encoding")%> <br>頭名字的一個枚舉: <% Enumeration enumHead=request.getHeaderNames(); while(enumHead.hasMoreElements()) out.println((String)enumHead.nextElement()); %> </body> </html>
結果如下:
實例2 通過request對象獲取客戶端請求信息(Servlet實現)
在src下新建包yqq.request.study(此步驟可省略),在包中新建Servlet,取名RequestDemo01.java,代碼如下:
package yqq.request.study; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RequestDemo01 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 1.獲得客戶機信息 */ String requestUrl = request.getRequestURL().toString();//得到請求的URL地址 String requestUri = request.getRequestURI();//得到請求的資源 String queryString = request.getQueryString();//得到請求的URL地址中附帶的參數 String remoteAddr = request.getRemoteAddr();//得到來訪者的IP地址 String remoteHost = request.getRemoteHost(); int remotePort = request.getRemotePort(); String remoteUser = request.getRemoteUser(); String method = request.getMethod();//得到請求URL地址時使用的方法 String pathInfo = request.getPathInfo(); String localAddr = request.getLocalAddr();//獲取WEB服務器的IP地址 String localName = request.getLocalName();//獲取WEB服務器的主機名 response.setCharacterEncoding("UTF-8");//設置將字符以"UTF-8"編碼輸出到客戶端瀏覽器 //通過設置響應頭控制瀏覽器以UTF-8的編碼顯示數據,如果不加這句話,那么瀏覽器顯示的將是亂碼 response.setHeader("content-type", "text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.write("獲取到的客戶機信息如下:"); out.write("<hr/>"); out.write("請求的URL地址:"+requestUrl); out.write("<br/>"); out.write("請求的資源:"+requestUri); out.write("<br/>"); out.write("請求的URL地址中附帶的參數:"+queryString); out.write("<br/>"); out.write("來訪者的IP地址:"+remoteAddr); out.write("<br/>"); out.write("來訪者的主機名:"+remoteHost); out.write("<br/>"); out.write("使用的端口號:"+remotePort); out.write("<br/>"); out.write("remoteUser:"+remoteUser); out.write("<br/>"); out.write("請求使用的方法:"+method); out.write("<br/>"); out.write("pathInfo:"+pathInfo); out.write("<br/>"); out.write("localAddr:"+localAddr); out.write("<br/>"); out.write("localName:"+localName); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
運行結果如下:
實例3 通過request對象獲取客戶端請求頭信息
在src下新建包yqq.request.study(此步驟可省略),在包中新建Servlet,取名RequestDemo02.java,代碼如下:
package yqq.request.study; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RequestDemo02 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8");//設置將字符以"UTF-8"編碼輸出到客戶端瀏覽器 //通過設置響應頭控制瀏覽器以UTF-8的編碼顯示數據 response.setHeader("content-type", "text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); Enumeration<String> reqHeadInfos = request.getHeaderNames();//獲取所有的請求頭 out.write("獲取到的客戶端所有的請求頭信息如下:"); out.write("<hr/>"); while (reqHeadInfos.hasMoreElements()) { String headName = (String) reqHeadInfos.nextElement(); String headValue = request.getHeader(headName);//根據請求頭的名字獲取對應的請求頭的值 out.write(headName+":"+headValue); out.write("<br/>"); } out.write("<br/>"); out.write("獲取到的客戶端Accept-Encoding請求頭的值:"); out.write("<hr/>"); String value = request.getHeader("Accept-Encoding");//獲取Accept-Encoding請求頭對應的值 out.write(value); Enumeration<String> e = request.getHeaders("Accept-Encoding"); while (e.hasMoreElements()) { String string = (String) e.nextElement(); System.out.println(string); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
運行結果如下:
實例4 獲得客戶機請求參數(客戶端提交的數據)
在WebRoot中新建html_form.jsp,代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Html的Form表單元素</title> </head> <fieldset style="width:510px;"> <legend>Html的Form表單元素</legend> <!--form表單的action屬性規定當提交表單時,向何處發送表單數據,method屬性指明表單的提交方式,分為get和post,默認為get--> <form action="${pageContext.request.contextPath}/RequestDemo03" method="post"> <!--輸入文本框,SIZE表示顯示長度,maxlength表示最多輸入長度--> 編 號(文本框): <input type="text" name="userid" value="NO." size="2" maxlength="2"><br> <!--輸入文本框,通過value指定其顯示的默認值--> 用戶名(文本框):<input type="text" name="username" value="請輸入用戶名"><br> <!--密碼框,其中所有輸入的內容都以密文的形式顯示--> 密 碼(密碼框): <!-- 表示的是一個空格--> <input type="password" name="userpass" value="請輸入密碼"><br> <!--單選按鈕,通過checked指定默認選中,名稱必須一樣,其中value為真正需要的內容--> 性 別(單選框): <input type="radio" name="sex" value="男" checked>男 <input type="radio" name="sex" value="女">女<br> <!--下拉列表框,通過<option>元素指定下拉的選項--> 部 門(下拉框): <select name="dept"> <option value="技術部">技術部</option> <option value="銷售部" SELECTED>銷售部</option> <option value="財務部">財務部</option> </select><br> <!--復選框,可以同時選擇多個選項,名稱必須一樣,其中value為真正需要的內容--> 興 趣(復選框): <input type="checkbox" name="inst" value="唱歌">唱歌 <input type="checkbox" name="inst" value="游泳">游泳 <input type="checkbox" name="inst" value="跳舞">跳舞 <input type="checkbox" name="inst" value="編程" checked>編程 <input type="checkbox" name="inst" value="上網">上網 <br> <!--大文本輸入框,寬度為34列,高度為5行--> 說 明(文本域): <textarea name="note" cols="34" rows="5"> </textarea> <br> <!--隱藏域,在頁面上無法看到,專門用來傳遞參數或者保存參數--> <input type="hidden" name="hiddenField" value="hiddenvalue"/> <!--提交表單按鈕,當點擊提交后,所有填寫的表單內容都會被傳輸到服務器端--> <input type="submit" value="提交(提交按鈕)"> <!--重置表單按鈕,當點擊重置后,所有表單恢復原始顯示內容--> <input type="reset" value="重置(重置按鈕)"> </form> <!--表單結束--> </fieldset> </body> <!--完結標記--> </html> <!--完結標記-->
可以運行:
在src下新建包yqq.request.study(此步驟可省略),在包中新建Servlet,取名RequestDemo03.java,代碼如下:
package yqq.request.study; import java.io.IOException; import java.text.MessageFormat; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RequestDemo03 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //客戶端是以UTF-8編碼提交表單數據的,所以需要設置服務器端以UTF-8的編碼進行接收,否則對於中文數據就會產生亂碼 request.setCharacterEncoding("UTF-8"); /** * 編 號(文本框): <input type="text" name="userid" value="NO." size="2" maxlength="2"> */ String userid = request.getParameter("userid");//獲取填寫的編號,userid是文本框的名字,<input type="text" name="userid"> /** * 用戶名(文本框):<input type="text" name="username" value="請輸入用戶名"> */ String username = request.getParameter("username");//獲取填寫的用戶名 /** * 密 碼(密碼框):<input type="password" name="userpass" value="請輸入密碼"> */ String userpass = request.getParameter("userpass");//獲取填寫的密碼 String sex = request.getParameter("sex");//獲取選中的性別 String dept = request.getParameter("dept");//獲取選中的部門 //獲取選中的興趣,因為可以選中多個值,所以獲取到的值是一個字符串數組,因此需要使用getParameterValues方法來獲取 String[] insts = request.getParameterValues("inst"); String note = request.getParameter("note");//獲取填寫的說明信息 String hiddenField = request.getParameter("hiddenField");//獲取隱藏域的內容 String instStr=""; /** * 獲取數組數據的技巧,可以避免insts數組為null時引發的空指針異常錯誤! */ for (int i = 0; insts!=null && i < insts.length; i++) { if (i == insts.length-1) { instStr+=insts[i]; }else { instStr+=insts[i]+","; } } String htmlStr = "<table>" + "<tr><td>填寫的編號:</td><td>{0}</td></tr>" + "<tr><td>填寫的用戶名:</td><td>{1}</td></tr>" + "<tr><td>填寫的密碼:</td><td>{2}</td></tr>" + "<tr><td>選中的性別:</td><td>{3}</td></tr>" + "<tr><td>選中的部門:</td><td>{4}</td></tr>" + "<tr><td>選中的興趣:</td><td>{5}</td></tr>" + "<tr><td>填寫的說明:</td><td>{6}</td></tr>" + "<tr><td>隱藏域的內容:</td><td>{7}</td></tr>" + "</table>"; htmlStr = MessageFormat.format(htmlStr, userid,username,userpass,sex,dept,instStr,note,hiddenField); response.setCharacterEncoding("UTF-8");//設置服務器端以UTF-8編碼輸出數據到客戶端 response.setContentType("text/html;charset=UTF-8");//設置客戶端瀏覽器以UTF-8編碼解析數據 response.getWriter().write(htmlStr);//輸出htmlStr里面的內容到客戶端瀏覽器顯示 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
點擊“提交(提交按鈕)”,可以得到結果如下:
學習參考網址http://www.cnblogs.com/love540376/p/5336881.html