принцип работы springmvc и анализ исходного кода

задняя часть

1. Архитектура JavaEE

JavaEE体系结构

Два, шаблон дизайна mvc | идея

mvc设计思想

Model 模型层  (javaBean组件 = 领域模型(javaBean) + 业务层 + 持久层)

View 视图层( html、jsp…)

Controller 控制层(委托模型层进行数据处理)

3. Введение в springmvc

springmvc是一个web层mvc框架,类似struts2。

В-четвертых, отношения между SpringMVC и весной

spring

springmvc是spring的部分,其实就是spring在原有基础上,又提供了web应用的mvc模块。

5. Сравнение sprigmvc и struts2

实现机制:

struts2是基于过滤器实现的。

springmvc是基于servlet实现的。

运行速度:

因为过滤器底层是servlet,所以springmvc的运行速度会稍微比structs2快。

struts2是多例的           

springmvc单例的    

参数封装:

struts2参数封装是基于属性进行封装。

springmvc是基于方法封装。颗粒度更细。 

6. Схема принципа работы springmvc

springmvc工作原理图

Семь конкретных шагов процесса springmvc

⑴ 用户发送请求至DispatcherServlet。

⑵ DispatcherServlet收到请求调用HandlerMapping查询具体的Handler。

⑶ HandlerMapping找到具体的处理器(具体配置的是哪个处理器的实现类),生成处理器对象及处理器拦截器(HandlerExcutorChain包含了Handler以及拦截器集合)返回给DispatcherServlet。

⑷ DispatcherServlet接收到HandlerMapping返回的HandlerExcutorChain后,调用HandlerAdapter请求执行具体的Handler(Controller)。

⑸ HandlerAdapter经过适配调用具体的Handler(Controller即后端控制器)。

⑹ Controller执行完成返回ModelAndView(其中包含逻辑视图和数据)给HandlerAdaptor。

⑺ HandlerAdaptor再将ModelAndView返回给DispatcherServlet。

⑻ DispatcherServlet请求视图解析器ViewReslover解析ModelAndView。

⑼ ViewReslover解析后返回具体View(物理视图)到DispatcherServlet。

⑽ DispatcherServlet请求渲染视图(即将模型数据填充至视图中) 根据View进行渲染视图。

⑾ 将渲染后的视图返回给DispatcherServlet。

⑿ DispatcherServlet将响应结果返回给用户。

Восемь, описание основного компонента springmvc

(1)前端控制器DispatcherServlet(配置即可)

功能:中央处理器,接收请求,自己不做任何处理,而是将请求发送给其他组件进行处理。DispatcherServlet 是整个流程的控制中心。

(2)处理器映射器HandlerMapping(配置即可)

功能:根据DispatcherServlet发送的url请求路径查找Handler

常见的处理器映射器:BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping,

ControllerClassNameHandlerMapping,DefaultAnnotationHandlerMapping(不建议使用)

(3)处理器适配器HandlerAdapter(配置即可)

功能:按照特定规则(HandlerAdapter要求的规则)去执行Handler。

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展多个适配器对更多类型的处理器进行执行。

常见的处理器适配器:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter,AnnotationMethodHandlerAdapter

(4)处理器Handler即Controller(程序猿编写)

功能:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。

(5)视图解析器ViewReslover(配置即可)

功能:进行视图解析,根据逻辑视图名解析成真正的视图。

ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

springmvc框架提供了多种View视图类型,如:jstlView、freemarkerView、pdfView...

(6)视图View(程序猿编写)

View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)

Девять, случай входа springmvc

  • Создать maven-проект
    maven工程
  • Настроить POM.XML

Представьте связанные зависимости: базовый пакет spring, spring-webmvc, необходимый для springmvc, slf4j-log4j12, связанный с журналами, jstl, servlet-api и jsp-api, связанный с jsp.

pom.xml

  • настроить web.xml

Поскольку DispatcherServlet сам по себе является сервлетом, его необходимо настроить в файле web.xml.

web.xml

  • Настроить springmvc.xml

1. Используя метод загрузки файла конфигурации springmvc по умолчанию, необходимо соблюдать следующие спецификации:

① Правила именования: -servlet.xml ====> springmvc-servlet.xml

② Правило пути: -Servlet.xml должен быть помещен в веб-инф ниже

Во-вторых, если вы не используете расположение загрузки по умолчанию, вам необходимо указать путь загрузки к файлу конфигурации SpringMVC в Web.xml, как показано на рисунке выше.

springmvc.xml

  • Пользовательский контроллер (процессор)

Настройте пользовательский обработчик контроллера в контейнере Spring и позвольте контейнеру Spring управлять им, потому что сопоставитель обработчика в файле конфигурации springmvc.xml здесь настроен с помощью BeanNameUrlHandlerMapping. Согласно имени, сопоставитель обработчика основан на bean-компоненте (self- Определите URL-адрес значения атрибута имени контроллера), чтобы найти обработчик класса выполнения (контроллер), поэтому значение атрибута имени компонента является URL-адресом, соответствующим пути запроса, отправленному пользователем.

MyController.java

  • определить страницу просмотра

Разобрать путь в соответствии с представлением: WEB-INF/jsps/index.jsp

inde.jsp

  • Проанализируйте процесс выполнения springmvc по коду

springmvc代码执行流程

  • Карта процессора (настройка нескольких процессорных материалов)
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

Функция: Найдите контроллер класса выполнения в соответствии с URL-адресом атрибута имени компонента (пользовательский контроллер).

  • Адаптер процессора (можно настроить несколько адаптеров процессора для совместной работы)
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

Функция: когда пользовательский обработчик (контроллер) реализует интерфейс контроллера, адаптер будет выполнять определенные методы контроллера.

  • Исходный код адаптера обработчика SimpleControllerHandlerAdapter

SimpleControllerHandlerAdapter源码分析
SimpleControllerHandlerAdapter автоматически определит, реализует ли пользовательский обработчик (контроллер) интерфейс контроллера, и если да, то автоматически вызовет метод handleRequest обработчика.

В интерфейсе Controller есть метод handleRequest, который является методом обработчика.

Следовательно, если пользовательский контроллер хочет вызвать, он должен реализовать интерфейс контроллера и переопределить метод обработчика в интерфейсе контроллера.

  • добавить журнал

log4j.properties

  • результат операции

运行结果

                                 如果觉得这篇文章对你有帮助  
                                    麻烦帮忙点个赞或关注
                                  这对我来说是一种很好的鼓励
                                       在此先谢谢各位 
                                          O(∩_∩)O