mvc在spring中的原理
(1)启动服务器,根据web.xml 的配置加载前端控制器(也称总控制器) DispatcherServlet 。在加载时、会完成一系列的初始化动作。
(2)根据servlet 的映射请求(上面的helloWorld 实例中针对.do 请求),并参照“控制器配置文件”(即spmvc-servlet.xml 这样的配置)文件,把具体的请求分发给特定的后端控制器进行处理(比如上例会分发给HelloWorld 控制器进行处理)
(3)后端控制器调用相应的逻辑层代码,完成处理并返回视图对象( ModelAndView )给前端处理器。
(4)前端控制器根据后端控制器返回的 ModelAndView 对象,并结合一些配置(后面有说明),返回一个相应的页面给客户端。
小结 :这种Front Controller 模式常应用在主流的web 框架中,比如典型的struts1.x 框架.Front Controller 模式:所有请求先交给一个前端处理器(总控处理器)处理,然后前端处理器会参照一些配置文件再把具体的请求交给相应的后端处理器。后端处理器调用逻辑层代码,并根据逻辑返回相应的视图对象给前端控制器。然后前端控制器再根据视图对象返回具体的页面给客户端(提示:和spring mvc 一样,在struts1.x 中前端控制器是Servlet, 而在struts2 中前端控制器是Filter )。 概述 Front Controller 模式:前端控制器预处理并分发请求给后端控制器,后端控制器进行真正的逻辑处理并返回视图对象,前端控器器根据视图对象返回具体页面给客户端。
mvc在struts2中的原理
同理:在struts2中我们最主要的也是对DispatcherServlet (也称总控制器)的一系列的操作进行管理 如:
包括我们上面所提到的1.配置控制器文件,2.通过model层对数据的处理然后再回到控制器返回处理的结果,最后进行页面的跳转。下面是自定义mvc的DispatcherServlet的关键代码:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //对数据的初始化 ActionMapping mapping=this.getActionMapping(request);\ //通过反射机制找到具体的action对象 Action action =ActionManager.CreateAction(mapping.getClassName()); ResultMapping result=null; try { //处理后返回的跳转页面的值 String resultName=action.execute(request, response); result=mapping.getResult(resultName); if(result==null){ response.sendError(404, "未配置Action的result元素"); return; } if(result.isRedirect()){ response.sendRedirect(result.getValue()); }else{ request.getRequestDispatcher(result.getValue()).forward(request, response); } } catch (Exception e) { response.sendError(505, "异常,请联系管理员"); } } mvc模式常会被人到它的优点缺点:优点:各司其职 缺点:model II相对model I来说配置复杂.