Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No WebApplicationContext found: no ContextLoaderListener registered?

I'm trying to create a simple Spring 3 application and have the following files. Please tell me the reason for this error

Below is my 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> 

Below is my 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> 

Below is my 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> 

This is the 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");     } } 

And finally my 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;     } } 
like image 772
Batman Avatar asked Jan 19 '12 10:01

Batman


1 Answers

You'll have to have a ContextLoaderListener in your web.xml - It loads your configuration files.

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

You need to understand the difference between Web application context and root application context .

In the web MVC framework, each DispatcherServlet has its own WebApplicationContext, which inherits all the beans already defined in the root WebApplicationContext. These inherited beans defined can be overridden in the servlet-specific scope, and new scope-specific beans can be defined local to a given servlet instance.

The dispatcher servlet's application context is a web application context which is only applicable for the Web classes . You cannot use these for your middle tier layers . These need a global app context using ContextLoaderListener .

Read the spring reference here for spring mvc .

like image 78
Aravind A Avatar answered Sep 17 '22 13:09

Aravind A