欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

DRP总结—Model1和Model2的区别

程序员文章站 2023-12-31 14:57:46
前言 上篇博客最后说道一个小例子,老师讲课的时候说,他曾经听说过一个项目,没有一个servlet,只用到了jsp就完成了,这实际上就是model1的执行过程。下面这篇博客就介绍一下model1是怎么...

前言

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

mvc

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

 

DRP总结—Model1和Model2的区别

 

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

 

model1

 

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

 

DRP总结—Model1和Model2的区别

虽然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则负责业务逻辑,以及对的操作。

 

DRP总结—Model1和Model2的区别

 

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

 

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

 

servlet代码:

 

 

@override
protected 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代码:

 

 

@override
public 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,详细介绍请看下篇博客。

上一篇:

下一篇: