Request實例


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表示最多輸入長度-->&nbsp;&nbsp;號(文本框):
    <input type="text" name="userid" value="NO." size="2" maxlength="2"><br>
    <!--輸入文本框,通過value指定其顯示的默認值-->
    用戶名(文本框):<input type="text" name="username" value="請輸入用戶名"><br>
    <!--密碼框,其中所有輸入的內容都以密文的形式顯示-->&nbsp;&nbsp;碼(密碼框):
    <!--&nbsp;表示的是一個空格-->
    <input type="password" name="userpass" value="請輸入密碼"><br>
    <!--單選按鈕,通過checked指定默認選中,名稱必須一樣,其中value為真正需要的內容-->&nbsp;&nbsp;別(單選框):
    <input type="radio" name="sex" value="男" checked><input type="radio" name="sex" value="女">女<br>
    <!--下拉列表框,通過<option>元素指定下拉的選項-->&nbsp;&nbsp;門(下拉框):
    <select name="dept">
        <option value="技術部">技術部</option>
        <option value="銷售部" SELECTED>銷售部</option>
        <option value="財務部">財務部</option>
    </select><br>
    <!--復選框,可以同時選擇多個選項,名稱必須一樣,其中value為真正需要的內容-->&nbsp;&nbsp;趣(復選框): 
    <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行-->&nbsp;&nbsp;明(文本域):
    <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");
        /**
         * 編&nbsp;&nbsp;號(文本框):
           <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");//獲取填寫的用戶名
        /**
         * 密&nbsp;&nbsp;碼(密碼框):<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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM