一、JavaBean
JavaBean是符合某種特定規范的Java類,通過JavaBean可以有效減少代碼冗余,解決代碼重復編寫問題,功能區分明確,提高代碼可維護性。
JavaBean的設計原則:共有類+無參的共有構造方法+getter和setter方法+屬性私有
二、JSP動作元素
JSP動作元素(action elements),動作元素為請求處理階段提供信息。動作元素遵循XML元素的語法,有一個包含元素名的開始標簽,可以有屬性、可選的內容、與開始標簽匹配的結束標簽。
JSP動作的分類:
1、與存取JavaBean有關的動作
<jsp:useBean><jsp:setProperty><jsp:getProperty>
2、JSP1.2開始有的基本元素,包括6個動作元素
<jsp:include><jsp:forward><jsp:param><jsp:plugin><jsp:params><jsp:fallback>
3、JSP2.0新增加的元素,主要與JSP Document有關,包括6個元素
<jsp:root><jsp:declaration><jsp:scriptlet><jsp:expression><jsp:text><jsp:output>
4、JSP2.0新增加的元素,主要是用來動態生成XML元素標簽的值,包括3個動作
<jsp:attribute><jsp:body><jsp:element>
5、JSP2.0新增加的元素,主要用在Tag File中,有2個元素
<jsp:invoke><jsp:dobody>
三、在JSP頁面中使用JavaBean
3.1、使用普通方式創建JavaBean的實例
<body> <% User user = new User(); user.setName("admin"); //設置用戶名 user.setPwd("000000");//設置密碼 %> <h1>使用普通方式創建JavaBean的實例</h1> <hr> 用戶名:<%=user.getName() %><br> 密碼:<%=user.getPwd() %><br> </body>
3.2 在JSP頁面通過動作標簽來使用JavaBean
1、<jsp:useBean>在JSP頁面中實例化或者在指定范圍內使用JavaBean
<jsp:useBean id="標示符" class="類名" scope="作用范圍">
示例代碼:
<body> <jsp:useBean id="user" class="model.User" scope="page"> <h1>使用useBean動作創建JavaBean的實例</h1> <hr> 用戶名:<%=user.getName() %><br> 密碼:<%=user.getPwd() %><br> </body>
【注】用戶名和密碼的頁面顯示結果都為null,因為沒有給該實例的屬性賦值
2、<jsp:setProperty>給已經實例化的JavaBean對象的屬性賦值,共有四種形式
<!-- 全部屬性與表單關聯 --> <jsp:setProperty name="JavaBean實例名" property="*"/> <!-- 部分屬性與表單關聯--> <jsp:setProperty name="JavaBean實例名" property="指定屬性名"/> <!-- 手工設置屬性--> <jsp:setProperty name="JavaBean實例名" property="指定屬性名" value="指定屬性值"/> <!-- 與request參數關聯--> <jsp:setProperty name="JavaBean實例名" property="指定屬性名" value="指定屬性值" param="request對象中的參數名"/>
3、<jsp:getProperty>獲取指定JavaBean對象的屬性值
<jsp:getProperty name="JavaBean實例名" property="屬性名"/>
綜合實例
<body> <jsp:useBean id="myUser" class="model.User" scope="page"/> <h1>setProperty動作元素</h1> <hr> <!--根據表單自動匹配所有的屬性 --> <%-- <jsp:setProperty name="myUser" property="*"/> --%> <!--根據表單匹配所有部分的屬性 --> <%-- <jsp:setProperty name="myUser" property="name"/> --%> <!--根表單無關,通過手工賦值給屬性 --> <%-- <jsp:setProperty name="myUser" property="name" value="admin"/> <jsp:setProperty name="myUser" property="pwd" value="000000"/> --%> <!--通過URL傳參數給屬性賦值 --> <jsp:setProperty name="myUsers" property="name"/> <jsp:setProperty name="myUsers" property="pwd" param="password"/> <!-- 使用傳統的表達式方式來獲取用戶名和密碼 --> 用戶名:<%=myUser.getName() %><br> 密碼:<%=myUser.getPwd() %><br> <!-- 使用getProperty方式來獲取用戶名和密碼 --> 用戶名:<jsp:getProperty name="myUser" property="name"/><br> 密碼:<jsp:getProperty name="myUser" property="pwd"/><br> </body>
3.3 JavaBean的4個作用域范圍
①page:僅在當前頁面有效
②request:可以通過HttpRequest.getAttribute()方法獲得JavaBean對象
③session:可以通過HttpSession.getAttribute()方法獲得JavaBean對象
④application:可以通過application.getAttribute()方法獲得JavaBean對象
<body> <h1>Javabean的四個作用域范圍</h1> <hr> <jsp:useBean id="myUser" class="model.User" scope="page"/> 用戶名:<jsp:getProperty name="myUser" property="name"/><br> 密碼:<jsp:getProperty name="myUser" property="pwd"/><br> <!-- 使用內置對象獲取用戶名和密碼 --> <hr> <%-- 用戶名:<%=((Users)application.getAttribute("myUser")).getName()%><br> 密碼:<%=((Users)application.getAttribute("myUser")).getPwd() %><br> --%> <%-- 用戶名:<%=((Users)session.getAttribute("myUser")).getName()%><br> 密碼:<%=((Users)session.getAttribute("myUser")).getPwd() %><br> --%> <%-- 用戶名:<%=((Users)request.getAttribute("myUser")).getName()%><br> 密碼:<%=((Users)request.getAttribute("myUser")).getPwd() %><br> --%> <% String username = ""; String password = ""; if(pageContext.getAttribute("myUser")!=null ) { username = ((Users)pageContext.getAttribute("myUser")).getName(); password = ((Users)pageContext.getAttribute("myUser")).getPwd(); } %> 用戶名:<%=username%><br> 密碼:<%=password%><br> </body>
【注】<a href="url">標簽是一次請求重定向,相當於重新發送了一次request,要想request域起作用,應該使用請求轉發,即request.getRequestDispatcher(url).forward(request, response);
參考資料:慕課網【JAVA遇見HTML——JSP篇】http://www.imooc.com/learn/166