是这样的,在网上大多数spring和springMVC的整合中,都需要在web.xml里面配置两样东西:1、对spring配置listener,如图:
2、对springMVC配置servlet,如图:
上面这样的配置确实可以运行,我已经测试过。但是,在我公司里面,也采用了spring和springMVC的整合,奇怪的是在web.xml中只看到了对了springMVC的servlet配置,却没有见到对spring的listener的配置,如下图,公司的web.xml配置:web.xml的行数太多,截不完,但是我仔细找过了,确实没有spring的listenner配置!难道spring和springMVC整合后,可以取消掉spring的listener配置吗?需要对公司项目说明的几点:
1、公司项目中spring和springMVC各自配置文件都是采用的注解方式进行配置,即没有applicationContext.xml这类似的配置文件,如下图:
spring的配置类:appConfig.javaspringMVC的配置类:webConfig.javawebConfig.java,是一路一路的继承下来的,反正最终它继承的是WebMvcConfigurerAdapter,如下图:

解决方案 »

  1.   

    1. 如果只有 Spring mvc 的一个 Servlet,listener 可以不用。
    2. 但是如果用了Shiro 等,Shiro 用到的 Spring 的配置必须在 listener 里加载。
    3. 一般 Dao, Service 的 Spring 配置都会在 listener 里加载,因为可能会在多个 Servlet 里用到,因为父子 Context 的可见性问题,防止重复加载所以在 listener 里加载。所以,有时可用可不用,有时必用,具体看情况。
      

  2.   

    估计你们项目里没和Ioc容器一起使用。
    一般配置spring监听器都是为了配合Ioc容器一起使用的。spring源代码里可以看到,启动web服务器的时候会调用监听器的上下文初始化方法,然后去初始化Ioc容器。
      

  3.   


    朋友,IOC容器是用了的啊,@Bean标签就是把对象放进IOC容器的
      

  4.   

    ContextLoaderListener 是在上下文加载的时候调用一些配置进行初始化,比如你配置的<context-param>之类的标签。
      

  5.   

    Spring自带了几种类型的应用上下文:
    1、ClassPathXmlApplicationContext-——从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做类资源;
    2、FileSystemXmlapplicationContext——读取文件系统下的XML配置文件并加载上下文定义;
    3、XmlWebApplicationContext——读取Web应用下的XML配置文件并装配上下文定义。
    Spring MVC采用第三种方式,首先你肯定配置了dispatcher-servlet这个servlet,它会自动加载dispatcher-servlet.xml。如果你只有这一个XML配置文件,那就不用加<listener>那一块的配置。但往往你或许还有个applicationContext.xml,那你就应该加载这个应用上下文(除非你不用他,那你干嘛还要定义他呢?)
    那么问题来了,你应该用上面提到的哪种方式的应用上下文呢?(如果用前两种方式,我觉得就不用listener,这个是我臆断的,觉得合理就采纳,也希望大家提出意见)这时候大家往往会选择第三种,在web.xml部署描述符中加载应用上下文。dispatcher-servlet.xml可以自动加载,那么你也想同样的加载applicationContext.xml的话,你就得用listener:
    <context-param>
        <param-name>contextConfigLocation<param-name>
        <param-value>
             classpath:application.xml
        </param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
      

  6.   

    http://stackoverflow.com/questions/11815339/role-purpose-of-contextloaderlistener-in-springhttp://syntx.io/difference-between-loading-context-via-dispatcherservlet-and-contextloaderlistener/http://www.codesenior.com/en/tutorial/Spring-ContextLoaderListener-And-DispatcherServlet-Concepts
      

  7.   

     http://www.codesenior.com/en/tutorial/Spring-ContextLoaderListener-And-DispatcherServlet-Concepts
      

  8.   

    我看上面,意思是:dispatcher-servlet.xml的spring也要listener,但我现在看的一本书上说不用,我做实验试试吧。
      

  9.   

    经试验:
    1、不加
    <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:applicationContext.xml
            </param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    直接写:
    <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            
            <load-on-startup>2</load-on-startup>
        </servlet>
    这时候程序报错,java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]说明这里如果不给dispatcher,web.xml会去WEB-INF下找dispatcher-servlet.xml。
    这这时候这servlet中加
    <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:dispatcher-servlet.xml</param-value>
            </init-param>
    就不报错了,程序可以运行。
    由此可以证明,若只有dispatcher-servlet.xml这样的spring配置文件,则不需linstener,因为web.xml中的servlet应该会自己去找,只是在WEB-INF下找。
    然后加上classpath:dispatcher-servlet.xml,他就会去classpath下找(classpath的默认路径是什么呀?
      

  10.   

    ContextLoaderListener or not? 
     
    这里 spring 官网
      

  11.   

    SpringMVC是Spring的一部分,对于IOC控制反转,SpringMVC里面都会根据bean配置文件或者注解自动添加的。
      

  12.   

    我记得不配置的话会自动加载一个默认名字的配置文件,好想叫做servlet-application.xml吧,记不太清楚来了
      

  13.   

    楼主你好,我用的就是这种方式,然而跑起来没得到我预期的效果,配置类没起作用,而我的另一个项目也是用这种配置,然后可以跑起来,我想问的是,会照成这种问题的原因是什么?jar包?配置?
      

  14.   

     one times