原來servlet還可以這樣進行傳值

摘要:在 Java 中Servlet傳遞數據的方式有很多,最常見的有以下五種方式,分別是:

1、使用靜態變量的方式

  通過建立一個數據類來進行傳遞。

示例代碼:

public class MyData{
    public static String data; 
}

2、使用HttpServletResponse的sendRedirect()方法

  sendRedirect()方法是讓瀏覽器重定向到另一個鏈接。其內部原理是設置狀態碼爲303,並設置相應的Location響應頭。

基本語法:

response.sendRedirect("/Web應用名/資源名?uname="+username+"&pwd="+password);
response.sendRedirect(“servlet的地址?參數名=參數值&參數名=參數值…”);

參照值是String , 參數名應當使用字母組合
在接受數據的Servlet中:String 參數=request.getParameter(“參數名”);

基本原理圖:
在這裏插入圖片描述
注意:
  使用重定向不能使用PrintWrite,ServletOutputStream這樣的流。因爲重定向已經將消息返回給瀏覽器,其數據流也就沒必要使用了。

3、使用HttpServletRequest的getRequestDispatch()方法

  getRequestDispatch()方法是使Web服務器從當前Servlet轉發到當前應用下的另一個Servlet。

基本語法:
request.getRequestDispatcher(資源地址).forward(request,response);

注意事項:資源地址:不需要項目名。因爲它只能在WEB服務器內部轉發。

基本原理圖:
在這裏插入圖片描述

注意:
1、getRequestDispatcher()請求轉發可以一直轉發下去,只要最終會處理並給服務器相應內容就行了。而且請求轉發不會改變瀏覽器的URL,sendRedirect()會改變URL。
2、使用forward不能轉發到該WEB應用外的URL;
3、因爲forward發生在文本服務器內,所以Servlet1、Servlet2等等,只要一直轉發,使用的都是相同的request和response。

4、使用HttpServletRequest的getSession()方法

  getSession()方法會獲取一個會話,這個內容會在另一篇博客會話技術中詳細說明。

基本語法:
1、存入session:request.getSession.setAttribute(“loginUser”,username);
2、取出session:request.getSession.getAttribute(“loginUser”);

注意:該方法可以傳遞對象

示例代碼:

//存入:
User user= new User();
user.setName(“zhangsan”);
user.setPassWord(123);
request.getSession.setAttribute("userObj",userObj); 

//取出:
User user=(User)request.getSession.getAttribute(“userObj”);

5、使用HttpServletRequest的setAttribute()方法

  setAttribute()方法可以設置一個鍵值對,該鍵值對在該request的有效期內都可以使用。相應的還有removeAttribute()註銷鍵值對的方法。該方法經常和getRequestDispatch()一起使用。

基本語法:
setAttribute(name, value);

注意:request的Attribute在一次請求中有效。一次請求:沒有將響應消息返回給瀏覽器就視爲一次請求。

拓展:比較sendRedirect()和forward(request,response)

1、sendRedirect()重定向,forward()轉發;

2、實際發生的位置不一樣

sendRedirect 發生在瀏覽器
forward 發生在web服務器

3、使用用法不一樣

request.getRequestDispatcher(“/資源URI”).forward(request,response)
response.sendRedirect(“/web應用/資源URI”);

4、能夠去URL範圍不一樣

sendRedirect可以去任意URL
forward 只能去當前的WEB應用的資源
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章