概述:
- 界面层:由JSP页面进行与客户端浏览器的交互,可以直接调用JavaBean
- 业务逻辑层:由JavaBean进行处理业务逻辑,封装数据,并与数据库层进行交互
- 数据库层:底层数据库,可被javaBean访问
优点:避免了JSP页面直接进行业务逻辑处理所带来的维护性,扩展性差的弱点.体现了分层设计的思想
缺点:Model 1模式的实现比较简单,适用于快速开发小规模项目。但从工程化的角度看,它的局限性非常明显:JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。
实例:
需求:完成商品的展示与详细信息查看
分析:使用model1实现,javabean负责与数据库交互,实现业务逻辑,jsp负责与浏览器交互,页面展示
Items类-商品实体类,数据库表的映射
package entity;
public class Items {
private int id; // 商品编号
private String name; // 商品名称
private String city; // 产地
private int price; // 价格
private int number; // 库存
private String picture; // 商品图片
..............
setter,getter方法
}
DBHelper类 -提供数据库连接,提高代码复用性
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBHelper {
private static final String driver = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=UTF-8";
private static final String username = "root";
private static final String password = "970728";
private static Connection con = null;
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
if (con == null) {
try {
con = DriverManager.getConnection(url,username,password);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
return con;
}
}
ItemsDAO类-实现业务逻辑
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import util.DBHelper;
import entity.Items;
public class ItemsDAO {
//获得所有的商品信息
public ArrayList<Items> getAllItems()
{
ArrayList<Items> list = new ArrayList<Items>();
Connection con = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
con = DBHelper.getConnection();
String sql = "select * from Items;";
stmt = con.prepareStatement(sql);
rs = stmt.executeQuery();
while(rs.next())
{
Items item = new Items();
item.setId(rs.getInt("id"));
item.setName(rs.getString("name"));
item.setCity(rs.getString("city"));
item.setNumber(rs.getInt("number"));
item.setPrice(rs.getInt("price"));
item.setPicture(rs.getString("picture"));
list.add(item);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
//释放数据集
if(rs!=null)
{
try {
rs.close();
rs = null;
} catch (Exception e2) {
e2.printStackTrace();
}
}
//释放语句对象
if(stmt!=null)
{
try {
stmt.close();
stmt = null;
} catch (Exception e3) {
e3.printStackTrace();
}
}
}
return list;
}
//根据商品编号,获取商品资料
public Items getItemsById(int id)
{
Connection con = null;
PreparedStatement stmt = null;
ResultSet rs = null;
Items item = new Items();
try {
con = DBHelper.getConnection();
String sql = "select * from Items where id=?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, id);
rs = stmt.executeQuery();
if(rs.next())
{
item.setId(rs.getInt("id"));
item.setName(rs.getString("name"));
item.setCity(rs.getString("city"));
item.setNumber(rs.getInt("number"));
item.setPrice(rs.getInt("price"));
item.setPicture(rs.getString("picture"));
}
else
return null;
} catch (Exception e) {
e.printStackTrace();
}finally{
if(rs!=null)
{
try {
rs.close();
rs = null;
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(stmt!=null)
{
try {
stmt.close();
stmt = null;
} catch (Exception e3) {
e3.printStackTrace();
}
}
}
return item;
}
}
index.jsp-商品展示页
<%@ page language="java" import="java.util.*"
contentType="text/html; charset=utf-8"%>
<%@ page import="entity.Items"%>
<%@ page import="dao.ItemsDAO"%>
<style type="text/css">
div {
float: left;
margin: 10px;
}
div dd {
margin: 0px;
font-size: 10pt;
}
div dd.dd_name {
color: blue;
}
div dd.dd_city {
color: #000;
}
</style>
</head>
<body>
<h1>商品展示</h1>
<hr>
<center>
<table width="750" height="60" cellpadding="0" cellspacing="0"
border="0">
<tr>
<td>
<!-- 商品循环开始 -->
<%
ArrayList<Items> list = new ItemsDAO().getAllItems();
if(list!=null&&list.size()>0)
{
for(int i=0;i<list.size();i++)
{
Items item = list.get(i);
%>
<div>
<dl>
<dt>
<a href="details.jsp?id=<%=item.getId()%>"><img src="images/<%=item.getPicture()%>" width="120" height="90" border="1" /> </a>
</dt>
<dd class="dd_name"><%=item.getName() %></dd>
<dd class="dd_city">
产地:<%=item.getCity() %> 价格:¥<%=item.getPrice() %>
</dd>
</dl>
</div>
<!-- 商品循环结束 -->
<%
}
}
%>
</td>
</tr>
</table>
</center>
</body>
</html>
details.jsp-商品详细内容页
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
<%@ page import="entity.Items"%>
<%@ page import="dao.ItemsDAO"%>
<style type="text/css">
div{
float:left;
margin-left: 30px;
margin-right:30px;
margin-top: 5px;
margin-bottom: 5px;
}
div dd{
margin:0px;
font-size:10pt;
}
div dd.dd_name
{
color:blue;
}
div dd.dd_city
{
color:#000;
}
</style>
</head>
<body>
<h1>商品详情</h1>
<hr>
<center>
<table width="750" height="60" cellpadding="0" cellspacing="0" border="0">
<tr>
<!-- 商品详情 -->
<%
ItemsDAO itemDao = new ItemsDAO();
Items item = itemDao.getItemsById(Integer.parseInt(request.getParameter("id")));
if(item!=null)
{
%>
<td width="70%" valign="top">
<table>
<tr>
<td rowspan="4"><img src="images/<%=item.getPicture()%>" width="200" height="160"/></td>
</tr>
<tr>
<td><B><%=item.getName() %></B></td>
</tr>
<tr>
<td>产地:<%=item.getCity()%></td>
</tr>
<tr>
<td>价格:<%=item.getPrice() %>¥</td>
</tr>
</table>
</td>
<%
}
%></tr>
</table>
</center>
</body>
</html>