您當前的位置:首頁 > 繪畫

Jsp和Servlet之間值傳遞的N種方法

作者:由 劉耀 發表于 繪畫時間:2017-11-15

一、為什麼JSP和servlet之間要進行值傳遞

在web應用中 ,JSP負責頁面展示,和使用者的互動;Servlet負責邏輯處理。

如下圖所示:那就避免不了,JSP和Servlet之間資料的傳遞。

Jsp和Servlet之間值傳遞的N種方法

Jsp和Servlet之間值傳遞的N種方法

今天我們就來看看JSP和Servlet之間資料的傳遞有哪幾種方式

在這之前我們首先要知道web應用是基於HTP協議的談談HTTP協議的流程。而HTTP協議是透過請求,響應來達到資料傳輸的。在jsp和serlet之中都有 request(請求)和response(響應)物件,實際上他們之間的值傳遞直接或間接都是透過request和response物件來實現的,下面具體分析。

二,JSP傳值給Servlet

form表單

JSP透過

表單

輸入和提交資料,Servlet透過request物件的。getParameter()方法得到資料。

JSP程式碼:

<

form

action

=

“log”

>

學號:

<

input

type

=

“text”

name

=

“sid”

>

br

>

密碼:

<

input

type

=

“password”

name

=

“pwd”

>

br

>

<

input

type

=

“submit”

value

=

“登入”

>

form

>

action

屬性中的

URL

log指向了資料要傳到的Servlet。這需要在web。xml檔案中配置。

當我們點選了登入按鈕之後你會發現

導航欄:

Jsp和Servlet之間值傳遞的N種方法

Jsp和Servlet之間值傳遞的N種方法

輸入的的學號和密碼資料,透過request的請求傳送給log servlet。

Servlet程式碼:主要是在

doGet()方法

透過

request物件

獲得處理資料。

protected

void

doGet

HttpServletRequest

request

HttpServletResponse

response

throws

ServletException

IOException

{

String

sid

=

request

getParameter

“sid”

);

String

password

=

request

getParameter

“pwd”

}

這樣servlet 中就得到了JSP傳來的資料。

2、

URL

jsp透過URL傳值給Servlet,仔細看看會發現和表單傳值時導航欄的顯示很相似。

log jsp程式碼

傳輸的Test值為1

傳輸的Test值為2

傳輸的Test值為3

傳輸的Test值為2

同樣“log”為超連結指向了資料要傳到的Servlet。

log Servlet程式碼

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String Test=request。getParameter(“Test”);

}

我們在點選四個不同的連結可以傳四個不同的數值給Servlet

3、seseeion

session可以看做是一個hashmap: 存取值的原理同java中的HashMap的鍵值對相同

session。setAttribute(“key”,value);是session存值的方法,

session。getAttribute(key);是session取值的方法。

不過這個“hashmap”的空間範圍為所有的Servlet 和 JSP檔案。時間有效範圍為30min(透過配置檔案可以更改)

利用session可以在一個web工程裡實現所有web工程裡servlet和JSP的資料共享,簡單來說session是對於所有JSP和Servlet來說的。在任意一個JSP或Servlet存值之後能在其他的JSP和Servlet中的到值。

任意一個jsp 程式碼

<%request。getSession()。setAttribute(“data”,“the data to send”);%>

任意一個Servlet 程式碼

String

string

=(

String

request

getSession

()。

getAttribute

“data”

);

注意

在獲取session中的值的時候要記得要強制轉為存值的型別轉型。這是因為放置在session中的物件的屬性被看作 java。lang。Object型別的了,如果不轉換,在將直付給value時會報classcastexception異常。

三,servlet傳值給JSP

1、seseeion

session 傳值是在所有JSP和servlet之間任意的,參考上文中JSP透過session傳值給Servlet。

2、設定setAttribute,request重定向,getgetAttribute

Servlet端的程式碼:

request

setAttribute

“data”

“this is a data to send”

);

request

getRequestDispatcher

“next。jsp”

)。

forward

request

response

);

next。jsp端的程式碼

<

% String data=(String)request。getAttribute(“data”); %>

jsp從servlet端接收的資料為“this is a data to send”字串。

注意:

這裡的取值也需要型別強制轉換,和session一樣放置在request中的物件的屬性被看作 java。lang。Object型別的了,如果不轉換,在將直付給value時會報classcastexception異常。

四,JSP傳值給JSP

1、表單

這和

二,JSP傳值給Servlet

中方法類似 只不過是form表單的action屬性指向另一個jsp檔案,這裡不再贅述。

2、超連結

這和

二,JSP傳值給Servlet

中方法類似 只不過是URL指向另一個JSP檔案,這裡不再贅述。

3、session

所有的session使用都類似,不再贅述。

五,Servlet傳值給Servlet

1、透過setAttribute(),重定向,和getAttribute()方法傳遞引數

傳送端ServletSend的程式碼

request。setAttribute(“data”, “this a data to send ”);

request。getRequestDispatcher(“/ServletRead”)。forward(request, response);

接收端ServletRead的程式碼

String

data

=

String

request

getAttribute

“data”

);

這樣接收端接收到的資料為字串“this a data to send ”。

2、session

當然還有萬能的session

六、小結

暫時總結出來的傳值方式就這麼多,肯定還有更多的更好的方法,

例如利用 cookie

如果大家知道更好的方式,還請不吝賜教,最後的感悟就是所有的傳值方式似乎都是透過request和response來傳值的,這和HTTP協議應該是密不可分的,還有指向Servlet的url即 xml中的一定要配置好。

如果有錯誤或者更好的方案還請各位大神多多指點。

標簽: request  jsp  Servlet  session  傳值