Jsp和Servlet之間值傳遞的N種方法
一、為什麼JSP和servlet之間要進行值傳遞
在web應用中 ,JSP負責頁面展示,和使用者的互動;Servlet負責邏輯處理。
如下圖所示:那就避免不了,JSP和Servlet之間資料的傳遞。
今天我們就來看看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檔案中配置。
當我們點選了登入按鈕之後你會發現
導航欄:
輸入的的學號和密碼資料,透過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程式碼
同樣“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中的
如果有錯誤或者更好的方案還請各位大神多多指點。