文章目录
- SpringMVC运行流程
- MVC的概念与请求在MVC中的执行路径,@ResponsBody注解的用途
- SpringMVC启动流程
- SpringMVC的拦截器和过滤器有什么区别?执行顺序?
- Spring和SpringMVC为什么需要父子容器?
SpringMVC运行流程
• 客户端(浏览器)发送请求,直接请求到 DispatcherServlet 。
• DispatcherServlet 根据请求信息调用 HandlerMapping ,解析请求对应的 Handler 。
• 解析到对应的 Handler (也就是 Controller 控制器)后,开始由HandlerAdapter 适配器处理。
• HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑。
• 处理器处理完业务后,会返回一个 ModelAndView 对象, Model 是返回的数据对象
• ViewResolver 会根据逻辑 View 查找实际的 View 。
• DispaterServlet 把返回的 Model 传给 View (视图渲染)。
• 把 View 返回给请求者(浏览器)
MVC的概念与请求在MVC中的执行路径,@ResponsBody注解的用途
请求到达mvc后,通过一个分发器,找到对应的处理controller,处理完好返回的model数据,经过view处理器渲染进视图中返回,如JSP。如果有@ResponseBody注解,就不进行view渲染,直接返回model数据,一般以json格式。
见另一篇博客:mvc。
SpringMVC启动流程
SpringMVC的拦截器和过滤器有什么区别?执行顺序?
拦截器和过滤器在Web应用中都扮演着请求和响应处理的角色,但它们之间存在一些关键区别。
- 归属不同:拦截器是SpringMVC框架的一部分,而过滤器是Servlet规范的一部分。拦截器主要用于对控制器层的请求进行处理,它们提供了更细粒度的控制,可以在请求进入控制器之前和之后执行特定的逻辑,例如身份验证、日志记录和权限检查。过滤器独立于SpringMVC,用于处理通用的请求和响应内容,例如字符编码、压缩和安全性。
- 执行顺序也不同:拦截器的执行顺序由配置文件中的顺序决定,可以有多个拦截器,它们按照配置的顺序依次执行。而过滤器的执行顺序由web.xml文件中的配置顺序决定,同样可以有多个过滤器,按照配置的顺序执行。一般来说,首先执行过滤器,然后再执行拦截器。
- 用途不同:拦截器用于对SpringMVC的请求和响应进行特定的业务处理,通常与控制器层的请求处理有关。过滤器用于对所有Servlet请求和响应进行通用性的处理,通常关注请求和响应内容,而不涉及具体的业务逻辑。
总的来说,了解拦截器和过滤器之间的这些区别非常重要。在面试中,这种理解将有助于说明您在Web应用程序中如何处理请求和响应以及如何利用SpringMVC和Servlet规范的不同功能。
Spring和SpringMVC为什么需要父子容器?
- 首先,它们帮助划分功能边界,使得大型应用程序更易于管理。通过将不同模块或层次的组件分别放置在父子容器中,我们能够清晰地定义每个容器的职责,从而提高了代码的可维护性和可扩展性。
- 其次,父子容器在规范整体架构方面起到了关键作用。例如,我们可以将业务逻辑层(Service)和数据访问层(DAO)交给Spring管理,而将控制器层(Controller)交给SpringMVC管理。这种规范化有助于提高代码的可读性,并使团队协作更加顺畅。
- 此外,父子容器还能限制组件之间的依赖关系,确保模块之间的隔离。子容器可以访问父容器中的组件,但反之则不成立。这有助于减少意外的依赖和提高代码的稳定性。
- 另一个优势是方便切换子容器。如果我们需要更改子容器,例如从Spring MVC切换到Struts,只需更改子容器的配置而无需更改父容器。这提供了更好的可维护性和扩展性,使得应用程序更容易适应不同的技术栈或框架。
- 最后,父子容器的使用还有助于节省资源。父容器中的Bean可以在整个应用程序范围内共享,而不必每次创建。这对于大型应用程序来说尤为重要,可以降低内存和性能开销。
综上所述,父子容器在Spring框架中的应用不仅有助于功能性划分,还有助于架构的规范化、模块化、松耦合和可维护性。虽然一些现代框架如Spring Boot可能减少了对父子容器的需求,但在大型和复杂的应用程序中,父子容器仍然是一种有用的设计模式,有助于管理和组织应用程序的各个部分。