黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

Servlet教程

HttpServletRequest詳解

HttpServletRequest 接口繼承自 ServletRequest 接口,其主要作用是封裝 HTTP 請(qǐng)求消息。由于 HTTP 請(qǐng)求消息分為請(qǐng)求行、請(qǐng)求消息頭和請(qǐng)求消息體三部分。因此,在 HttpServletRequest 接口中定義了獲取請(qǐng)求行、請(qǐng)求頭和請(qǐng)求消息體的相關(guān)方法。

本節(jié)將針對(duì)常用的獲取請(qǐng)求行和請(qǐng)求消息頭的相關(guān)方法進(jìn)行講解,下節(jié)《Java servlet獲取form表單數(shù)據(jù)(參數(shù))》繼續(xù)講解如何通過 HttpServletRequest 接口獲取用戶提交的 form 表單數(shù)據(jù)。

獲取請(qǐng)求行信息的相關(guān)方法

當(dāng)訪問 Servlet 時(shí),所有請(qǐng)求消息將被封裝到 HttpServletRequest 對(duì)象中,請(qǐng)求消息的請(qǐng)求行中包含請(qǐng)求方法、請(qǐng)求資源名、請(qǐng)求路徑等信息,為了獲取這些信息,HttpServletRequest 接口定義了一系列方法,如表 1 所示。

表 1 獲取請(qǐng)求行信息的常用方法

方法聲明

功能描述

String getMethod()

該方法用于獲取 HTTP 請(qǐng)求消息中的請(qǐng)求方式(如 GET、POST 等)

String getRequestURI()

該方法用于獲取請(qǐng)求行中的資源名稱部分即位于 URL 的主機(jī)和端門之后、參數(shù)部分之前的部分

String getQueryString()

該方法用于獲取請(qǐng)求行中的參數(shù)部分,也就是資源路徑后問號(hào)(?)以后的所有內(nèi)容

String getContextPath()

該方法用于獲取請(qǐng)求 URL 中屬于 Web 應(yīng)用程序的路徑,這個(gè)路徑以 / 開頭,表示相對(duì)于整個(gè) Web 站點(diǎn)的根目錄,路徑結(jié)尾不含 /。如果請(qǐng)求 URL 屬于 Web 站點(diǎn)的根目錄,那么返回結(jié)果為空字符串("")

String getServletPath()

該方法用于獲取 Servlet 的名稱或 Servlet 所映射的路徑

String getRemoteAddr()

該方法用于獲取請(qǐng)求客戶端的 IP 地址,其格式類似于 192.168.0.3

String getRemoteHost()

該方法用于獲取請(qǐng)求客戶端的完整主機(jī)名,其格式類似于 pcl.mengma.com。需要注意的是,如果無法解析出客戶機(jī)的完整主機(jī)名,那么該方法將會(huì)返回客戶端的 IP 地址

int getRemotePort()

該方法用于獲取請(qǐng)求客戶端網(wǎng)絡(luò)連接的端口號(hào)

String getLocaIAddr()

該方法用于獲取 Web 服務(wù)器上接收當(dāng)前請(qǐng)求網(wǎng)絡(luò)連接的 IP 地址

String getLocalName()

該方法用于獲取 Web 服務(wù)器上接收當(dāng)前網(wǎng)絡(luò)連接 IP 所對(duì)應(yīng)的主機(jī)名

int getLocalPort()

該方法用于獲取 Web 服務(wù)器上接收當(dāng)前網(wǎng)絡(luò)連接的端口號(hào)

String getServerName()

該方法用于獲取當(dāng)前請(qǐng)求所指向的主機(jī)名,即 HTTP 請(qǐng)求消息中 Host 頭字段所對(duì)應(yīng)的主機(jī)名部分

int gctServcrPort()

該方法用于獲取當(dāng)前請(qǐng)求所連接的服務(wù)器端口號(hào),即 HTTP 請(qǐng)求消息中 Host 頭字段所對(duì)應(yīng)的端口號(hào)部分

StringBuffcr getRequestURL()

該方法用于獲取客戶端發(fā)出請(qǐng)求時(shí)的完整 URL,包括協(xié)議、服務(wù)器名、端口號(hào)、 資源路徑等信息,但不包括后面的査詢參數(shù)部分。注意,getRequcstURL() 方法返冋的結(jié)果是 StringBuffer 類型,而不是 String 類型,這樣更便于對(duì)結(jié)果進(jìn)行修改

表 1 列出了一系列用于獲取請(qǐng)求消息行信息的方法,為了使讀者更好地理解這些方法,下面通過案例演示這些方法的使用。

在 MyEclipse 中創(chuàng)建一個(gè)名稱為 servletDemo02 的項(xiàng)目,在 src 下新建一個(gè)名稱為 com.mengma.request 的包,在包中創(chuàng)建一個(gè)名為 RequestLineServlet 的 Servlet 類,在該類中編寫用于獲取請(qǐng)求行中相關(guān)信息的方法,如下所示。

package com.mengma.request;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestLineServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        // 獲取請(qǐng)求行的相關(guān)信息
        out.println("getMethod : " + request.getMethod());
        out.println("getRequestURI:" + request.getRequestURL());
        out.println("getQueryString:" + request.getQueryString());
        out.println("getContextPath:" + request.getContextPath());
        out.println("getServletPath:" + request.getServletPath());
        out.println("getRemoteAddr : " + request.getRemoteAddr());
        out.println("getRemoteHost : " + request.getRemoteHost());
        out.println("getRemotePort : " + request.getRemotePort());
        out.println("getLocalAddr : " + request.getLocalAddr());
        out.println("getLocalName : " + request.getLocalName());
        out.println("getLocalPort : " + request.getLocalPort());
        out.println("getServerName : " + request.getServerName());
        out.println("getServerPort : " + request.getServerPort());
        out.println("getRequestURL : " + request.getRequestURL());
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
      doGet(request, response);
    }
}

啟動(dòng) Tomcat 服務(wù)器,在瀏覽器的地址欄中輸入地址 http://localhost:8080/servletDemo02/RequestLineServlet 訪問 RequestLineServlet,瀏覽器的顯示結(jié)果如圖 1 所示。

從圖 1 中可以看出,瀏覽器顯示出了請(qǐng)求 RequestLineServlet 時(shí)發(fā)送的請(qǐng)求行信息。由此可見,通過 HttpServletRequest 對(duì)象可以很方便地獲取請(qǐng)求行的相關(guān)信息。

圖 1 運(yùn)行結(jié)果

獲取請(qǐng)求消息頭的相關(guān)方法

當(dāng)瀏覽器發(fā)送 Servlet 請(qǐng)求時(shí),需要通過請(qǐng)求消息頭向服務(wù)器傳遞附加信息,例如,客戶端可以接收的數(shù)據(jù)類型、壓縮方式、語言等。為此,在 HttpServletRequest 接口中定義了一系列用于獲取 HTTP 請(qǐng)求頭字段的方法,如表 2 所示。

表 2 獲取請(qǐng)求消息頭的方法

方法聲明

功能描述

String getHeader(String name)

該方法用于獲取一個(gè)指定頭字段的值,如果請(qǐng)求消息中沒有包含指定的頭字段,則 getHeader() 方法返回 null;如果請(qǐng)求消息中包含多個(gè)指定名稱的頭字段,則 getHeader() 方法返回其中第一個(gè)頭字段的值

Enumeration getHeaders(String name)

該方法返回一個(gè) Enumeration 集合對(duì)象,該集合對(duì)象由請(qǐng)求消息中出現(xiàn)的某個(gè)指定名稱的所有頭字段值組成。在多數(shù)情況下,一個(gè)頭字段名在請(qǐng)求消息中只出現(xiàn)一次,但有時(shí)可能會(huì)出現(xiàn)多次

Enumeration getHeaderNames()

該方法用于獲取一個(gè)包含所有請(qǐng)求頭字段的 Enumeration 對(duì)象

 

int getIntHeader(String name) 該方法用于獲取指定名稱的頭字段,并且將其值轉(zhuǎn)為 int 類型。需要注意的是,如果指定名稱的頭字段不存在,則返回值為 -1;如果獲取到的頭字段的值不能轉(zhuǎn)為 int 類型,則將發(fā)生 NumberFormatException 異常

long getDateHeader(String name)

該方法用于獲取指定頭字段的值,并將其按 GMT 時(shí)間格式轉(zhuǎn)換為一個(gè)代表日期/時(shí)間的長整數(shù),該長整數(shù)是自 1970 年 1 月 1 日 0 時(shí) 0 分 0 秒算起的以毫秒為單位的時(shí)間值

String getContentType()

該方法用于獲取 Content-Type 頭字段的值,結(jié)果為 String 類型

int getContentLength()

該方法用于獲取 Content-Length 頭字段的值,結(jié)果為 int 類型

String getCharacterEncoding()

該方法用于返回請(qǐng)求消息的實(shí)體部分的字符集編碼,通常是從 Content-Type 頭字段中進(jìn)行提取,結(jié)果為 String 類型

表 2 列出了一系列用于讀取 HTTP 請(qǐng)求消息頭字段的方法,為了更好地掌握這些方法,下面通過案例學(xué)習(xí)這些方法的使用。

在 com.mengma.request 包中創(chuàng)建一個(gè)名為 RequestHeadersServlet 的 Servlet 類,該類中使用 getHeaderNames() 方法獲取請(qǐng)求消息頭信息,如下所示。

package com.mengma.request;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestHeadersServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        // 獲取請(qǐng)求消息中的所有頭字段
        Enumeration headerNames = request.getHeaderNames();
        //用循環(huán)遍歷所有請(qǐng)求頭,并通過 getHeader() 方法獲取一個(gè)指定名稱的頭字段
        while (headerNames.hasMoreElements()) {
            String headerName = (String) headerNames.nextElement();
            out.print(headerName + ":" + request.getHeader(headerName)
     + "<br />");
        }
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

啟動(dòng) Tomcat 服務(wù)器,在瀏覽器的地址欄中輸入 http://localhost:8080/servletDemo02/RequestHeadersServlet 訪問 RequestHeadersServlet,瀏覽器的顯示結(jié)果如圖 2 所示。

圖 2 運(yùn)行結(jié)果

全部教程
主站蜘蛛池模板: 欧美在线播放视频 | 日本高清www午色夜黄 | 日本香蕉视频在线观看 | 一本一道波多野结衣456 | 三级黄色片日本 | 国产在线视频一区二区三区 | 欧美成人精品免费播放 | 日韩爽爽视频爽爽 | 爱啪啪网站| 亚洲免费大片 | 一个人看的在线www片高清 | 羞羞视频网址 | 丝袜制服中文字幕 | 精品国产不卡一区二区三区 | 亚洲欧美韩国日产综合在线 | 久热996re这里有精品 | 大学生一级特黄的免费大片视频 | 国产精品一区在线麻豆 | 日本中文字幕免费 | 天天综合天天添夜夜添狠狠添 | 亚洲噜噜噜噜噜影院在线播放 | 九九精品在线 | 激情综合婷婷亚洲图片 | 欧美视频在线一区 | 特级一级毛片免费看 | 欧美专区亚洲专区 | 99精品国产综合久久久久 | 99精品国产第一福利网站 | 三级欧美日韩 | 欧美深夜福利网站在线观看 | 一级片网 | 欧美亚洲另类一区中文字幕 | 久久er国产精品免费观看1 | 日韩亚洲一区中文字幕在线 | 天干天夜啪天天碰 | 欧美乱一级在线观看 | 日日操日日插 | 国产在线精品一区二区中文 | 亚洲一区二区三区高清网 | 成人黄色在线播放 | 婷婷影院在线观看 |