为了账号安全,请及时绑定邮箱和手机立即绑定

关于 DispatcherServlet 和 ContextLoaderListener 的一些疑问。

关于 DispatcherServlet 和 ContextLoaderListener 的一些疑问。

神不在的星期二 2019-02-17 04:24:20
在 Spring MVC 的开发中,会在 web.xml 中配置 DispatcherServlet 和 ContextLoaderListener ,对此有一些疑惑。 我是创建了一个 applicationContext.xml 和 spring-mvc.xml 文件。 在 applicationContext.xml 中配置了了 datasource、transcation。在 spring-mvc.xml 中配置了开启 annotation 扫描的一些配置。 那么是否应该这样分模块的进行配置,以及我这样配置是否合理? 再紧接着的又一个问题就是: DispatcherServlet 和 ContextLoaderListener 都会加载配置文件。 那么什么样的配置应该在这两者中的哪一个上加载? 是否可以不配置 ContextLoaderListener,而全部用 DispatcherServlet 加载? 这两者加载配置文件又什么区别? 经查询网上大多都是复制粘贴一样的答案,而且含糊不清: DispatcherServlet 一般会加载 MVC 相关的 bean 配置管理 ContextLoaderListener 一般会加载整个 Spring 容器相关的 bean 配置管理 现在我是这样进行配置的: <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext.xml, </param-value> </context-param>
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

这个是spring父子容器的问题吧,SpringMVC的spring-mvc.xml负责@Controller注解的Bean的注册,Spring父容器的applicationContext.xml负责其他非@Controller注解的Bean的注册,可以把全部配置陪在子容器里面.如果把全部Bean在父容器注册,源码里面会导致从子容器中取不到注册的Controller从而找不到Handler,所以访问controller会是404.

查看完整回答
反对 回复 2019-03-01
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

</servlet-mapping>
这个是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处
DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:

文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
通过ViewResolver解析逻辑视图名到具体视图实现;
本地化解析;
渲染具体的视图等;
如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。

load-on-startup:表示启动容器时初始化该Servlet;如果它存在,则它将在应用程序启动时装在servlet并调用它的init方法。若不存在,则在该servlet的第一个请求时加载。
url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。

该DispatcherServlet默认使用WebApplicationContext作为上下文,Spring默认配置文件为“/WEB-INF/[servlet名字]-servlet.xml”。
<listener>

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 444 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信