回看JSP——jsp:useBean的用法
阿新 • • 發佈:2019-01-07
一、jsp:useBean的基本用法
jsp:useBean是一個JSP動作指令,表示裝載一個將在JSP頁面中使用的JavaBean。jsp:useBean的最基本語法如下:
<jsp:useBean id="name" class="package.class" />
其中id表示定義的JavaBean的唯一標識,class表示定義的JavaBean的類。定義了一個JavaBean就可以為其屬性賦值了,可以使用jsp:setProperty動作為JavaBean的屬性賦值,也可以使用jsp:getProperty動作來獲取屬性的值。
二、jsp:getProperty
可以使用jsp:getProperty來獲取指定的JavaBean的值,基本語法如下:其中name就是在定義JavaBean例項時使用的id,property就是需要獲取值的屬性名。<jsp:getProperty name=”JavaBean例項名” property=”屬性名” />
三、jsp:setProperty
可以使用jsp:setProperty為已經例項化的JavaBean的屬性賦值,而jsp:setProperty共有四種使用方式。1、<jsp:setProperty name="JavaBean例項名" property="*" />
這種方法與表單元素相關聯,就是將表單中所有元素與JavaBean屬性進行對應,如果元素名與屬性名相同,則將表單元素的值賦給對應的屬性。可以通過一個例項來解釋一下這個用法,現有一個登入的介面如下,表單中有兩個元素使用者名稱userName和密碼password,表單提交後將由dologin.jsp進行處理。接著現有一個JavaBean,名為User,也有兩個屬性userName和password。<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登入</title> </head> <body> <h1>請登入</h1> <hr/> <form action="dologin.jsp" method="post"> <label for="userName">使用者名稱:</label> <input type="text" name="userName" id="userName" value="" /> <br/> <label for="password">密碼:</label> <input type="password" name="password" id="password" value="" /> <br/> <input type="submit" value="登入" /> </form> </body> </html>
現在在dologin.jsp中將表單提交的使用者名稱與密碼全部獲取到,這時就可以使用<jsp:setProperty name="JavaBean例項名" property="*">了。dologin.jsp片段如下:public class User { private String userName; private String password; public User() { } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
<jsp:useBean id="user" class="com.imooc.vo.User" scope="page"></jsp:useBean>
<h2>跟表單關聯,設定所有的屬性值</h2>
<hr/>
<jsp:setProperty property="*" name="user"/>
使用者名稱:<jsp:getProperty property="userName" name="user"/><br/>
密碼:<jsp:getProperty property="password" name="user"/>
執行專案,先進入login.jsp頁面,輸入使用者名稱zhangsan,密碼123456,點選登入。
登入後可以看到使用者名稱為zhangsan密碼為123456。
2、<jsp:setProperty name="JavaBean例項名" property="JavaBean屬性名" />
這個方法也與表單相關聯,不同的是這裡的屬性不再是全部的屬性都與表單關聯,而是指定相應的屬性與表單關聯,未指定的屬性將不被賦值。修改dologin.jsp程式碼如下:<h2>跟表單關聯,設定對應元素的屬性值</h2>
<hr/>
<jsp:setProperty property="userName" name="user"/>
使用者名稱:<jsp:getProperty property="userName" name="user"/><br/>
密碼:<jsp:getProperty property="password" name="user"/>
只指定userName與表單元素關聯,執行程式,仍輸入使用者名稱zhangsan密碼123456,點選登入後,執行結果如下:
可以看到因為指定了userName與表單元素關聯,所以獲取到了userName的值,password沒有關聯,所以獲取到的password元素為空。
3、<jsp:setProperty name="JavaBean例項名" property="JavaBean屬性名" value="BeanValue" />
使用這個方法可以直接為JavaBean的相應屬性賦value裡的值,再次修改dologin.jsp的程式碼。<h2>直接給指定的屬性賦值</h2>
<hr/>
<jsp:setProperty property="userName" name="user" value="lisi"/>
使用者名稱:<jsp:getProperty property="userName" name="user"/><br/>
密碼:<jsp:getProperty property="password" name="user"/>
在這裡直接給userName賦值lisi,執行程式,儘管在登入頁面輸入了使用者名稱zhangsan,但是點選登陸後給userName賦的值為lisi。
4、<jsp:setProperty name="JavaBean例項名" property="JavaBean屬性名" param="request物件中的引數名" />
使用這個方法通過獲取request的引數來為相應的屬性賦值,其中param為引數名。修改login.jsp的程式碼,在form裡的action中新增一個引數myUserName,值為wangwu。<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登入</title>
</head>
<body>
<h1>請登入</h1>
<hr/>
<form action="dologin.jsp?myUserName=wangwu" method="post">
<label for="userName">使用者名稱:</label>
<input type="text" name="userName" id="userName" value="" />
<br/>
<label for="password">密碼:</label>
<input type="password" name="password" id="password" value="" />
<br/>
<input type="submit" value="登入" />
</form>
</body>
</html>
然後在dologin.jsp中獲取這個myUserName的值併為userName賦值,執行程式。<h2>與request的引數關聯,為指定的屬性賦值</h2>
<hr/>
<jsp:setProperty property="userName" name="user" param="myUserName"/>
<jsp:setProperty property="password" name="user"/>
使用者名稱:<jsp:getProperty property="userName" name="user"/><br/>
密碼:<jsp:getProperty property="password" name="user"/><br/>
執行程式,在登入頁面輸入使用者名稱zhangsan密碼123456,點選提交後獲取到的使用者名稱為wangwu。
四、JavaBean的四個作用域
在使用jsp:useBean時可以使用scope屬性為JavaBean指定作用域,scope的值有四個:page(預設),request,session,application。下面來分別介紹這四個作用域。1、application作用域
當指定JavaBean的作用域為application表示在整個專案的生命週期中都有效,伺服器重啟後失效。現仍復用上面的登入介面,點選登入後跳轉到dologin.jsp頁面中,為JavaBean設定scope為application,使用<jsp:setProperty name="JavaBean例項名" property="*" />關聯表單為屬性賦值,同時新增一個連結跳轉到testScope.jsp頁面來測試是否能獲取到JavaBean的屬性值。 dologin.jsp程式碼片段如下:<jsp:useBean id="user" class="com.imooc.vo.User" scope="application"></jsp:useBean>
<h2>跟表單關聯,設定所有的屬性值</h2>
<hr/>
<jsp:setProperty property="*" name="user"/>
使用者名稱:<jsp:getProperty property="userName" name="user"/><br/>
密碼:<jsp:getProperty property="password" name="user"/><br/>
<a href="testScope.jsp">測試JavaBean的作用範圍</a>
testScope.jsp程式碼如下,在這個頁面使用application範圍內的user:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試useBean的四種作用範圍</title>
</head>
<body>
<h1>測試JavaBean的四種作用範圍</h1>
<jsp:useBean id="user" class="com.imooc.vo.User" scope="application" />
使用者名稱:<jsp:getProperty property="userName" name="user"/><br/>
密碼:<jsp:getProperty property="password" name="user"/><br/>
</body>
</html>
執行程式,在登入介面輸入使用者名稱zhangsan密碼123456,點選提交,為JavaBean相應的屬性賦值,執行頁面如下:
點選超連結,進入testScope.jsp頁面,仍然可以看到JavaBean的相應屬性值,只要伺服器沒有停止,無論關閉多少次瀏覽器再重新開啟進入testScope.jsp頁面都可以得到如下結果:
2、session作用域
session作用域表示在當前會話週期內有效,只要仍在當前的會話生命週期內,就可以獲取到相應的屬性值。修改dologin.jsp和testScope.jsp裡JavaBean的生命週期為session,執行專案,登入頁面輸入使用者名稱zhangsan密碼123456,點選超連結,只要在當前會話的生命週期內,都可以看到使用者名稱和密碼資訊。<jsp:useBean id="user" class="com.imooc.vo.User" scope="session" />
3、request作用域
request作用域表示在當前使用者的請求內有效,如果超過了當前請求,則獲取不到相應的JavaBean的值。如果將上述案例的dologin.jsp和testScope.jsp裡的JavaBean的生命週期改為request,再輸入使用者名稱和密碼:<jsp:useBean id="user" class="com.imooc.vo.User" scope="request"/>
執行程式,可以在dologin.jsp頁面中看到使用者名稱和密碼,但是當跳轉到testScope.jsp後,會得到如下結果:
已經不能獲取使用者名稱和密碼的值了,這是因為一個超連結相當於一個請求重定向,這就意味著再請求testScope.jsp時已經不是之前的請求了,是一個新的請求,這時原有request中的JavaBean就失效了,因此獲取不到使用者名稱和密碼。如果想要獲取到使用者名稱和密碼,就需要使用伺服器內部轉發,這仍就相當於仍是一個請求。修改dologin.jsp片段:
<jsp:useBean id="user" class="com.imooc.vo.User" scope="request"/>
<h2>跟表單關聯,設定所有的屬性值</h2>
<hr/>
<jsp:setProperty property="*" name="user"/>
使用者名稱:<jsp:getProperty property="userName" name="user"/><br/>
密碼:<jsp:getProperty property="password" name="user"/><br/>
<!-- <a href="testScope.jsp">測試JavaBean的作用範圍</a> -->
<%
<span style="white-space:pre"> </span>request.getRequestDispatcher("testScope.jsp").forward(request, response);
%>
這時在執行程式,點選登入後會直接跳轉到testScope.jsp,可以獲取到相應的屬性值。