⑴ MVC的工作原理是什么
MVC的工作原理:
①当用户在浏览器中点击一个链接或者提交一个表单时,那么就会产生一个请求(request)。当请求离开浏览器时,它会携带用户请求的信息。
②请求的第一站到达的是Spring的DispatcherServlet,它是一个前端控制器,工作是将用户的请求委托给其他的组件(这里是交给Spring MVC的控制器)去处理。这里DispatcherServlet要决定将请求传给哪一个控制器(Controller)去处理,那么这时就需要处理器映射(Handler Mapping)了。处理器映射会看请求的URL信息,然后决定将请求交给哪一个控制器去处理。比如说有两个控制器ControllerA和ControllerB,分别处理后缀名为.html和.jsp送来的请求,那么当请求者的后缀名为.html时,那么DispatcherServlet就将请求交给ControllerA进行处理。
③当选择了一个合适的控制器后,DispatcherServlet就会将请求交给这个控制器去处理。在这个控制器上,用户的请求将会将用户提交的一些信息交由控制器处理并等待。然而设计的比较好的控制器本身对信息做很少的处理或者根本不做处理,而是将业务逻辑交给一个或多个服务器对象(Model)去处理。
④当控制器对用户请求所携带的信息进行处理(或交给模型层处理)后,经常会产生一些其他的需要返回给浏览器进行显示的数据。这些原始数据直接显示出来显然是不友好的,那么就需要视图(View)来对这些数据进行显示了。控制器的最后一件事就是将模型数据打包,并且指定产生输出的视图的特定名称,然后它将模型、视图名称以及request请求一起发送给DispatcherServlet。所以控制器并没有与视图进行耦合,因为传递给DispatcherServlet的视图名称并不是某一个指定的特殊的文件名称(如后缀名一定是JSP或其他什么名称),它只要是一个可以产生输出和展示结果的逻辑名称就可以了。
⑤DispatcherServlet会向一个视图解析器(ViewResolver)进行请求,视图解析器可以将逻辑视图名称映射到一个特定的视图显示文件上面。
⑥现在DispatcherServlet知道哪一个视图文件可以显示结果了。该视图将会利用模板数据产生输出,这些输出通过response对象返回给客户端进行显示。
⑵ mvc模式的原理
胡乱讲一下
MVC说到底,底层还是servlet。
以登录为例,首先会有页面,会有action,会有登录对象。这个页面就是所谓的V(view,视图),action一般都被视为C(controler,控制器),最后就是各种各样的对象M(mole,模型)。
SSH是MVC开发中最被人认知的,但不能说是最好的。
Struts2可以说是一个跨VC的框架,因为他负责页面的跳转和逻辑分析。它能够帮助我们方便快捷地完成这两部分的开发。
Spring,如果你不太了解的话,像我一样,那么你就可以这么理解。一个服务(一般是一个接口),可能会有好多种实现,但是我们为了达到一个目的,只能用其中的一个实现,那么这时的做法是new一个新的对象,而这个对象是一个接口类型,这个对象实际是一个接口的实现。Spring的好处就是让我们方便地管理这些实现,一般这是基于配置文件的。
Hibernate,这个是与数据库底层相关的,它与Mole有很大的对应关系。
Dao,data access object,数据访问对象,他们是接口,就是把所有的logic接口放在这里。
Service,也是接口,不过这个接口的概念是基于页面的动作的,例如我想登录,会有一个Service,但是这个service会涉及好多的logic(包括用户状态获取,用户权限获取,用户信息获取),所以说service跟logic的对应关系是一对多的关系。
model,这个更加随意一下,一般都是对应着数据库中表的结构,例如用户表,会对应一个User类等。
最后就是javabean了,其实javabean的定义很广泛的。
我简单就我的理解给你介绍一下,formbean就是所谓的页面Form对象对应着的java端的对象,简单的说就是页面有一个name,formBean中就有一个name属性或者是一个与name相关的属性。另外一个种就是广义上的javabean,为了达到某一个目的而设立的一个java类都可以成为一个javabean,它可以包含方法跟属性。
另外一点建议,如果想研究细一点,先不要看这些框架先看servlet,慢慢的就会明白这么划分目录结构的好处了。把它们放到一个包中,也是未尝不可的,但是乱!
⑶ 如何用php实现自己的MVC
MVC三个字母的含义: M:Model 模型,负责数据库操作。 V:View 视图,负责调用Model调取数据,再调用模板,展示出最终效果。 C:Controller 控制器,程序的入口,决定改调用哪个View,并告诉View该做什么。 下面是一个超级简单的MVC结构实现: Controller.php include 'Model.php'; include 'View.php'; class Controller { private $model = ''; private $view = ''; public function Controller(){ $this->model = new Model(); $this->view = new View(); } public function doAction( $method = 'defaultMethod', $params = array() ){ if( empty($method) ){ $this->defaultMethod(); }else if( method_exists($this, $method) ){ call_user_func(array($this, $method), $params); }else{ $this->nonexisting_method(); } } public function link_page($name = ''){ $links = $this->model->getLinks(); $this->view->display($links); $result = $this->model->getResult($name); $this->view->display($result); } public function defaultMethod(){ $this->br(); echo "This is the default method. "; } public function nonexisting_method(){ $this->br(); echo "This is the noexisting method. "; } public function br(){ echo ""; } } $controller = new Controller(); $controller->doAction('link_page', 'b'); $controller->doAction(); Model.php class Model { private $database = array( "a" => "hello world", "b" => "ok well done", "c" => "good bye", ); //@TODO connect the database //run the query and get the result public function getResult($name){ if( empty($name) ){ return FALSE; } if( in_array($name, array_keys( $this->database ) ) ){ return $this->database[$name]; } } public function getLinks(){ $links = "Link A "; $links.= "Link B "; $links.= "Link C "; return $links; } } View.php class View { public function display($output){ // ob_start(); echo $output; }
⑷ php中MVC架构的控制器如何获取底层返回的结果,直接调用报错
呵呵 你的跳转是在 类里面执行的,外面调用方法会在内部跳转。你如果想 自定义的话就改变 类里面的方法 就是 下面这个位置
/**************只能在这里面跳转***************************/
header("Location:../View/admin_home.php"); 这个位置 不用 改为 return true
header("Location:../View/user_login.php?loginProving=passWordError");这个位置 不用 改为 return false;
上面提交的地方 这里
/*************想在这里处理跳转***************************/
$LoginProving -> userNameProving($userName,$passWord); 改为 $result= $LoginProving -> userNameProving($userName,$passWord);
这样就可以判断是否 登录成功 了 if( $result){成功跳转链接 }else{ 错误跳转链接}
⑸ 什么MVC框架实现原理
网络永远是不给力的,不如直接去博客园 看看例子的实现,看看什么是试图 什么是控制器 什么是模型 什么是MVC URL路由,WEB 渲染是什么
⑹ PHP你如何理解 MVC 模式
首先说一下框架,框架:就是别人把一些底层,常用操作.比如数据操作(增,删,改,查)写好.你来直接用.其它的功能要自己来做。MVC:设计模式,M
模型,V
显示,C
控制.现在许多框架都是基于
MVC
来做的把逻辑和显示分开.比如你要换页面,只需要改
V
里面的东西并不需要再去变动程序详细的东西想要了解的--->黑马程序员社区--->PHP版块全部都有,找不到的话官网对话框可以领取
⑺ MVC模式的基本原理
MVC是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层。
模型(model)它是应用程序的主体部分,主要包括业务逻辑模块和数据模块。模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性
视图(view) 用户与之交互的界面、在web中视图一般由jsp,html组成
控制器(controller)接收来自界面的请求 并交给模型进行处理 在这个过程中控制器不做任何处理只是起到了一个连接的作用
降低代码耦合性。在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其他层中的代码。
有利于分工合作。在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可进行开发视图层中的JSP,而对业务熟悉的人员可开发业务层,而其他开发人员可开发控制层。
有利于组件的重用。如控制层可独立成一个能用的组件,表示层也可做成通用的操作界面。可以为一个模型在运行时同时建立和使用多个视图。
⑻ php架构,mvc开发模式,php程序员工作~
PHP开发框架背后的思想被称为“模型—视图—控制器”(MVC)。MVC是这样一种架构模式,它隔离了业务逻辑与UI,允许其一改变而另一者不受影响。(也可以说是关注点的隔离)在MVC中,模型负责数据,视图负责表现,控制器则是程序主体或者说是负责业务逻辑。从本质上说,MVC拆分了一个程序的开发过程,这样你就可以修改独立的每一部分,而其他部分不受影响,这是十分重要的,它使得编写PHP代码更为快捷简单
开发者可能出于不同的考虑而使用PHP开发框架,不过首当其冲的原因是为了加速开发过程。相似工程之间的代码重用能够节省开发者大量的时间和精力。PHP开发框架内置了预建的模块,免去了冗长又令人厌烦的编程工作。这样开发者就能够把时间活在开发实际程序上,而不是每一次都要为每一个项目重建基础模块。
⑼ 关于pHP设计mvc!!!对于mvc 的设计理解我都了解,但是具体操作,写代码时是怎样一个顺序,应该从哪开始3Q
我建议你可以下载一个ThinkPHP的框架,这个框架完全是以MVC来完成的,看看其中带的示例源代码,估计你会对MVC有个比较明确的认识。