一、JSP开发模型
1.什么是JSP开发模型
JSP的开发模型即JSP Model,在Web开发中,为了更方便地使用JSP技术,SUN公司为JSP技术提供了两种开发模型:JSP Model1和JSP Model2。JSP Model简单轻便,适合小型Web项目的快速开发;JSP Model2模型是在JSP Model1的基础上提出的,它提供了更清晰的代码分层,更适合于多人合作开发的大型Web项目,实际开发工程中可以根据项目需求,选择适合的模型。
2.JSP Model1
首先浏览器会发送请求给 JSP,然后 JSP 会直接对数据库进行读取、保存或修改等操作,最后 JSP 会将操作结果响应给浏览器。但是在程序中,JSP 页面功能的 “过于复杂” 会给开发带来一系列的问题,比如 JSP 页面中 HTML 代码和 Java 代码强耦合在一起, 使得代码的可读性很差;数据、业务逻辑、控制流程混合在一起,使得程序难以修改和维护。为了解决上述问题,SUN 公司提供了一种JSP开发的架构模型:JSPModel1。JSP Model1 采用 JSP + JavaBean 的技术,将页面显示和业务逻辑分开。其中,JSP 实现流程控制和页面显示,JavaBean 对象封装数据和业务逻辑。
3.JSPModel2
JSPModel1 虽然将数据和部分的业务逻辑从 JSP 页面中分离出去,但是 JSP 页面仍然需要负责流程控制和产生用户界面。对于一个业务流程复杂的大型应用程序来说,在 JSP 页面中依旧会嵌入大量的 Java 代码,这样会给项目管理带来很大的麻烦。为了解决这样的问题,SUN 公司在 Model1 的基础上又提出了 JSPModel2 架构模型。
JSP Model2架构模型采用 JSP + Servlet + JavaBean 的技术,此技术将原本 JSP 页面中的流程控制代码提取出来,封装到 Servlet 中,从而实现了整个程序页面显示、流程控制和业务逻辑的分离。
实际上,JSP Model2 模型就是 MVC (模型Model - 视图View - 控制器Controller)设计模式。其中,控制器的角色是由 Servlet 实现的,视图的角色是由 JSP 页面实现的,模型的角色是由 JavaBean 实现的。
package chapter11.model2_domain;
public class UserBean {
private String name; //定义用户名
private String password; //定义密码
private String email; //定义邮箱
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
package chapter11.model2_domain;
import java.util.HashMap;
import java.util.Map;
public class RegisterFormBean {
private String name; //定义用户名
private String password; //定义密码
private String password2; //定义确认密码
private String email; //定义邮箱
// 定义成员变量errors,用于封装表单验证时的错误信息
private Map<String, String> errors = new HashMap<String, String>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword2() {
return password2;
}
public void setPassword2(String password2) {
this.password2 = password2;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean validate() {
boolean flag = true;
if (name == null || name.trim().equals("")) {
errors.put("name", "请输入姓名.");
flag = false;
}
if (password == null || password.trim().equals("")) {
errors.put("password", "请输入密码.");
flag = false;
} else if (password.length() > 12 || password.length() &l