Model1、Model2、MVC模式

由于JSP的本质是Servlet,所以这三个模式在Servlet、JSP上都适用。该文从JSP的角度讲解这三个模式,本质上和从Servlet的角度讲解是一样的。

JSP是Java EE核心技术的一种。

一、JSP Model 1模式

https://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Model_1.png/390px-Model_1.png

二、JSP Model 1.x模式

多个页面都用一段相同的代码,比较麻烦,所用出现了写一个工具类(一般位于util包中)的方式。

三、MVC

将数据库中的user表映射成User对象,一个User对象表示user表中的一条记录,该User类一般写在domain包中,然后写一个User对象对应的UserService类。

之前的model1模式是login.jsp提交用户名(username)和密码(password)给LoginClServlet.jsp,然后LoginClServlet.jsp 先是验证用户是否合法,该文件充当控制器的作用,它的作用是接收数据等,直接操作数据库,现在的model1.x模式是Login.jsp提交用户名和密码给logincl.jsp(此时的loginCl.jsp虽然是JSP,但本质上是一个Servlet),然后logincl.jsp不直接操作数据库,而是通过操作UserService类来操作数据库。但是由于JSP是做页面的,现在用logincl.jsp做中转感觉不合适。

干脆Service不扔掉,任然留下,做为控制器。于是提出Model2模式,即MVC

MVC是:界面还是login.jsp,然后界面的数据(比如:username、password)提交给Servlet,让Servlet做为中转,Servlet充当控制器。

后来为了做大项目,又将MVC进行了演化,即出现了model层,model层又分为:①业务层、②DAO层(Data Access Object,即数据访问对象)、③数据持久层。但是model层不是这三种都一定同时有。

DAO:即是Data Access Object,数据访问对象,即专门对数据库进行操作的类,一般说DAO不含有业务逻辑。

JSP Model 2中,login.jsp中的请求函数交给LoginCLServlet(控制器)。

Servlet,甚至用JS也可以写出MVC模式的代码。MVC它要求程序员做开发把数据的输入(使用JSP视图),数据的处理(使用ServletController调用model完成),数据的显示(使用JSP)分开。业务逻辑层是真正用来干活的。

MVC模式最早来自工业,并不是软件独有的。富士康的人就知道MVC

过个Servlet就会形成控制器链。

101830_E7bd_614348.png

工具类是工具的事,控制器是控制器的事,显示是显示的事。

MVC要求页面到页面即数据发过去必须经过一个控制器,否则不符合MVCMVC是一种规范,它要求你这样做。MVC就是一个JSP发送请求总是要发送给控制器,数据的输入、数据的处理、数据的检测分开。

1、M:model(模型)

主要用于做后台,主要提供对业务的操作和业务的数据。

2、V:view(视图/界面)

显示数据。

3、C:controller(控制器)

控制器就像个小队长,是一个协调者,他自己并不干事,他调用下面的人做事。他在MVC中,只要是请求,都应该把请求交给一个控制器,因为控制器主要用于接收用户的请求(数据),控制器接收的该请求可能是请求多少页、或者增删改查,所以控制器根据要做的事的不同可能有多个,比如LoginClServlet.java用于接收用户名、密码,DelClServlet.java用于接收用户的删除请求,并把这个请求办妥,但具体办妥的过程是调用UsersService类中的成员方法来完成删除。然后现在有两个流行的写法,一个是比较流行的跳转到说你操作成功(此处即是删除成功)的页面(这个可以用JS做),然后再跳转回去,另一个是操作成功后不提示,直接跳转回去。然后去调用model的(service类),这些service类中有一些成员方法,这些成员方法会返回一些结果,然后再根据返回的结果,决定跳转到哪个页面(即界面)。一个请求对应一个控制器本身是没有错误的,但是有时项目经理会把把控制器写在一个类中,通过分类,达到一个控制器的类能够满足多个请求的功能。但是控制器太少了也不行。经验就是:同一类业务逻辑用一个控制器,比如用户的插入、修改、删除。注意重要提示:怎样去确定需要一个新的控制器:原则:一类事务请求,对应一个控制器。若做一个控制器处理多个请求,为了让一个控制器区分不同的请求,我们可以这样做:在发出请求的同时,再带一个 type=add或者type=update或者type=del。在控制器中,我们接收type的值,从而判断用户做什么。

关于跳转到修改用户(可以理解为修改数据)界面有两种思路:

(1)传递用户id好的同时,把用户的其他信息一并传递,这样可以减少数据库查询的次数(缺点:增加网络开销 100字节*1000000*2;有点:较少对数据库的一次操作(因为不用再查数据库了),但是实际情况是宁愿多查一次数据库。

所以更常见的做法是(2)只传递用户id好,控制器接收到id后,再查询数据库,从而显示。

JSP的本质是Servlet,所以JSP可以把请求发送给控制器(Servlet)。

转载于:https://my.oschina.net/wangsifangyuan/blog/700328

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值