当前位置 : 主页 > 网络编程 > 其它编程 >

DRP总结—Model1和Model2的区别

来源:互联网 收集:自由互联 发布时间:2023-07-02
前言上篇博客最后说道一个小例子,老师讲课的时候说,他曾经听说过一个项目,没有一个servlet,只用到了jsp就完成了,这实际上就是model1的执行过程。下面这篇博客就介绍一下m 前言
前言上篇博客最后说道一个小例子,老师讲课的时候说,他曾经听说过一个项目,没有一个servlet,只用到了jsp就完成了,这实际上就是model1的执行过程。下面这篇博客就介绍一下m 前言

上篇博客最后说道一个小例子,老师讲课的时候说,他曾经听说过一个项目,没有一个servlet,只用到了jsp就完成了,这实际上就是model1的执行过程。下面这篇博客就介绍一下model1是怎么发展为model2的。

mvc

说道model1和model2模式,就不得不提mvc,因为model1和model2都在一定程度上应用了mvc设计模式。mvc是一种混合模式,主要是为了 把视图和后台业务逻辑处理解耦合。当view向业务逻辑请求数据时,需要经过controller;业务逻辑向view返回数据时,同样需要经过controller,controller就像是二者之间的路由。

 

 

mvc模式也可以认为是一种思想,设计模式本来就是优化代码的思想,所以说mvc的思想在java中同样适用。

 

model1

 

model1虽然实现了mvc,但是实现的并不彻底。mvc模式中,分为view层、controller层和model层,而在model1中,view层和controller层合二为一了,也就是jsp,javabean则作为model层单独存在。这样的话,jsp既要做显示,又要处理一定的业务逻辑,对于单一职责的原则来说,这显然不符合。jsp的职责太重,就显得中间部分有些臃肿。

 

虽然model1模式没有很符合单一职责原则,但是model1实现比较简单,对程序员的要求也不高。但是jsp页面兼具view和controller两种角色,将控制逻辑和表现逻辑混合在一起,导致代码的重用性比较低,增加了扩展性和可维护的难度,所以适合小型项目的开发。

 

model1模式的代码,jsp页面的负担比较重,会承担一部分的业务逻辑,如下所示:

 

jsp代码:

 

 

string command = request.getparameter("command");if("del".equals(command)){string[] userids = request.getparametervalues("selectflag");//for(int i=0;i pagemodel = usermanager.getinstance().finduserlist(pageno, pagesize);

 

 

manager代码:

 

 

/** * 分页查询 * @param pageno 第几页 * @param pagesize 每页多少条数据 * @return pagemodel */public pagemodel finduserlist(int pageno, int pagesize) {stringbuffer sbsql = new stringbuffer();sbsql.append("select user_id, user_name, password, contact_tel, email, create_date ").append("from ").append("( ").append("select rownum rn, user_id, user_name, password, contact_tel, email, create_date ").append("from ").append("( ").append("select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id root order by user_id ").append(") where rownum <= ? ").append(") where rn > ? ");connection cOnn= null;preparedstatement pstmt = null;resultset rs = null;pagemodel pagemodel = null;try {cOnn= dbutil.getconnection();pstmt = conn.preparestatement(sbsql.tostring());pstmt.setint(1, pageno * pagesize);pstmt.setint(2, (pageno - 1) * pagesize);rs = pstmt.executequery();list userlist = new arraylist();while (rs.next()) {user user = new user();user.setuserid(rs.getstring("user_id"));user.setusername(rs.getstring("user_name"));user.setpassword(rs.getstring("password"));user.setcontacttel(rs.getstring("contact_tel"));user.setemail(rs.getstring("email"));user.setcreatedate(rs.gettimestamp("create_date"));userlist.add(user);}pagemodel = new pagemodel();pagemodel.setlist(userlist);pagemodel.settotalrecords(gettotalrecords(conn));pagemodel.setpagesize(pagesize);pagemodel.setpageno(pageno);}catch(sqlexception e) {e.printstacktrace();}finally {dbutil.close(rs);dbutil.close(pstmt);dbutil.close(conn);}return pagemodel;}

 

 

model2

 

model2可以说完全实现了mvc模式,在model1的基础上,model2扩展了servlet,将控制逻辑放在servlet中,让它来做controller的工作,从而减少了jsp的负担。在model2模式中,jsp只负责显示页面,生成动态网页;servlet负责流程的控制,处理各种请求;javabeans则负责业务逻辑,以及对的操作。

 

 

在model2模式中,jsp相当于view的角色,servlet做的controller的工作,javabeans做的model层的工作。但是相对于model1,model2对程序员的要求要高,各层之间分工明确,各司其职。分层的结果是开发的粒度较细,代码的复用性提高了,后期维护也容易了,所以model2模式比较适合大型项目的开发。

 

model2模式是由servlet负责页面转向的,也就是说jsp请求数据时将请求发给servlet,servlet再去找相应的manager,如下所示:

 

servlet代码:

 

 

@overrideprotected void doget(httpservletrequest request, httpservletresponse response)throws servletexception, ioexception {//取得表单数据string itemno = request.getparameter("itemno");string itemname = request.getparameter("itemname");string spec = request.getparameter("spec");string pattern = request.getparameter("pattern");string category = request.getparameter("category");string unit = request.getparameter("unit");//构造对象item item = new item();item.setitemno(itemno);item.setitemname(itemname);item.setspec(spec);item.setpattern(pattern);//构造物料类别itemcategory itemcategory = new itemcategory();itemcategory.setid(category);item.setitemcategory(itemcategory);//构造物料单位itemunit itemunit = new itemunit();itemunit.setid(unit);item.setitemunit(itemunit);itemmanager.additem(item);//重定向到查询页面response.sendredirect(request.getcontextpath() + "/servlet/item/searchitemservlet");}

 

 

manager代码:

 

 

@overridepublic void additem(item item) {connection cOnn= null;try{cOnn= dbutil.getconnection();if(itemdao.finditembyid(conn, item.getitemno()) != null){throw new applicationexception("物料代码已经存在,代码="+ item.getitemno());}itemdao.additem(conn, item);}finally{dbutil.close(conn);}}

 

 

model2模式jsp几乎没有代码,只需要在表单的action中填写servlet的配置路径就好了。经过servlet后,如果请求已经完成,则直接重定向到下一个页面;如果还需要下一个地址进行处理,则进行转发,将要处理的数据通过request携带。

 

总结

 

model1和model2的最根本的区别是,model是jsp+javabeans开发模式,model2是jsp+servlet+javabeans开发模式,两者都是mvc模式的应用,但是应用程度不同。在model2模式的开发下,基于分层思想,manager的代码也进行了抽象,原来manager是既做业务逻辑,也做数据持久化,既然分层,那么业务逻辑和数据持久化就得分开,这也就有了dao层,所以说dao层的出现也是策略模式的体现,将数据持久化进行封装,业务层使用时,不需要知道数据持久化的操作过程。在java中,数据持久化的基础是jdbc规范,不管是哪种封装,都是基于jdbc技术的。关于jdbc,详细介绍请看下篇博客。

上一篇:MVC4表单编辑及显示日期格式
下一篇:没有了
网友评论