导读:简单的说,MVC就是Model—View—Control(模型,视图、控制器)结构。
1.MVC结构原理
1.1.什么是MVC
简单的说,MVC就是Model—View—Control(模型,视图、控制器)结构。MVC结构的编程思想在三十年就提出了,它基于这个一个现实:大多数软件根据模块的用途在逻辑上都可以分为三个部分:负责展示数据对象给用户的界面层—view层、根据界面反馈处理业务逻辑的控制层---Control层、系统的数据模型,即域对象Model层。MVC这个概念最早是为桌面应用程序开发提供指导的;在WEB应用开发中按照MVC思想实现,在如下原因:
无论是使用jsp还是servlet,都很容易将html和java代码混合到一起,这会导致系统维护困难、分工不清;例如在加有jsp代码段的网页中,程序员与美工之间的配合就非常困难!MVC结构的系统会从根本上强制我们将web系统中的数据对象、业务逻辑、用户界面三者分离---虽然这不可能绝对做到!
在web开发中,这样的一个模型是通常见到的:
通常,我们将jsp、html等页面文件称做视图,因为它负责显示东东给用户看;将Servlet称做控制器,因为它在服务器上接收用户请求;最重要的原因是,Servlet是纯java代码,用它处理用户请求便于封装和模块化;至与模型,就是要显示给用户的数据对象,也必须写成纯java代码,本例中就是我们前面分析的那三个数据对象。那么怎么把它们结合起来呢?goon!
1.2.MVC构架设计
一个系统将不断增加新的服务功能,从设计之初就必须考虑到支持后继的迭代开发;前期设计必须严格按照MVC思路进行设计开发,符合Mode-2标准,即以jsp做视图表现;以Servlet做业务转发;以后台java对象处理具体业务;使三者在编码时分离,以为后续开发打下良好基础。HTML+JSP+Servlet+JavaBean结构:
JSP负责生成动态网页
Servlet负责流程转发至对应的Action实现
JavaBean(pojo和dao)负责业务数据模型存取
如下例图:
1.12.控制器servlet设计分析
前面我们己分析到用户可以执行的几种操作,现在必须具体定义。系统中我们只使用到了一个servlet,即ControlServlet,用户的所有请求都会提交给这个Servlet,用户提交的数据可分为两种:一种为用户输出的业务信息,如个人资料、一种是用户操作的类型,如注册、修改个人信息等,我们一般称作用户动作;甚止可以认为每户在页面上每点击一个提交铵钮或一个链接,就是一个动作。在web应用编程中,区别这两种数据非常重要!一类是处理的数据对象,一类决定了用什么样的逻辑处理!显然后者更重要。
为了便与系统的扩展,我们使用servlet请求路径可以模糊配置的特点,将所有的用户请求都发给主控servlet。那么后台servlet中如何区分用户是何种(需要用什么样的逻辑处理)请求呢?我们在web.xml这样定义:
所以有请求路径都以(动作名字.do)格式发送,接受请求的servlet解析这个路径就会得到对应的动作名字符串,再根据这个字符串做出相应处理。稍作分析,会发现系统需要有如下动作实现:
这些动作请求处理的对象都是主控servlet中得到的Request和Response对象,根据这个规则,我们设计如下处理方式:每一个action对应与一个处理Request和Response对象的类,这样,每个类中就可以定义一个execute(Requestreq,Responseresp)方法,这个方法处理完用户请求后,返回一个字符串,代表要输出到客户端的url,是一个HTML,也可能是一个JSP文件---由ControlServlet转发给客户端;根据这些分析我们将进一步深入以便构造一个简洁的MVC结构。
关键规则:所有请求的路径的格式为{命令名字}.do<?请求参数>
我们的MVC理框架结构有五部分组成:
1.ControllerServlet.java:请求分发控制器,解析请求中的动作名字,调用动作工厂对象生成的动作对象处理请求,处理后返回的结果为目地url,控制器再将请求和应答对象转向目标url。
2.ActionFactory.java:该工厂类将请求中的动作名转换成servlet可以用来完成其工作的动作类。
3.Action.java:接口类,该接口定义所有动作的公共接口。
4.具体Action的实现类:指实现了Action接口的类,会被ActionFactory工厂根据请求中的名字创建,从而调用其具体实现的方法处理Request\Response对象后,返回一个URL由主控Servlet转发给用户。可以理解为,为一个具体的Action实现类用于处理页面上每一种用户点击(请求)
所有的请求在servlet的service()方法中处理。结构图如下: