JavaBean 就是符合某种特定的规范的 Java 类。使用 JavaBean 的好处是解决代码重复编写的问题,减少代码冗余,功能区分明确,提高了代码的可维护性。
JavaBeans 设计原则:
- 公有类
- 无参的公有构造方法
- 私有属性
- 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 动作元素
动作元素是遵循 XML 语法的标签(有一个包含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签),动作元素为请求处理阶段提供信息,有以下分类:
使用 JavaBeans 创建对象
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;
}
}
使用 new 关键字创建
在 JSP 中使用
<%@ page import="com.po.Users" %>
...
<%
Users user = new Users();
user.setUsername("admin"); //设置用户名
user.setPassword("123456");//设置密码
%>
用户名:<%=user.getUsername() %>
密码:<%=user.getPassword() %>
使用 JavaBeans 动作标签创建
用户名:<%=myUsers.getUsername() %>
密码:<%=myUsers.getPassword() %>
getProperty 与 setProperty
login.jsp
系统登录
dologin.jsp
setProperty动作元素
<%--
--%>
<%--
--%>
<%--
--%>
<%--
用户名:<%=myUsers.getUsername() %>
密码:<%=myUsers.getPassword() %>
--%>
用户名:
密码:
测试JavaBean的四个作用域范围
<% request.getRequestDispatcher("testScope.jsp").forward(request, response);%>
四个作用域范围
使用
时的 scope
属性可以指定 JavaBean 的作用范围:
- page:仅在当前页面有效;
- request:可通过
HttpRequest.getAttribute()
方法取得 JavaBean对象; - session:可通过
HttpSession.getAttribute()
方法取得 JavaBean对象; - application:可通过
application.getAttribute()
方法取得 JavaBean对象。
用户名:
密码:
<%--
用户名:<%=((Users)application.getAttribute("myUsers")).getUsername()%>
密码:<%=((Users)application.getAttribute("myUsers")).getPassword() %>
--%>
<%--
用户名:<%=((Users)session.getAttribute("myUsers")).getUsername()%>
密码:<%=((Users)session.getAttribute("myUsers")).getPassword() %>
--%>
<%--
用户名:<%=((Users)request.getAttribute("myUsers")).getUsername()%>
密码:<%=((Users)request.getAttribute("myUsers")).getPassword() %>
--%>
<%
String username = "";
String password = "";
if (pageContext.getAttribute("myUsers") != null) {
username = ((Users) pageContext.getAttribute("myUsers")).getUsername();
password = ((Users) pageContext.getAttribute("myUsers")).getPassword();
}
%>
用户名:<%=username%>
密码:<%=password%>
Model 1
- Model 1 出现之前,整个 Web 应用几乎都是由 JSP 组成(负责接收处理客户端请求、对请求处理后做出相应),界面层充斥着大量的业务逻辑代码和数据访问代码,Web 程序的可维护性和可扩展性很差;
-
Model 1 即 JavaBean + JSP 的开发模式,JavaBean 的出现使 JSP 页面中使用 JavaBean 封装的数据或调用 JavaBean 的业务逻辑代码,大大提升程序可维护性(避免在 JSP 中处理业务逻辑)。
JavaBean + JSP 实现用户登录
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
// 用户的业务逻辑类
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"); %>
<%
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
login_failure.jsp
登录失败!请检查用户或者密码!
返回登录
login_success.jsp