Jsp设计模式[转载]


一:介绍
    
记得初学 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
:保护代码比较好。
..........

    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值