JAVA面试锦囊(六)

2020-05-29 11:11:20 浏览数 (1)

● 简单介绍一下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结合ModelView渲染视图。DispatcherServlet将渲染结构返回给客户端。

0 人点赞