1. 程式人生 > >HttpServletRequest和ServletRequest的區別以及HttpServletRequest物件方法的用法

HttpServletRequest和ServletRequest的區別以及HttpServletRequest物件方法的用法

    @Override  
    public void doFilter(ServletRequest request, ServletResponse response,  
            FilterChain filterChain) throws IOException, ServletException {  
        // 過濾使用者請求,判斷是否登入  
        HttpServletRequest httpServletRequest = (HttpServletRequest)request;  
        HttpServletResponse httpServletResponse = (HttpServletResponse)response;  
        httpServletResponse .setContentType("text/html;charset=utf-8");  
        httpServletRequest.setCharacterEncoding("utf-8");  
        httpServletResponse.setCharacterEncoding("utf-8");  
          
        String username = (String)httpServletRequest.getSession().getAttribute("username");  
        if (username == null) {  
            String path = httpServletRequest.getContextPath();  
            httpServletResponse.sendRedirect(path+"/index.jsp");  
        }  
        filterChain.doFilter(httpServletRequest, httpServletResponse);  
    }  

1. 獲得客戶機資訊
    getRequestURL方法返回客戶端發出請求時的完整URL。
    getRequestURI方法返回請求行中的資源名部分。
    getQueryString 方法返回請求行中的引數部分。
    getRemoteAddr方法返回發出請求的客戶機的IP地址
    getRemoteHost方法返回發出請求的客戶機的完整主機名
    getRemotePort方法返回客戶機所使用的網路埠號
    getLocalAddr方法返回WEB伺服器的IP地址。
    getLocalName方法返回WEB伺服器的主機名
    getMethod得到客戶機請求方式
 2.獲得客戶機請求頭

    getHeader(string name)方法
    getHeaders(String name)方法
    getHeaderNames方法 

 3. 獲得客戶機請求引數(客戶端提交的資料)
    getParameter(name)方法
    getParameterValues(String name)方法
    getParameterNames方法
    getParameterMap方法


例子程式:

    public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
            System.out.println("getRequestURL: "+request.getRequestURL());  
            System.out.println("getRequestURI: "+request.getRequestURI());  
            System.out.println("getQueryString: "+request.getQueryString());  
            System.out.println("getRemoteAddr: "+request.getRemoteAddr());  
            System.out.println("getRemoteHost: "+request.getRemoteHost());  
            System.out.println("getRemotePort: "+request.getRemotePort());  
            System.out.println("getRemoteUser: "+request.getRemoteUser());  
            System.out.println("getLocalAddr: "+request.getLocalAddr());  
            System.out.println("getLocalName: "+request.getLocalName());  
            System.out.println("getLocalPort: "+request.getLocalPort());  
            System.out.println("getMethod: "+request.getMethod());  
            System.out.println("-------request.getParamterMap()-------");  
            //得到請求的引數Map,注意map的value是String陣列型別  
            Map map = request.getParameterMap();  
            Set<String> keySet = map.keySet();  
            for (String key : keySet) {  
            String[] values = (String[]) map.get(key);  
            for (String value : values) {  
                System.out.println(key+"="+value);  
            }  
         }  
            System.out.println("--------request.getHeader()--------");  
            //得到請求頭的name集合  
            Enumeration<String> em = request.getHeaderNames();  
            while (em.hasMoreElements()) {  
            String name = (String) em.nextElement();  
            String value = request.getHeader(name);  
            System.out.println(name+"="+value);  
        }  
              
    }  

瀏覽器上位址列:http://localhost:8080/RequestAndResponse/requestmethod?name=sunjob&password=123456&password=haha

控制檯輸出:

    getRequestURL: http://localhost:8080/RequestAndResponse/requestmethod  
    getRequestURI: /RequestAndResponse/requestmethod  
    getQueryString: name=sunjob&password=123456&password=haha  
    getRemoteAddr: 127.0.0.1  
    getRemoteHost: 127.0.0.1  
    getRemotePort: 2374  
    getRemoteUser: null  
    getLocalAddr: 127.0.0.1  
    getLocalName: localhost  
    getLocalPort: 8080  
    getMethod: GET  
    -------request.getParamterMap()-------  
    name=sunjob  
    password=123456  
    password=haha  
    --------request.getHeader()--------  
    host=localhost:8080  
    user-agent=Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20100101 Firefox/17.0  
    accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
    accept-language=zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3  
    accept-encoding=gzip, deflate  
    connection=keep-alive  
    cache-control=max-age=0  


相關推薦

HttpServletRequestServletRequest區別以及HttpServletRequest物件方法用法

@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, Servl

HttpServletRequestServletRequest區別以及HttpServletRequest對象方法用法

地址欄 req Language == ram 瀏覽器 har exce cte HttpServletRequest和ServletRequest都是接口 HttpServletRequest繼承自ServletRequest HttpServletRequest

export ,export default import 區別 以及用法

彈出 但是 clas 能夠 引用 port 模塊 返回值 兩個 首先要知道export,import ,export default是什麽 ES6模塊主要有兩個功能:export和import export用於對外輸出本模塊(一個文件可以理解為一個模塊)變量的接口 imp

HSSF、XSSFSXSSF區別以及Excel導出優化

基本 per springmvc linu cell exce 功能 pch 臨時文件   之前有寫過運用POI的HSSF方式導出數據到Excel(見:springMVC中使用POI方式導出excel至客戶端、服務器實例),但這種方式當數據量大到一定程度時容易出現內存溢出等

python 字符串編碼 strunicode 區別以及相互轉化 decode('utf-8') encode('utf-8')

encode unicode 字符串 code com bubuko src 區別 分享圖片 python 字符串編碼 str和unicode 區別以及相互轉化 decode('utf-8') encode('utf-8'

Mybatis中#{}${}的區別以及對sql注入、預編譯、jdbcType的說明

#{}和${}都可以獲取map中的值或者pojo物件屬性的值; sql語句示例: select * from tbl_employee where id=${id} and last_name=#{lastName} Preparing: select * from tbl_employee

VectorArrayList區別以及Vector並非是絕對執行緒安全的

首先看這兩類都實現List介面,而List介面一共有三個實現類,分別是ArrayList、Vector和LinkedList。List用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。3個具體實現類的相關區別如下:ArrayList是最常用的List實現類,內部是通過

mysql 中modifychange區別(以及使用modify修改欄位名稱報錯)

使用modify修改欄位報錯如下: mysql> alter table student modify name sname char(16);ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that

sizeofstrlen區別以及使用情況分析

實際做開發專案中,如果有涉及到字元資料處理等情況,都會遇到資料長度的獲取。比如現在需要對a[50]陣列進行賦值1~50的指定資料,程式碼如下: char a[50]; for(i = 0 ; i <50 ; i++) { a[i]=i+1; }

MyBatis排序時使用order by 動態引數時需要注意,用$而不是#, #{}${}的區別以及order by注入問題

ORDER BY ${columnName}這裡MyBatis不會修改或轉義字串。重要:接受從使用者輸出的內容並提供給語句中不變的字串,這樣做是不安全的。這會導致潛在的SQL注入攻擊,因此你不應該允許使用者輸入這些欄位,或者通常自行轉義並檢查。 #{}相當於jdbc中的

掛起阻塞區別以及sleepwait的區別

阻塞 VS 掛起 阻塞與掛起都是程序的狀態,但他們有一些相似之處,也有一些區別,下面先對他們進行概述,再進行比較 阻塞:正在執行的程序由於發生某時間(如I/O請求、申請緩衝區失敗等)暫時無法繼續執行。此時引起程序排程,OS把處理機分配給另一個就緒程序,而讓受阻程序處於暫停狀態,一般將這種狀態

StringBuilderStringBuffer區別以及原理

區別 其實StringBuilder和StringBuffer用法都是一樣,幾乎沒啥區別,我比較常用StringBuilder。但是說它們之間到底有沒有區別,那肯定是有的。StringBuffer的大多數方法都是用synchronized 修飾的,所以St

Java中ArrayListLinkedList區別以及時間複雜度與空間複雜度

Java中ArrayList和LinkedList區別以及時間複雜度與空間複雜度? 一.時間複雜度 二.空間複雜度 三.總結    一般大家都知道ArrayList和LinkedList的大致區別: 1.ArrayList是實現了基於動態陣

mybatis的#{}${}的區別以及order by注入問題

 由於不想註冊,轉載以上地址的文章。在此感謝此位網友分享。 前言略,直奔主題.. #{}相當於jdbc中的preparedstatement ${}是輸出變數的值 你可能說不明所以,不要緊我們看2段程式碼: String sql = "select * from a

mybatis的#{}${}的區別以及order by注入問題(轉錄)

原文連結:http://www.cnblogs.com/chyu/p/4389701.html 前言略,直奔主題.. #{}相當於jdbc中的preparedstatement ${}是輸出變數的值 你可能說不明所以,不要緊我們看2段程式碼: String

shell中反引號$()的區別以及eval命令

反引號和$()的區別 反引號和$()都是shell指令碼中用來進行命令代換的命令,命令代換就是執行一個命令將其結果交給一個變數。 echo ‘echo \\ ’ //反引號

classpath classpath* 區別以及如何覆蓋在配置檔案中的Bean ID

寫spring的程式碼到現在,一直都很習慣性的拷貝web.xml中的內容,沒怎麼在意裡面的內容,最近認真研究了下,很多東西都不是很理解,特別是classpath和classpath*的區別,研究了許久才搞明白,記錄下備忘。 classpath 和 classpath* 區別: classpath:只會到你

getClass()getClassLoader()區別 以及ClassLoader詳解及用途(檔案載入,類載入)

 1.1 幾個相關概念ClassLoader負責載入系統的所有Resources(Class,檔案,來自網路的位元組流等),通過ClassLoader從而將資源載入JVM   每個class都有一個reference,指向自己的ClassLoader。Class.getClassLoader()   arra

C-sizeofstrlen區別,以及sizeof如何計算結構體大小

struct alt inf 編譯 style img com 大小 運行 sizeof和strlen區別 sizeof是關鍵字,在編譯時就能計算出值,可以計算任何類型 strlen是函數,只有在運行時才能去計算,且只能計算字符型的. 對於數組時,strlen

export ,export default import 區別以及用法

默認 函數 根據 pre 可用 返回 大括號 能夠 返回值 首先要知道export,import ,export default是什麽 ES6模塊主要有兩個功能:export和importexport用於對外輸出本模塊(一個文件可以理解為一個模塊)變量的接口import用