Spring MVC Hello World application not working

2019-08-07 10:35发布

问题:

I'm new to Spring MVC and I'm trying to write a simple web app to get started with Spring.

Here's what I have:

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_2_5.xsd" 
    id="WebApp_ID" version="2.5"> 
    <display-name>HatifimWeb</display-name> 
    <welcome-file-list> 
        <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
        <servlet-name>main</servlet-name> 
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
        <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
        <servlet-name>main</servlet-name> 
        <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app>

main-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" xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
    <context:component-scan base-package="springapp.controller" /> 
    <bean id="viewResolver" 
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
        <property name="viewClass" 
            value="org.springframework.web.servlet.view.JstlView" /> 
        <property name="prefix" value="/WEB-INF/jsps/" /> 
        <property name="suffix" value=".jsp" /> 
    </bean> 
</beans>

LoginController.java

package springapp.controller; 

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

@Controller 
public class LoginController { 

    @RequestMapping("/Login") 
    public ModelAndView handleRequest() throws Exception { 
        System.out.println("Login..."); 

        return new ModelAndView("Login", "message", "test"); 
    } 

} 

index.jsp

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!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> 
    Hello. 
    <br /> 
    <a href="Login">login</a> 
</body> 
</html> 

Login.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!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>poopidipoo</title> 
</head> 
<body> 
    ${message} 
</body> 
</html>

The index.jsp starts well, but when I click to navigate to the login page, I get 404. I'm using Tomcat 7. And I'm out of ideas, it looks like the DispatcherServlet is not being invoked for some reason.

What could be the problem?

Thanks in advance.

回答1:

The issue could be that you are missing the context path in your page, try this way:

<a href="${pageContext.request.contextPath}/Login">login</a> 

Update:

Can you please also add <mvc:annotation-driven/> to your main-servlet.xml