8.1 初识 JavaBean
8.1.1 什么是 JavaBean
JavaBean就是一个封装了需要重复使用的数据和功能的类。
JavaBean的规范:
它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的默认构造方法。
它提供公共的setter方法和getter方法(至少提供其中一个),让外部程序设置和获取JavaBean属性。
8.1.2 访问 JavaBean 的属性
public String getName() {...}
public void setName() {...}
getName()方法:称为getter方法或者属性访问器,该方法以小写的get前缀开始,后跟属性名,属性名的第1个字母要大写。
setName()方法:称为setter方法或者属性修改器,该方法必须以小写的set前缀开始,后跟属性名,属性名的第1个字母要大写。
只读属性,只写属性,读写属性。
如果属性的类型为boolean,它的命名方式应该使用is/set,而不是get/set。
任务:通过jsp页面调用该对象验证用户的用户名和密码是否合法
public class User {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
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;
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="result.jsp" method="post">
<table align="center" width="250px" height="200px" border="1">
<tr>
<td colspan="2" align="center">
<b>登陆页面</b>
</td>
</tr>
<tr >
<td>用户名:</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr >
<td>密 码:</td>
<td>
<input type="password" name="password">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit">
</td>
</tr>
</table>
</form>
</body>
</html>
result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.xiao.User"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User(username,password);
if (user.getUsername().equals("zhangsan") && user.getPassword().equals("123")){
out.print("恭喜您,登录成功");
}else {
out.print("请输入正确的用户名和密码");
}
%>
<a href="index.jsp">返回</a>
</body>
</html>
8.1.3 BeanUtils 工具
可以实现动态访地问Java对象的属性。
需要的包:
1. commons-beanutils.jar
2. commons-logging.jar
任务:解决乱码
public class Email {
private String title;
private String context;
public Email() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
import java.io.UnsupportedEncodingException;
public class CharaterEncoding {
public CharaterEncoding() {
}
public String toString(String str){
String text ="";
if(str!=null&&!"".equals(str)){
try {
text = new String(str.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
}
}
return text;
}
}
email.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="release.jsp" method="post">
<table align="center" width="400px" height="260px" border="1">
<tr>
<td colspan="2" align="center">
<b>邮件发送</b>
</td>
</tr>
<tr>
<td align="left">
标题:<input type="text" name="title">
</td>
</tr>
<tr>
<td align="left">
内容:<textarea name="context" cols="40" rows="7"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="发送">
</td>
</tr>
</table>
</form>
</body>
</html>
release.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<% request.setCharacterEncoding("utf-8");%>
<jsp:useBean id="email" class="com.xiao.Email"></jsp:useBean>
<jsp:setProperty name="email" property="*"></jsp:setProperty>
<div align="center">
标题: <%=email.getTitle()%>
<br/>
<hr>
内容:<%=email.getContext()%>
</div>
</body>
</html>
8.2 JSP开发模型
JSP的开发模型即JSP Model,在Web开发中,为了更方便地使用JSP技术,SUN公司为JSP技术提供了两种开发模型: JSP Model1和JSP Model2。JSP Model1简单轻便,适合小型Web项目的快速开发;JSPModel2模型是在JSPModel1的基础上提出的,它提供了更清晰的代码分层,更适用于多人合作开发的大型Web项目,实际开发过程中可以根据项目需求,选择合适的模型。接下来就针对这两种开发模型分别进行详细介绍。
8.2.1 JSP Model1
在讲解JSP Model1前,先来了解一下JSP开发的早期模型。
JSP Model1 采用 JSP + JavaBean 的技术,将页面显示和业务逻辑分开。其中,JSP 实现流程控制和页面显示,JavaBean 对象封装数据和业务逻辑。
接下来通过一张图来描述 JSPModel1 的工作原理,如图所示。
JSPModel1 模型将封装数据和处理数据的业务逻辑交给了 JavaBean 组件,JSP只负责接收用户请求和调用 JavaBean 组件来响应用户的请求。这种设计实现了数据、业务逻辑和页面显示的分离,在一定程度上实现了程序开发的模块化,降低了程序修改和维护的难度。
8.2.2 JSP Model2
JSP Model2架构模型采用 JSP + Servlet + JavaBean 的技术,此技术将原本 JSP 页面中的流程控制代码提取出来,封装到 Servlet 中,从而实现了整个程序页面显示、流程控制和业务逻辑的分离。实际上,JSP Model2 模型就是 MVC (模型Model - 视图View - 控制器Controller)设计模式。其中,控制器的角色是由 Servlet 实现的,视图的角色是由 JSP 页面实现的,模型的角色是由 JavaBean 实现的。JSP Model2的工作原理
8.3 MVC 设计模式
MVC 设计模式,它是施乐帕克研究中心在 20 世纪 80 年代为编程语言 Smalltalk–80 发明的一种软件设计模式,提供了一种按功能对软件进行模块划分的方法。MVC 设计模式将软件程序分为 3 个核心模块:模型( Model ) 视图( View ) 和 控制器( Controller ),这3个模块的作用如下所示。
1.模型
模型(Model) 负责管理应用程序的业务数据、定义访问控制以及修改这些数据的业务规则。当模型的状态发生改变时,它会通知视图发生改变,并为视图提供查询模型状态的方法。
2.视图
视图(View) 负责与用户进行交互,它从模型中获取数据向用户展示,同时也能将用户请求传递给控制器进行处理。当模型的状态发生改变时,视图会对用户界面进行同步更新,从而保持与模型数据的一致性。
3.控制器
控制器( Controller ) 是负责应用程序中处理用户交互的部分,它负责从视图中读取数据,控制用户输入,并向模型发送数据。8.1 Filter 过滤器