一:介绍
记得初学 jsp 的时候,总喜欢把他和 asp,php 去比较,也习惯于使用 asp 的开发模式去写 jsp ,后来才发现这真是很傻的做法,其实 jsp 一出了来就已经用 MVC 模式了。下面我就简要说说 jsp 设计使用 MVC 来设计。
二: MVC 介绍
MVC 其实是模、视图、控制的缩写,也就是说在使用 jsp 时,有相应的文件去实现相应的操作。通常 jsp 只负责 view 也就是只负责显示页面。业务逻辑等有 bean(ejb) 去实现。下面讨论的是不使用 ejb 的情况下实现。如果使用 ejb,ejb 负责 M.C 通常会由 servlet 去实现。或者使用 struts.
struts 的介绍你可是去 http://jakarta.apache.org/struts 去看。以后的文章中我会介绍。
三:设计思路
当你构建一个 Application 时。你必须考虑界面的问题,而界面修改是非常平常的。如果你在 jsp 中实现所有的操作,一旦修改界面你麻烦大了。美工不懂 jsp 的,你必须自己去修改无数个文件,头不要太大,而此时一般时间都很紧,使用 MVC 则可以减少你的一些麻烦。
在设计时候 jsp 只负责显示页面,也就是说 jsp 调用 Bean(Struts,servlet) 传过来的数据然后显示而 Bean(Struts,servlet) 负责收集 jsp 需要的数据,用 ArrayList(Arttibute) 传给 jsp 。假如需要提交表单,一般也直接提交给 Struts,servlet, 处理后以后再返回处理信息。而其中相应的业务逻辑由 Bean 去实现。
四: Bean 的设计
在我使用时候 Bean 通常有三类,分别 manager,entry,database 目录下面。
manager 下面的 bean 做商业逻辑
entry 下的 bean 就是封装数据,其实就是每个数据库表对应会有一个 bean 。 jsp 得到的也全部是类。
database 下的 bean 就是操作数据库,执行如 insert,update,delete,load( 查询一条记录 ),
batchload( 查询多条记录 ) 。
他们之间的关系是 entry 负责封装数据,作为 database 的调用参数,返回结果。
manager 调用 database 处理的结果。 manager 和 jsp 通信。 jsp 得到的结果从 manager 来, jsp 需要做操作调用 manager, 即使是一个 insert 在 database 存在这样的方法但在 manager 中你还是需要再封装一次。这样做的目的是使结构尽量简单。 database 只负责操作数据库。 manager 只做逻辑(取相应的数据)处理相应的逻辑,而 entry 则只把 database 取到的数据封装,或则把页面得到的参数封装,做为参数传给相应的 Bean.
五:设计实例
下面我把留言板作为实例来讨论:
entry/Guestbook.java( 留言板对象 )
database/GuestbookMap.java( 更新,删除,修改留言板 )
manager/GuestbookManager.java( 处理所有的事务 )
数据表结构 (postgresql)
create sequence seq_guestbook increment 1 ;
/** 序列号生成器 **/
create table guestbook(
id int8 default nextval('seq_guestbook'), /** 主键 **/
title varchar(64),/** 主题 **/
body text,/** 内容 **/
sayid int8,/** 发言人 **/
toid int8,/** 接受人 **/
saytime datetime default now(),/** 留言时间 **/
newflg smallint default 1/** 是否查看过 **/
);
Guestbook.java
=======================
import java.util.*;
public class Guestbook(){
private int id;
private String title;
private body title;
private int sayid;
private int sayid;
private Date saytime;
private short newflg;
public Guestbook(){
}
public int getId(){
return this.id;
}
public void setId(int _id){
this.id=_id;
}
........
( 全是 get/set 方法 )
}
GuestbookMap.java
==============================
import Guestbook;
public class GuestbookMap(){
public GuestbookMap(){
}
public Guestbook load(int id){
// 取到一条 guestbook
}
//sqlstr 查询条件
//orderstr 排序条件
//rcdbegin 记录开始
//rcdend 记录结束
//
public ArrayList batchLoad(String sqlstr,String orderstr,int rcdbegin,int rcdend){
//ArrayList 里面封装了 Guestbook
}
public void insert(Guestbook info){
}
public void update(Guestbook info){
}
public void delete(int id){
// 取到一条 guestbook
}
public int getRcdNums(String sqlstr){
// 取记录条数
}
}
GuestbookManager.java
根据需要封装需要的方法,这部分才是你要写的
=============================
上面的方式 entry,database 的文件可以自动生成,这个工具我已经开发了,如果需要联系我。你需要写的就是 GuestbookManager 里面的方法,你也许会觉得工作量比你所有的操作都在 jsp 中大,但是这样结构非常清晰。你还需要的就是写一个数据库连接池,你所有的数据库操作都从一个地方取,每一次都去连接数据库开销很大的。
六:技术优势
1 :结构清晰
2 :维护方便
3 :保护代码比较好。
..........