JSP+JavaBean模式,JSP负责页面显示,并且要处理一系列逻辑。JavaBean让HTML网页与Java代码分离,处理了业务逻辑,JSP页面整洁并且精简了。JSP+JavaBean的业务处理逻辑如下:
从图中可以看出JSP页面与JavaBean页面相分离。分工明确,JSP显示,JavaBean逻辑处理,列成了层次结构。下面有一个JSP+JavaBean模式的实例程序,参考于JavaWeb开发实战的书籍源程序如下:
(1)首先创建处理业务逻辑的JavaBean用于JSP的实体调用:
public class Goods {
private String name; // 商品名称
private double price; // 单价
private String description; // 描述信息
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
(2)然后创建数据库操作的JavaBean对象,用于操作数据写入数据库:
public class GoodsDB {
public void saveGoods(Goods goods){
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 数据库连接url
String url = "jdbc:mysql://localhost:3306/db_database05";
// 获取数据库连接
Connection conn = DriverManager.getConnection(url, "root", "111");
// sql语句
String sql = "insert into tb_goods(name,price,description) values(?,?,?)";
// 创建PreparedStatement对象
PreparedStatement ps = conn.prepareStatement(sql);
// 对sql语句中参数赋值
ps.setString(1, goods.getName());
ps.setDouble(2, goods.getPrice());
ps.setString(3, goods.getDescription());
ps.executeUpdate(); // 更新操作
ps.close(); // 关闭ps
conn.close(); // 关闭conn
} catch (Exception e) {
e.printStackTrace();
}
}
}
(3)编写显示给用户的JSP页面:
处理的service.jsp页面代码如下:
保存商品信息
<%
request.setCharacterEncoding("GBK");
%>
<%
goodsDB.saveGoods(goods);
%>
(4)提交信息的表单代码如下:
<form action="service.jsp" method="post" οnsubmit="return save(this);">
录入商品信息
商品名称:
价 格:
商品描述:
JSP+Servlet+JavaBean模式是一种MVC理念,模型层(model),视图层(view),控制层(controller)三部分组成,业务逻辑图如下:
模型层(model):
模型层是应用程序的核心部分,主要由JavaBean组件构成,可以充当一种实体或者种业务逻辑,可以在应用程序中重用和扩展。
视图层(view):
视图层是提供应用程序与用户之间进行交互的界面,在MVC模式中,这一层并不包含任何的业务逻辑,仅仅提供一种与用户交互的视图。
控制层(controller):
控制层用于对程序中的请求进行控制,起到一种调控作用,可以通知容器选择什么样的视图或者什么样的模型,由Servlet进行充当。
对于JSP+JavaBean模式的视图程序,我们发现JSP页面不仅承担了页面显示。并且还要处理数据库写入的业务处理逻辑。并没有严格遵循MVC思想,所以我们采用第二种模式,加入Servlet来处理数据库写入的操作,严格的任务进行分离。创建一个Servlet的代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置response编码
response.setContentType("text/html");
response.setCharacterEncoding("GBK");
// 设置request编码
request.setCharacterEncoding("GBK");
// 获取输出流
PrintWriter out = response.getWriter();
// 获取商品信息
String name = request.getParameter("name");
String price = request.getParameter("price");
String description = request.getParameter("description");
Goods goods = new Goods(); // 实例化商品对象
// 对商品对象属性赋值
goods.setName(name);
goods.setPrice(Double.valueOf(price));
goods.setDescription(description);
// 实例化GoodsDB
GoodsDB goodsDB = new GoodsDB();
goodsDB.saveGoods(goods); // 保存商品信息
out.print("保存商品信息成功!");
out.flush();
out.close();
}
第一种开发模式通过JavaBean改变了Java代码和HTML代码混合交织的情况,但它对JavaBean的操作仍然限于JSP页面中进行,甚至部分JSP页面只用于JavaBean交互业务处理,又充当了控制业务逻辑的作用,使显示层和业务层混合到了一起,这种只适用于小型项目开发。第二种模式基于MVC理念,将任务进行细化分隔,有了层次概念。减小了耦合度,使程序能够更好的重用.