2012-01-19 14 views
19

Tôi đang cố gắng tạo một ứng dụng Spring 3 đơn giản và có các tệp sau. Xin vui lòng cho tôi biết lý do cho lỗi nàyKhông có ứng dụng webTìm thấy tiếp theo: không có ContextLoaderListener đã đăng ký?

Dưới đây là web.xml của tôi

<?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> 

Dưới đây là index.jsp tôi

<%@ 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> 

Dưới đây là tôi phối-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> 

Đây là 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"); 
    } 
} 

Và cuối cùng LoginBean tôi

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; 
    } 
} 

Trả lời

64

Bạn sẽ cần phải có một ContextLoaderListener trong web.xml của bạn - Nó tải file cấu hình của bạn.

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

Bạn cần hiểu sự khác biệt giữa ngữ cảnh ứng dụng Web và ngữ cảnh ứng dụng gốc.

Trong khung MVC web, mỗi DispatcherServlet có WebApplicationContext riêng, trong đó kế thừa tất cả các hạt đã được xác định trong gốc WebApplicationContext. Những hạt được thừa kế được xác định có thể được ghi đè trong phạm vi đặc thù của servlet và phạm vi phạm vi cụ thể mới có thể được định nghĩa cục bộ cho một cá thể servlet cụ thể.

Ngữ cảnh ứng dụng của điều phối viên servlet là ngữ cảnh ứng dụng web chỉ áp dụng cho các lớp Web. Bạn không thể sử dụng chúng cho các tầng lớp trung lưu của bạn. Chúng cần một bối cảnh ứng dụng toàn cầu bằng cách sử dụng ContextLoaderListener.

Đọc tài liệu tham khảo mùa xuân here cho mvc mùa xuân.

+2

mà sẽ cần một applicationContext.xml và sau đó nó đưa ra một lỗi ràng buộc – Batman

+1

@Batman Cũng như thế nào bạn tự động phát hiện bộ điều khiển của bạn. Bạn cần bối cảnh: quét thành phần hoặc '' –

+0

@Batman kiểm tra tham chiếu Mùa xuân mà tôi đã đưa vào. Nó sẽ giúp bạn. –

0

Và nếu bạn muốn sử dụng một bối cảnh hiện tại, chứ không phải là một bối cảnh mới đó sẽ được nạp từ cấu hình xml bởi org.springframework.web.context.ContextLoaderListener, sau đó xem ->https://stackoverflow.com/a/40694787/3004747

+0

Điều này có thể được sử dụng ngoài tệp web.xml và cũng không có tệp web.xml – ank