- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Spring 很陌生。
我希望验证对 SpringMVC 生命周期的以下理解——将事物放在整体 View 中的位置:
整个过程是请求驱动的。
有一个Front Controller pattern Spring MVC 中的 Front Controller 是 DispatcherServlet .
在用户的每个传入请求时,Spring 都会管理
here 中描述的整个生命周期.
总体来看,DispatcherServlet将请求分派(dispatch)给后端服务的 Controller 。
完成此操作后,它会将其交给 MVC 的 View 组件,以准备其 View 以响应用户。
更详细地说,
最佳答案
让我们一步一步详细介绍
DispatcherServlet uses Handlers to decide "which controller" to serve that request
DispatcherServlet
维持有序
List
的
HandlerMapping
bean(它从
WebApplicationContext
加载)。一个
HandlerMapping
是
Interface to be implemented by objects that define a mapping between requests and handler objects.
DispatcherServlet
接收到一个请求,它会遍历这个列表,直到找到一个匹配的处理程序对象。为简单起见,我们只考虑
RequestMappingHandlerMapping
.
@RequestMapping
的映射。存储为
Method
的带注释的方法(通过反射检索到的实际
HandlerMethod
对象)实例并包装在
RequestMappingInfo
中保存映射数据以匹配请求的对象,即。 URL、 header 和请求参数。
DispatcherServlet
检索最佳匹配
HandlerMethod
从这些和任何相应的
HandlerInterceptor
您可能已经注册的实例。它将这些检索为
HandlerExecutionChain
目的。它将首先应用任何
pre-handling通过
HandlerInterceptor
s。然后它将尝试调用您的
HandlerMethod
.这通常(但不总是)是
@RequestMapping
@Controller
中的注释方法注释类。这会产生 Spring 所称的
调度结果 .
DispatcherServlet
然后申请
post-handling由
HandlerInterceptor
s。它最终根据它是什么来处理调度结果。
You can see the supported return types for an idea of what that can be.
The controllers are/should be "light-weighted"-- should be decoupled from the service processes at back end as a good design practice-- they hold references to the service(s) and invoke the right one(s). Their "mission" is to control the service process(es) for building the model and handing it back to the dispatcher for the next step.
Model
),
DispatcherServlet
可能使 View 可用。我说可能是因为 Controller 可以直接产生响应而不涉及任何 View (想想
jsp
)。
The View component in itself has 2 parts: first the ViewResolver picks the right type of look for View to put the model into the final format for the user.
Model
的典型情况下,
View
,
ModelAndView
,
String
(和其他一些)对象,然后是
ViewResolver
将处理找到正确的
View
.
DispatcherServlet
然后尝试按照您所说的首先合并模型来呈现该 View 。这通常意味着拿走所有
Model
属性并将它们放入
HttpServletRequest
属性。渲染步骤可能涉及渲染
jsp
,生成 XML 或任何东西。
From the developer's angle-- the DispatcherServlet is a behind-the-scenes thing. All i do is to define, and configure it, if necessary, in web.xml. As the developer, I instantiate an ApplicationContext (there are many ApplicationContext types-- i pick one depending on what i need, typically the WebApplicationContext(?) ).
DispatcherServlet
当
ContextLoaderListener
容器电话
Servlet
在上面。它将生成自己的
init()
.
WebApplicationContext
.
AplicationContext is the factory that creates all the servlets/beans including the DispatcherServlet, using their descriptions in the .xml files. The DispatcherServlet then runs behind the scenes and manages the entire process-- goes&gets the controllers, using the annotations or the their .xml descriptions, views, handlers, validators etc.
WebApplicationContext
也称为
控制容器反转 .它不包括
<init-param>
.
ApplicationContext
由
DispatcherServlet
管理容器而不是Spring。但是,它确实主要从 Spring 的
DispatcherServlet
中获取配置。 (
Servlet
)。
What you can do is decide which subclass of ApplicationContext
to use. This is an important choice if you want to load your context from XML or from a Java configuration. You can do this by providing an WebApplicationContext
It registers a number of special beans it finds in the context.
<mvc:annotation-driven>
I am wondering whether this description is holds-- valid&complete, and whether there are big missing pieces in it.
Servlet
Web应用程序。因此,应用程序的生命周期与
Servlet
相关联。容器。
关于spring-mvc - SpringMVC生命周期——全貌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20385474/
我对 Spring 很陌生。 我希望验证对 SpringMVC 生命周期的以下理解——将事物放在整体 View 中的位置: 整个过程是请求驱动的。 有一个Front Controller patter
我是一名优秀的程序员,十分优秀!