2012-01-19 11 views
19

मैं एक साधारण स्प्रिंग 3 एप्लिकेशन बनाने की कोशिश कर रहा हूं और निम्न फाइलें हैं। कृपया मुझे इस त्रुटिकोई WebAplicationContext नहीं मिला: कोई ContextLoaderListener पंजीकृत नहीं है?

नीचे के लिए कारण बताओ मेरी 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> 

नीचे है मेरी 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> 

नीचे है मेरी डिस्पैचर-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> 

यह 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"); 
    } 
} 

और अंत में मेरी 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; 
    } 
} 

उत्तर

64

आप अपने web.xml में एक ContextLoaderListener है करना होगा - यह आपके विन्यास फाइल लोड करता है।

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

आपको वेब अनुप्रयोग संदर्भ और रूट अनुप्रयोग संदर्भ के बीच अंतर को समझने की आवश्यकता है।

वेब MVC ढांचे में, प्रत्येक DispatcherServlet अपनी ही WebApplicationContext, जो सभी सेम पहले से ही जड़ WebApplicationContext में परिभाषित विरासत है। इन विरासत में परिभाषित बीन्स को सर्वलेट-विशिष्ट दायरे में ओवरराइड किया जा सकता है, और नए स्कोप-विशिष्ट बीन्स को किसी दिए गए सर्वलेट उदाहरण में स्थानीय परिभाषित किया जा सकता है।

प्रेषक सर्वलेट का अनुप्रयोग संदर्भ एक वेब अनुप्रयोग संदर्भ है जो केवल वेब कक्षाओं के लिए लागू होता है। आप इन्हें अपने मध्यम स्तर की परतों के लिए उपयोग नहीं कर सकते हैं। ContextLoaderListener का उपयोग करके इन्हें वैश्विक ऐप संदर्भ की आवश्यकता है।

वसंत एमवीसी के लिए वसंत संदर्भ here पढ़ें।

+2

यही हूँ एक अनुप्रयोग Context.xml की आवश्यकता है और इसके बाद यह एक बाध्यकारी त्रुटि – Batman

+1

@ बैटमैन देता है इसके अलावा आप अपने नियंत्रकों को स्वचालित रूप से कैसे पहचान रहे हैं। आपको एक संदर्भ की आवश्यकता है: घटक स्कैन या '' –

+0

@ बैटमैन मैंने जो वसंत संदर्भ डाला है उसकी जांच करें। यह आपकी मदद करेगा। –

0

और अगर आप बजाय एक नया संदर्भ में जो org.springframework.web.context.ContextLoaderListener द्वारा एक्सएमएल विन्यास से लोड किया जाएगा की तुलना में एक मौजूदा संदर्भ का उपयोग करने के लिए, चाहते हैं तो देखते हैं ->https://stackoverflow.com/a/40694787/3004747

+0

इसका उपयोग web.xml के अलावा और web.xml की अनुपस्थिति में भी किया जा सकता है – ank