JavaBean 就是符合某種特定的規(guī)范的 Java 類。使用 JavaBean 的好處是解決代碼重復(fù)編寫的問題,減少代碼冗余合愈,功能區(qū)分明確,提高了代碼的可維護(hù)性击狮。
JavaBeans 設(shè)計(jì)原則:
- 公有類
- 無參的公有構(gòu)造方法
- 私有屬性
- getter 和 setter 方法
public class Students {
private String name;
public Students() {}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.Name;
}
}
JSP 動(dòng)作元素
動(dòng)作元素是遵循 XML 語法的標(biāo)簽(有一個(gè)包含元素名的開始標(biāo)簽佛析,可以有屬性、可選的內(nèi)容彪蓬、與開始標(biāo)簽匹配的結(jié)束標(biāo)簽)寸莫,動(dòng)作元素為請求處理階段提供信息,有以下分類:
使用 JavaBeans 創(chuàng)建對象
public class Users {
private String username; // 用戶名
private String password; // 密碼
public Users() {} // 保留此默認(rèn)的構(gòu)造方法
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;
}
}
使用 new 關(guān)鍵字創(chuàng)建
在 JSP 中使用
<%@ page import="com.po.Users" %>
...
<body>
<%
Users user = new Users();
user.setUsername("admin"); //設(shè)置用戶名
user.setPassword("123456");//設(shè)置密碼
%>
用戶名:<%=user.getUsername() %><br>
密碼:<%=user.getPassword() %><br>
</body>
使用 JavaBeans 動(dòng)作標(biāo)簽創(chuàng)建
<body>
<jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>
用戶名:<%=myUsers.getUsername() %><br>
密碼:<%=myUsers.getPassword() %><br>
</body>
getProperty 與 setProperty
login.jsp
<body>
<h1>系統(tǒng)登錄</h1>
<hr>
<form name="loginForm" action="dologin.jsp?mypass=999999" method="post">
<table>
<tr>
<td>用戶名:</td>
<td><input type="text" name="username" value=""/></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="password" value=""/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="登錄"/></td>
</tr>
</table>
</form>
</body>
dologin.jsp
<body>
<jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>
<h1>setProperty動(dòng)作元素</h1>
<hr>
<!--根據(jù)表單自動(dòng)匹配所有的屬性 -->
<%--
<jsp:setProperty name="myUsers" property="*"/>
--%>
<!--根據(jù)表單匹配所有部分的屬性 -->
<%--
<jsp:setProperty name="myUsers" property="username"/>
--%>
<!--跟表單無關(guān)档冬,通過手工賦值給屬性 -->
<%--
<jsp:setProperty name="myUsers" property="username" value="lisi"/>
<jsp:setProperty name="myUsers" property="password" value="888888"/>
--%>
<!--通過URL傳參數(shù)給屬性賦值 -->
<jsp:setProperty name="myUsers" property="username"/>
<jsp:setProperty name="myUsers" property="password" param="mypass"/>
<!-- 使用傳統(tǒng)的表達(dá)式方式來獲取用戶名和密碼 -->
<%--
用戶名:<%=myUsers.getUsername() %><br>
密碼:<%=myUsers.getPassword() %><br>
--%>
<!-- 使用getProperty方式來獲取用戶名和密碼 -->
用戶名:<jsp:getProperty name="myUsers" property="username"/><br>
密碼:<jsp:getProperty name="myUsers" property="password"/><br>
<a href="testScope.jsp">測試JavaBean的四個(gè)作用域范圍</a>
<% request.getRequestDispatcher("testScope.jsp").forward(request, response);%>
</body>
四個(gè)作用域范圍
使用 <jsp:useBean>
時(shí)的 scope
屬性可以指定 JavaBean 的作用范圍:
- page:僅在當(dāng)前頁面有效膘茎;
- request:可通過
HttpRequest.getAttribute()
方法取得 JavaBean對象; - session:可通過
HttpSession.getAttribute()
方法取得 JavaBean對象酷誓; - application:可通過
application.getAttribute()
方法取得 JavaBean對象披坏。
<body>
<jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>
用戶名:
<jsp:getProperty name="myUsers" property="username"/>
<br>
密碼:
<jsp:getProperty name="myUsers" property="password"/>
<br>
<!-- 使用內(nèi)置對象獲取用戶名和密碼 -->
<hr>
<%--
用戶名:<%=((Users)application.getAttribute("myUsers")).getUsername()%><br>
密碼:<%=((Users)application.getAttribute("myUsers")).getPassword() %><br>
--%>
<%--
用戶名:<%=((Users)session.getAttribute("myUsers")).getUsername()%><br>
密碼:<%=((Users)session.getAttribute("myUsers")).getPassword() %><br>
--%>
<%--
用戶名:<%=((Users)request.getAttribute("myUsers")).getUsername()%><br>
密碼:<%=((Users)request.getAttribute("myUsers")).getPassword() %><br>
--%>
<%
String username = "";
String password = "";
if (pageContext.getAttribute("myUsers") != null) {
username = ((Users) pageContext.getAttribute("myUsers")).getUsername();
password = ((Users) pageContext.getAttribute("myUsers")).getPassword();
}
%>
用戶名:<%=username%><br>
密碼:<%=password%><br>
</body>
Model 1
- Model 1 出現(xiàn)之前,整個(gè) Web 應(yīng)用幾乎都是由 JSP 組成(負(fù)責(zé)接收處理客戶端請求盐数、對請求處理后做出相應(yīng))刮萌,界面層充斥著大量的業(yè)務(wù)邏輯代碼和數(shù)據(jù)訪問代碼,Web 程序的可維護(hù)性和可擴(kuò)展性很差娘扩;
-
Model 1 即 JavaBean + JSP 的開發(fā)模式着茸,JavaBean 的出現(xiàn)使 JSP 頁面中使用 JavaBean 封裝的數(shù)據(jù)或調(diào)用 JavaBean 的業(yè)務(wù)邏輯代碼壮锻,大大提升程序可維護(hù)性(避免在 JSP 中處理業(yè)務(wù)邏輯)。
JavaBean + JSP 實(shí)現(xiàn)用戶登錄
po/Users.java
// 用戶類
public class Users {
private String username;
private String password;
public Users() {}
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;
}
}
dao/UsersDAO.java
// 用戶的業(yè)務(wù)邏輯類
public class UsersDAO {
// 用戶登錄方法
public boolean usersLogin(Users u) {
return "admin".equals(u.getUsername()) && "admin".equals(u.getPassword());
}
}
dologin.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
<% request.setCharacterEncoding("utf-8"); %>
<jsp:useBean id="loginUser" class="com.po.Users" scope="page"/>
<jsp:useBean id="userDAO" class="com.dao.UsersDAO" scope="page"/>
<jsp:setProperty property="*" name="loginUser"/>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
//如果用戶和密碼都等于admin,則登錄成功
if (userDAO.usersLogin(loginUser)) {
session.setAttribute("loginUser", loginUser.getUsername());
request.getRequestDispatcher("login_success.jsp").forward(request, response);
}
else {
response.sendRedirect("login_failure.jsp");
}
%>
login.jsp
<body>
<div id="container">
<div class="logo">
<a href="#"><img src="assets/logo.png" alt=""/></a>
</div>
<div id="box">
<form action="dologin.jsp" method="post">
<p class="main">
<label>用戶名: </label><input name="username" value=""/>
<label>密碼: </label><input type="password" name="password" value="">
</p>
<p class="space">
<input type="submit" value="登錄" class="login" style="cursor: pointer;"/>
</p>
</form>
</div>
</div>
</body>
login_failure.jsp
<body>
<div id="container">
<div class="logo">
<a href="#"><img src="assets/logo.png" alt=""/></a>
</div>
<div id="box">
登錄失斾汤猜绣!請檢查用戶或者密碼!<br>
<a href="login.jsp">返回登錄</a>
</div>
</div>
</body>
login_success.jsp
<body>
<div id="container">
<div class="logo">
<a href="#"><img src="assets/logo.png" alt=""/></a>
</div>
<div id="box">
<%
String loginUser = "";
if (session.getAttribute("loginUser") != null) {
loginUser = session.getAttribute("loginUser").toString();
}
%>
歡迎您<font color="red"><%=loginUser%></font>,登錄成功!
</div>
</div>
</body>