● 简单介绍一下MVC模式?
MVC全名是Model View Controller,是模型(model) -- 视图(view) -- 控制器(controller)的缩写。一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚焦到一个部件里面。在改进和个性化定制界面以及用户交互的同时,不需要重新编写业务逻辑。
最简单、最经典的就是JSP(view) Servlet(Controller) JavaBean(model)。
(1) 控制器接收来自用户请求。
(2) 控制器调用JavaBean来完成业务。
(3) 完成业务后通过控制器跳转JSP页面的方式给用户反馈信息。
(4) JSP为用户做出最终的响应。
● 简单说一下对MVC框架的理解?
是为了解决传统MVC模式一些问题问题而出现的框架,传统的mvc模式存在一下问题:
(1) 所有的Servlet和Servlet映射都要配置在web.xml中,如果项目太大。web.xml太庞大了,并且不能实现模块化管理。
(2) Servlet的主要功能就是接收参数、调用逻辑、跳转页面,比如像其他字符编码、文件上传等功能也要写在Servlet中,需要做特定的处理。
(3) 接收参数麻烦,不能通过model接收。只能单个的接收。接收完成后需要手动设置进model中。
(4) 跳转页面的方式比较单一(forword,redirect),并且当页面发生修改时需要修改Servlet源代码。
● Struts2的执行流程或者Struts2的原理?
(1) 客户端向服务端发起一个请求,这个请求经过一系列的过滤器(Filter),到达核心Filter。接着FilterDispatcher(StrutsPrepareAndExecuteFilter)被调用,询问ActionMapper来决定着请求是否需要调用某一个Action,如果不需要则走原来的流程。
(2)如果ActionMapper决定需要调用某个Action时,FilterDispatcher(StrutsPrepareAndExecuteFilter)把这个请求交给ActionProxy;
(3) ActionProxy通过Configuration Manager询问框架的配置文件(struts.xml),找到需要调用的Action类。
(4) ActionProxy创建一个ActionInvocation实例。
(5) ActionInvocation实例使用命名模式来调用,在调用Action的过程中前后,涉及到相关的拦截器(Intercepter)的调用。
(6) 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置文件找到对应的返回结果。返回结果通常是一个需要被表示的JSP或者FreeMarker的模板。
● Struts2的拦截器是什么?你都用它干什么?
在struts2中的功能(参数处理、文件上传、字符编码等)都是通过用拦截器完成的。
我们也可以自定义拦截器,进行可插拔配置,在执行Action的方法前后执行相关逻辑完成业务。如:
(1) 用户登录判断,在执行Action的前面判断是否已经登录,如果没有登录的跳转到登录页面。
(2) 用户权限判断,在执行Action的前面判断是否具有权限,如果没有权限就给出提示信息。
操作日志
● 说说Spring MVC的执行流程?
(1) 用户向服务器发送请求,请求被Spring前端控制器Servlet(DispatcherServlet)捕获。
(2) DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器)。最后以HandlerExecutionChain对象的形式返回。
(3) DispatcherServlet选择一个合适的HandlerAdapter。提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller),Handler执行完成后,向DispatcherServlet返回一个ModelAndView对象。
(4) DispatcherServlet根据返回的ModelAndView,选择一个合适的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)。
(5) 通过ViewResolver结合Model和View渲染视图。DispatcherServlet将渲染结构返回给客户端。