由于web.xml中的侦听器而导致错误

时间:2014-11-20 06:30:01

标签: java spring web-applications web.xml

当我从web.xml中删除侦听器部分时,我的项目运行正常。请让我知道为什么?

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">

    <display-name>migration</display-name>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <listener>
        <listener-class>
           org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
</web-app>

这是eclipse中的一个spring web应用程序。

3 个答案:

答案 0 :(得分:0)

仅当您有两个config xml文件时。说,SerivesContext.xmlContextDAO.xml 如果您已在一个弹簧配置文件中配置了所有内容,则不需要 ContextLoaderListener,只是调度程序servlet就足够了。

如果您使用不同的,可以将其配置为

   <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml,WEB-INF/spring-security.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

答案 1 :(得分:0)

ContextLoaderListener是可选的。如果您所有的bean都在(子)Web上下文(DispatcherServlet)中,则可以将其删除。

它是如何工作的,Spring通过Spring的ContextLoaderListener加载了一个根WebApplicationContext,通过Spring的DispatcherServlet加载了一个子WebApplicationContext。这会产生父子上下文层次结构。

如果你根本不需要任何东西,那么只需保留DispatcherServlet。

进一步阅读:

答案 2 :(得分:0)

在Spring Web Applications中,有两种类型的容器,每种容器都以不同方式配置和初始化。一个是Application Context,另一个是WebApplicationContext

ContextLoaderListener的目的:

ContextLoaderListener用于初始化Application Context。在这种情况下,您将告诉Spring加载*-.context.xml中的所有classpath个文件。每个应用程序只有一个应用程序上下文

因此,您可以在web.xml中将其配置为

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:*-context.xml</param-value>
</context-param>

contextConfigLocation的目的:

另一方面,你有WebApplicationContextWebApplicationContextApplication Context的子上下文。 Spring Web应用程序中定义的每个DispatcherServlet都将具有关联的WebApplicationContext 。您可以将WebApplicationContext初始化为

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

注意:此处XML的名称必须与<servlet name>-servlet.xml类似。在我们的例子中,servlet的名称是dispatcher因此,XML文件的名称是dispatcher-servlet.xml

我希望这能让你在何时使用什么&amp;这是为什么。