2025-05-25

 

request的生命周期很短,隻活動於瀏覽器向服務器的一次請求中,當請求執行完,當前對象也將被銷毀掉。

        request經常用來獲取瀏覽器頁面上輸入的表格信息——用戶名、密碼諸如此類也可以在servlet中setAttribute("索引名","索引值")來存儲一對object類型的鍵值對,通過forward或include方法實現請求跳轉,區別隻是前者不將response中的輸出流信息輸出,後者則進行輸出。由於跳轉還是在同一個請求中進行的,request對象並未被銷毀,所以能從跳轉到的頁面中得到鍵值對中的值。

Java代碼 

/**

     * HelloServlet中的請求處理方法

     */ 

    protected void service(HttpServletRequest req, HttpServletResponse resp) 

            throws ServletException, IOException { 

        super.service(req, resp); 

        resp.setContentType("text/html;charset=gbk"); 

        resp.setCharacterEncoding("gbk"); 

        req.setCharacterEncoding("gbk"); 

        //得到用戶發送請求時輸入的參數 

        String username = req.getParameter("username"); 

        req.setAttribute("username", username); 

        req.getRequestDispatcher("redirect.jsp").forward(req, resp); 

        //resp.sendRedirect("redirect.jsp"); 

    } 

        

 

    登錄界面:當點擊登錄按鈕時,請求被服務器接收,servlet進行處理,將username保存,然後跳轉到redirect.jsp中。

 

       

    跳轉界面:跳轉到redirect.jsp中,並在頁面上顯示出瞭用戶名,值得註意的一點,地址欄並沒有指向redirect.jsp,間接的證明所有操作都在一個請求中。

   

 

     

    firebug:很明顯,服務器隻收到一個采用post方法的請求。

        至於request的生命周期是否隻在一個請求中,並沒有得到驗證。那麼如果在兩個請求中完成上面的操作,是不是還會得到username呢?

Java代碼 

/**

     * HelloServlet中的請求處理方法

     */ 

    protected void service(HttpServletRequest req, HttpServletResponse resp) 

            throws ServletException, IOException { 

        super.service(req, resp); 

        resp.setContentType("text/html;charset=gbk"); 

        resp.setCharacterEncoding("gbk"); 

        req.setCharacterEncoding("gbk"); 

        //得到用戶發送請求時輸入的參數 

        String username = req.getParameter("username"); 

        req.setAttribute("username", username); 

        //req.getRequestDispatcher("redirect.jsp").forward(req, resp); 

        //重定向 

        resp.sendRedirect("redirect.jsp"); 

    } 

        

 

        

        1、用戶名顯示為"null",說明request的生命周期是一次請求;2、地址欄指向瞭redirect.jsp;3、firebug中顯示出瞭兩次請求,一次是我指定的"post",另一次應該是默認的"get",response將重定向的信息返回給瀏覽器,瀏覽器再進行第二次請求,此時第一個request對象被銷毀,所以再也得不到它攜帶的信息瞭。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *