web-dev-qa-db-fra.com

Aucun WebApplicationContext trouvé: aucun ContextLoaderListener enregistré?

J'essaie de créer une application simple Spring 3 et d'avoir les fichiers suivants. S'il vous plaît dites-moi la raison de cette erreur

Voici mon 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>

Ci-dessous mon 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>

Ci-dessous mon dispatcher-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>

C'est le 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");
    }
}

Et enfin mon 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;
    }
}
23
Batman

Vous devrez avoir un ContextLoaderListener dans votre web.xml - Il charge vos fichiers de configuration.

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

Vous devez comprendre la différence entre le contexte d'application Web et le contexte d'application racine.

Dans l'infrastructure Web MVC, chaque DispatcherServlet a son propre WebApplicationContext, qui hérite de tous les beans déjà définis dans la racine WebApplicationContext. Ceux-ci ont hérité Les beans définis peuvent être remplacés dans la portée spécifique à la servlet, et la nouvelle .__ spécifique à la portée. Les beans peuvent être définis localement sur une instance de servlet donnée.

Le contexte d'application du servlet du répartiteur est un contexte d'application Web qui s'applique uniquement aux classes Web. Vous ne pouvez pas les utiliser pour vos couches intermédiaires. Ceux-ci nécessitent un contexte d'application global utilisant ContextLoaderListener.

Lisez la référence de printemps ici pour le printemps mvc.

70
Aravind A

Et si vous souhaitez utiliser un contexte existant plutôt qu'un nouveau contexte qui serait chargé à partir de la configuration xml par org.springframework.web.context.ContextLoaderListener, , Puis consultez -> https://stackoverflow.com./a/40694787/3004747

1
ank