猿问

关于 DispatcherServlet 和 ContextLoaderListener 的一些疑问。

在 Spring MVC 的开发中,会在 web.xml 中配置 DispatcherServletContextLoaderListener ,对此有一些疑惑。

我是创建了一个 applicationContext.xmlspring-mvc.xml 文件。

applicationContext.xml 中配置了了 datasourcetranscation
spring-mvc.xml 中配置了开启 annotation 扫描的一些配置。

那么是否应该这样分模块的进行配置,以及我这样配置是否合理?

再紧接着的又一个问题就是: DispatcherServletContextLoaderListener 都会加载配置文件。

  • 那么什么样的配置应该在这两者中的哪一个上加载?
  • 是否可以不配置 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>
神不在的星期二
浏览 445回答 2
2回答

慕标琳琳

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

小唯快跑啊

</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>
随时随地看视频慕课网APP

相关分类

Java
我要回答