2012-01-19 24 views
19

Estoy tratando de crear una aplicación simple de Spring 3 y tengo los siguientes archivos. Por favor, dime la razón de este errorNo se encontró WebApplicationContext: no se ha registrado ContextLoaderListener?

continuación es mi web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     id="WebApp_ID" version="3.0"> 
    <display-name>Spring2</display-name> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>0</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

continuación es mi index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
     <title>Insert title here</title> 
    </head> 
    <body> 
     Index Page<br/> 
     <form:form commandName="loginBean" method="POST" action="login"> 
      <form:input path="userName" id="userName"/><br/> 
      <form:input path="password" id="password"/><br/> 
      <input type="submit" value="submit"/> 
     </form:form> 
     <a href="register.jsp">Go to Registration Page</a> 
    </body> 
</html> 

continuación es mi despachador-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
    <bean name="/login" class="com.infy.controller.LoginController"/> 
</beans> 

Este es el LoginController.java

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 


@Controller 
public class LoginController { 
    @RequestMapping(value="/login", method=RequestMethod.POST) 
    public ModelAndView loginAction(@ModelAttribute("loginBean")LoginBean bean){ 
     return new ModelAndView("success", "success", "Successful Login"); 
    } 
} 

Y por último, mi LoginBean

public class LoginBean { 
    private String userName; 
    private String password; 
    public String getUserName() { 
     return userName; 
    } 
    public void setUserName(String userName) { 
     this.userName = userName; 
    } 
    public String getPassword() { 
     return password; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 
} 

Respuesta

64

Usted tiene que tener un ContextLoaderListener en su web.xml - Se carga los archivos de configuración.

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

Debe comprender la diferencia entre el contexto de la aplicación web y el contexto de la aplicación raíz.

En el marco MVC web, cada uno tiene su propia DispatcherServlet WebApplicationContext, que hereda todos los granos ya definidos en la WebApplicationContext raíz. Estos beans heredados definidos se pueden anular en el ámbito específico del servlet, y los nuevos beans específicos del ámbito se pueden definir localmente para una instancia de servlet determinada.

El contexto de la aplicación del servlet despachador es un contexto de aplicación web que solo es aplicable para las clases web. No puede usar estos para sus capas de nivel medio. Estos necesitan un contexto de aplicación global utilizando ContextLoaderListener.

Lea la referencia de primavera here para spring mvc.

+2

que va necesita una applicationContext.xml y luego da un error de enlace – Batman

+1

@Batman. También cómo está auto detectando sus controladores. Necesita un contexto: escaneo de componentes o '' –

+0

@Batman consulte la referencia de Spring que he incluido. Te ayudará. –

0

Y si le gustaría usar un contexto existente, en lugar de un nuevo contexto que se carga desde la configuración de XML por org.springframework.web.context.ContextLoaderListener, luego ver ->https://stackoverflow.com/a/40694787/3004747

+0

Esto se puede utilizar además de web.xml y también en ausencia de web.xml – ank

Cuestiones relacionadas