JSP Servlet中Request與Response所有成員方法的研究


  HttpServletRequest與HttpServletResponse作為Servlet中doGet、doPost等方法中傳遞的參數,承接了Http請求與響應中的大部分功能,請求的解析與響應的返回都需要靠這兩個對象進行,他們中的所有方法及功能在下邊總結了一下,希望能對學習Java Web開發有所幫助。

  1、HttpServletRequest:

    /*
     * 記錄各個request.get的值
     * request.getAsyncContext();AsyncContext
     * 獲取異步傳輸的文本內容
     * request.getAttribute(String);Object
     * Attribute與Parameter不同,Attr是在程序里用SetA設置進去的,而Par是接收網頁的參數
     * 多用於session的設值,session.setA,可以設置自己的類型,getP只能接收String,而getA可以為object
     * request.getAttributeNames();Enumeration<String>
     * 獲取一個枚舉類型,hasmoreelement,nextelement
     * request.getAuthType();String
     * 返回身份驗證方法的名稱,basic,SSL,form,client_cert和digest,若沒有身份驗證則為null
     * AuthType可在web.xml中配置,使用<login-config><auth-method>xx<real-name>xxx來配置
     * 一般用於遠程網頁鏈接,即輸入網頁地址,彈出一個登陸界面,那里的時候才會用
     * 讀取文件頭中的Authorization信息
     * request.getCharacterEncoding();String
     * 返回網頁使用的編碼,在網頁的charset中的值
     * request.getContentLength();int
     * 只用於POST請求,表示所發送數據的字節數
     * request.getContentLengthLong();long
     * 同上,用於數據量非常大時,long八個字節
     * request.getContentType();String
     * 獲取content-type,包括編碼。<meta content="text/html; charset=gb2312" http-equiv="Content-Type"/>
     * Content-Type,用於定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件
     * request.getContextPath();String
     * 獲取項目的根目錄名,如本項目應該是/MyTestWeb。返回指定servlet上下文(web應用)的URL的前綴。
     * 用絕對路徑時,可以使用getRealPath()(不推薦),request.getSession().getServletContext().getRealPath("/")
     * request.getCookies();Cookie[]
     * 很明顯,返回網頁的cookies,數組形式cookie是名稱+值的形式保存的
     * request.getDateHeader("String");long
     * 用於將指定頭信息的部分轉換成方便轉換為時間類型的長整數型,簡化getHeaders
     * request.getDispatcherType();DispatcherType
     * 未知...
     * request.getHeader("headname");String
     * 獲取指定頭信息
     * request.getHeaderNames();Enumeration<String>
     * 獲取名字的枚舉,用於遍歷
     * request.getHeaders("headersname");Enumeration<String>
     * 獲取一個name的多個值序列,返回請求給出的指定類型的所有HTTP頭標的名稱的枚舉值,它對具有多取值的頭標非常有用。
     * request.getInputStream();ServletInputStream繼承自io.InputStream
     * 獲取請求內容,可以獲取post方法在網頁中通過send傳遞的內容,但是要通過InputStreamReader實例化
     * 同時InputStreamReader也不能直接被讀取為字符串,要使用BufferedReader實例化InputStreamReader
     * 之后就可以使用BufferedReader的readline來獲取中間的數據了。
     * 或者直接使用InputStream的read方法寫給read的參數,byte數組
     * 該方法只能讀取一次,因為是流,所以讀完就沒了
     * request.getIntHeader("head");int
     * 從頭內容獲取數值
     * request.getLocalAddr();String
     * 獲取本地地址,根據訪問方法不同而不同,為127.0.0.1或者公網ip
     * request.getLocale();Locale(util中)
     * 獲取本地位置信息,若ZHCN等等
     * request.getLocales();Enumeration<Locale>
     * 有多個位置信息時獲取枚舉
     * request.getLocalName();String
     * 獲取本地IP的名稱,如127.0.0.1就是localhost
     * request.getLocalPort();int
     * 獲取端口號,本應用就是8081
     * request.getMethod();String
     * 獲取Http方法,有get,head,put,delete,post,options
     * request.getParameter("code");String
     * 獲取提交參數,即網址?后面的內容,一一對應關系。即便是POST,這個也只能獲取?后面的參數
     * POST與GET的不同是可以send里面寫內容,網址里面傳遞的參數還是一樣的
     * request.getParameterMap();Map<String,String[]>
     * 返回類型是String[]的原因是參數名稱有可能相同,如果用getPara返回同名參數多個值的會把各個值結合起來
     * PS:遍歷Map的方法,Set<Entry<String, String[]>> set = map.entrySet();先獲取EntrySet
     * 然后獲取EntrySet的迭代器Iterator<Entry<String, String[]>> it = set.iterator();
     * 接着使用迭代的getNext來獲取各個元素Entry<String, String[]> entry = it.next();
     * 最后使用Entry.getvalue獲取字符串數組
     * request.getParameterNames();Enumeration<String>
     * 獲取參數名的枚舉
     * request.getParameterValues("code");String[]
     * 獲取同名參數的多個值
     * request.getPart("file");Part
     * 用於上傳文件,一個Part為一個文件,mime類型為multipart/form-data 
     * 程序中需要添加@MultipartConfig注解
     * request.getParts();Collection<Part>
     * 獲取一個Part的集合,用於上傳多個文件
     * request.getPathInfo();String
     * 返回在URL中指定的任意附加路徑信息。不帶參數,一般是相對於Servlet的路徑
     * pathinfo返回的字符串是經過Servlet服務器URL Decode過的。
     * 輸出:URL中Servlet路徑之后、查詢字符串之前的那部分。
     * request.getPathTranslated();String
     * 映射到服務器實際路徑之后的路徑信息。
     * request.getProtocol();String
     * 獲取協議信息和版本號,即HTTP/1.1
     * request.getQueryString();String
     * 這是字符串形式的附加到URL后面的查詢字符串,數據仍舊是URL編碼的。
     * 在Servlet中很少需要用到未經解碼的數據,一般使用getParameter訪問各個參數。
     * request.getReader();BufferedReader
     * 獲取BufferedReader,和inputStream那一大堆獲取的內容一樣。。。
     * request.getRealPath("/");String
     * 獲取絕對路徑,被廢棄了,請使用request.getSession().getServletContext().getRealPath("/")
     * request.getRemoteAddr();String
     * 客戶端的IP
     * request.getRemoteHost();String
     * 客戶端的主機名
     * request.getRemotePort();int
     * 客戶端的端口號
     * request.getRemoteUser();String
     * 客戶端的用戶名
     * request.getRequestDispatcher("");RequestDispatcher
     * 請求轉發,獲取請求過來的地址,與該地址共享一個Request
     * request.getRequestedSessionId();String
     * 返回這個請求相應的session id
     * request.getRequestURI();String
     * 獲得請求URL,不包含請求內容,不包含域名
     * request.getRequestURL();StringBuffer
     * 獲取URL,包含域名,不包含請求內容
     * 未被Servlet服務器URL Decode過。
     * request.getScheme();String
     * 返回協議名稱,http
     * request.getServerName();String
     * 獲得服務器名,本地IP
     * request.getServerPort();int
     * 獲取服務器端口號
     * request.getServletContext();ServletContext
     * 獲取該Servlet的相關信息,getServletConfig().getServletContext().getServerInfo()
     * request.getServletPath();String
     * URL中調用Servlet的那一部分,不包含附加路徑信息和查詢字符串。
     * request.getSession();HttpSession
     * 獲取Session對話,用於與網頁通信,很有用
     * equest.getSession(boolean);HttpSession
     * request.getSession(true):若存在會話則返回該會話,否則新建一個會話。
     * request.getSession(false):若存在會話則返回該會話,否則返回NULL
     * request.getUserPrincipal();Principal
     * 返回一個java.security.Principal  對象,該對象包含當前授權用戶的名稱
     * 使用request.getUserPrincipal().getName()得到用戶名
     * 沒有通過認證就沒有返回值,是用戶登錄后才有值的,通過了JAAS認證,也就是登錄
     * 
     * request.authenticate(HttpServletResponse response);boolean
     * 證明是真實的、可靠的或有效的;鑒定,使生效
     * request.changeSessionId();String
     * Change the session id of the current session associated with this request and return the new session id.
     * request.isAsyncStarted();boolean
     * 異步傳輸是否開始
     * request.isAsyncSupported();boolean
     * 是否支持異步傳輸
     * isRequestedSessionIdFromCookie();boolean
     * SessionId是否是從cookies中獲得的
     * request.isRequestedSessionIdFromUrl();boolean
     * SessionId是否是從URL中獲取的,已廢棄
     * request.isRequestedSessionIdFromURL();boolean
     * 同上,這個沒廢棄
     * request.isRequestedSessionIdValid();boolean
     * 檢查SessionId是否是有效的
     * request.isSecure();boolean
     * 是否是安全的,即是否使用了安全協議,如https
     * request.isUserInRole("role");boolean
     * 判斷用戶是否是某個種類的角色,類型可以在web.xml中配置(tomcat-users.xml)
     * request.login("user", "password");void
     * 使用用戶名和密碼進行登錄
     * request.logout();void
     * 用戶登出
     * request.notify();request.notifyAll();void
     * 用於線程操作,詳細見教材
     * request.removeAttribute("at");void
     * 刪除某個屬性值,對應set
     * request.setAttribute("at", request);void
     * 設置某個屬性值
     * request.setCharacterEncoding("utf-8");void
     * 設置獲取各個字符時使用的編碼方式,應與網頁的編碼方式一樣
     * 僅僅只適用於設置post提交的request body的編碼而不是設置get方法提交的queryString的編碼。
     * 該方法告訴應用服務器應該采用什么編碼解析post傳過來的內容。
     * request.startAsync(request, response);void
     * 開始異步傳輸,可以不帶參數
     * request.upgrade();void
     * 開始更新?
     * request.wait(12);
     * 實現了線程的類都有該方法,用於等待
     */

  2、HttpServletResponse

/*
     * response對象
     * response.addCookie(new Cookie("a","aa"));void
     * 增加cookie
     * response.addDateHeader("date", 23456789l);void
     * 在頭部增加日期
     * response.addHeader("asf", "sff");void
     * 增加頭部信息
     * response.addIntHeader("fsf", 12);void
     * 在頭部增加數值類型
     * response.encodeRedirectUrl("utf-8");廢棄
     * response.encodeRedirectURL("utf-8");String
     * 通過指定的編碼對URL進項編碼,並攜帶sessionid,跨應用
     * response.encodeUrl("utf-8");廢棄
     * response.encodeURL("utf-8");String
     * 通過指定的編碼對URL進項編碼,並攜帶sessionid,本應用
     * 假如有sessionId,且不是從cookie中獲得的,就放到url尾部,否則直接返回原url。
     * response.flushBuffer();vodi
     * 立即發送緩沖區字符給客戶端即瀏覽器
     * response.getBufferSize();int
     * 獲取緩沖區大小
     * response.getCharacterEncoding();String
     * 獲取編碼類型
     * response.getContentType();String
     * 獲取Content的MIME類型和編碼
     * response.getHeaderNames();Collection<String>
     * 獲取所有Header的name列表
     * response.getHeaders("aa");Collection<String>
     * 獲取所有aa的頭的值列表
     * response.getLocale();Locale
     * 獲取本地信息,如zhcn
     * response.getOutputStream();ServletOutputStream繼承自OutputStream
     * 獲取輸出流,和inputStream對應,bufferedReader和printWriter對應
     * response.getStatus();int
     * 獲取response的狀態碼,有200,301,404,500
     * response.getWriter();PrintWriter
     * 獲取一個PrintWriter,用於向response返回數據,從而向客戶端返回數據,比Stream使用方便
     * response.isCommitted();boolean
     * 調用PrintWriter對象的close()方法關閉底層輸出流,方法在關閉輸出流之前會先把緩沖區內的數據提交到客戶端。
     * 因此在調用PrintWriter 對象的 close()方法之前,response.isCommitted()方法返回 false;
     * 而在調用PrintWriter對象的close()方法之后,response.isCommitted()方法返回true。
     * response.reset();void
     * 清除buffer,設置頁面不緩存,同時清除狀態碼和頭,如果已經發送數據則跑出異常
     * response.resetBuffer();void
     * 只清除buffer
     * response.sendError(1,"123");void
     * response.sendError(123);
     * response.sendError(1,"123");
     * setStatus方法用來設置Servlet向客戶端返回的狀態碼,它用來設置沒有出錯的狀態。
     * 如果Servlet運行出錯,Servlet可以使用sendError方法設置狀態碼,
     * 如sendError(int sc)方法設置錯誤狀態代碼。sendError(int sc,String msg)方法除了設置狀態碼
     * 還向客戶發出一條錯誤信息。
     * response.sendRedirect("xx.html");
     * 返回一個重定向,並把新的request與response交給重定向的頁面進行處理
     * sendRedirect方法向客戶發出臨時重新導向的響應。它生成的響應狀態碼為302。
     * 該響應給了客戶一個新的URL分區。如果緩沖器已經被清空,這個方法會彈出一個IllegalStateException例外。
     * response.setBufferSize(123);
     * 設置緩沖區大小
     * response.setCharacterEncoding("utf-8");
     * 設置字符編碼
     * response.setContentLength(123);
     * 設置返回內容的長度,在header中也有
     * response.setContentLengthLong(1345l);
     * 長度非常長是使用
     * response.setContentType("dfd");
     * 設置ContentType,包括編碼和類型信息
     * 網頁的Http頭中ContentType("text/html; charset=GBK")的作用:
     * 告訴瀏覽器網頁中數據是什么編碼\
     * 表單提交時,通常瀏覽器會根據ContentType指定的charset對表單中的數據編碼,然后發送給服務器的。
     * 這里需要注意的是:這里所說的ContentType是指http頭的ContentType,而不是在網頁中meta中的ContentType。
     * response.setDateHeader("asd", 123l);
     * 修改日期頭
     * response.setHeader("sfds", "sdfsdf");
     * 修改頭
     * response.setIntHeader("sf", 3123);
     * 設置數值頭
     * response.setLocale(locale );
     * 設置本地環境
     * response.setStatus(1);
     * 設置Http狀態碼,為出錯的情況用
     * response.setStatus(12, "dasd");
     * 設置狀態碼並帶一條消息
     * 
     * 
     * 
     */

  3、用於測試的代碼

        AsyncContext async = request.getAsyncContext();
        String attribute = (String) request.getAttribute("code");
        Enumeration<String> enumer = request.getAttributeNames();
        String authtype = request.getAuthType();
        String character = request.getCharacterEncoding();
        int len = request.getContentLength();
        long lenl = request.getContentLengthLong();
        String contenttype = request.getContentType();
        String contextpath = request.getContextPath();
        Cookie[] cook = request.getCookies();
        long dataHeader = request.getDateHeader("");
        DispatcherType dispatcher = request.getDispatcherType();
        String header = request.getHeader("headname");
        Enumeration<String> headernames = request.getHeaderNames();
        Enumeration<String> headersname = request.getHeaders("headersname");
        ServletInputStream ins = request.getInputStream();
        int i = request.getIntHeader("head");
        String add = request.getLocalAddr();
        Locale locale = request.getLocale();
        Enumeration<Locale> locales = request.getLocales();
        String localname = request.getLocalName();
        int port = request.getLocalPort();
        String method = request.getMethod();
        String codep = request.getParameter("code");
        Map<String,String[]> map = request.getParameterMap();
        Enumeration<String> Pnames = request.getParameterNames();
        String[] values = request.getParameterValues("code");
        Part pa = request.getPart("file");
        Collection<Part> pas = request.getParts();
        String pathin = request.getPathInfo();
        String trans = request.getPathTranslated();
        String protoc = request.getProtocol();
        String query = request.getQueryString();
        BufferedReader br = request.getReader();
        String rp = request.getRealPath("/");
        String ra = request.getRemoteAddr();
        String rh = request.getRemoteHost();
        int rport = request.getRemotePort();
        String ru = request.getRemoteUser();
        RequestDispatcher rd = request.getRequestDispatcher("");
        String rsi = request.getRequestedSessionId();
        String uri = request.getRequestURI();
        String scheme = request.getScheme();
        String servern = request.getServerName();
        int sport = request.getServerPort();
        ServletContext scon = request.getServletContext();
        String spath = request.getServletPath();
        HttpSession session1 = request.getSession();
        HttpSession session2 = request.getSession(true);
        Principal prc = request.getUserPrincipal();
        
        boolean authe = request.authenticate(response);//證明是真實的、可靠的或有效的;鑒定,使生效
        String cs = request.changeSessionId();
        boolean iss = request.isAsyncStarted();
        boolean isss = request.isAsyncSupported();
        boolean issr = request.isRequestedSessionIdFromCookie();
        boolean irsi = request.isRequestedSessionIdFromUrl();
        boolean irss = request.isRequestedSessionIdFromURL();
        boolean isiv = request.isRequestedSessionIdValid();
        boolean isivs = request.isSecure();
        boolean isr = request.isUserInRole("role");
        request.login("user", "password");
        request.logout();
        request.notify();
        request.notifyAll();
        request.removeAttribute("at");
        request.setAttribute("at", request);
        request.setCharacterEncoding("utf-8");
        request.startAsync();
        request.startAsync(request, response);
        //request.upgrade();
        
        response.addCookie(new Cookie("a","aa"));
        response.addDateHeader("date", 23456789l);
        response.addHeader("asf", "sff");
        response.addIntHeader("fsf", 12);
        boolean ch = response.containsHeader("asf");
        String eru = response.encodeRedirectUrl("utf-8");
        String eru1 = response.encodeRedirectURL("utf-8");
        String eu = response.encodeUrl("utf-8");
        String eu1 = response.encodeURL("utf-8");
        response.flushBuffer();
        int bs = response.getBufferSize();
        String ge = response.getCharacterEncoding();
        String cont = response.getContentType();
        String se = response.getHeader("aa");
        Collection<String> ghn = response.getHeaderNames();
        Collection<String> ghn1 = response.getHeaders("aa");
        Locale sss = response.getLocale();
        ServletOutputStream ost = response.getOutputStream();
        int rs = response.getStatus();
        PrintWriter writer1 = response.getWriter();
        boolean isc = response.isCommitted();
        response.reset();
        response.resetBuffer();
        response.sendError(1,"123");
        response.sendError(123);
        response.sendRedirect("xx.html");
        response.setBufferSize(123);
        response.setCharacterEncoding("utf-8");
        response.setContentLength(123);
        response.setContentLengthLong(1345l);
        response.setContentType("dfd");
        response.setDateHeader("asd", 123l);
        response.setHeader("sfds", "sdfsdf");
        response.setIntHeader("sf", 3123);
        response.setLocale(locale );
        response.setStatus(1);
        response.setStatus(12, "dasd");

  上面的內容只是作為總結,並沒有說明各個方法的作用以及取出來的對象的作用,比如說Session,是一個很有用的對象,要知道他的用法,請看后面的博文。

  關於Http客戶端,即瀏覽器發送請求及接受響應的各部分內容,請參考后面的博文。


免責聲明!

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



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