2014-11-21 3 views
1

Я создал базовое веб-приложение Spring MVC с Maven. Тем не менее, я борется с получением постоянных 404 ошибок, когда я обращаюсь к URL/login. URL-адрес/login должен быть сопоставлен с сервлетом AuthController и методом createLoginForm(), но, к сожалению, он не работает, и я заканчиваю ошибку 404.Spring MVC - Получение постоянных ошибок 404 на Tomcat

Я пытаюсь выяснить, что является проблемой, которая вызывает ошибки 404 и почему URL-адрес/URL-адрес нельзя сопоставить сервлету.

Проблема заключается в плохой конфигурации файлов web.xml или spring-dispatcher-servlet.xml, которые предотвращают отображение URL-адреса?

Когда я обращаюсь к/URL-адресу, файл index.jsp отображается и работает нормально Файл login.jsp помещается вне каталога WEB-INF, в webapp, а также в индекс .jsp.

Заранее спасибо.
AuthController.java

package com.github.wjoz.springmvcreview.auth; 

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

@Controller 
public class AuthController { 

    @RequestMapping(value="/login", method=RequestMethod.GET) 
    public ModelAndView createLoginForm() { 
     ModelAndView model = new ModelAndView("login"); 
     return model; 
    } 

} 

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" 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>springmvcreview</display-name> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <servlet-name>spring-dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>spring-dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

весенне-диспетчерская-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 

<mvc:default-servlet-handler/> 
<context:component-scan base-package="main.java.com.github.wjoz.springmvcreview.auth" /> 
<mvc:annotation-driven /> 
<!-- Tells the location of the view in the project --> 
<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver" > 
     <property name="prefix"> 
     <value>/WEB-INF/</value> 
     </property> 
     <property name="suffix"> 
     <value>.jsp</value> 
     </property> 
</bean> 

</beans> 

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE> 
<html> 
<head> 
    <title>Welcome to our application. Sign in.</title> 
</head> 
<body> 

    <form action="/springmvcreview/login" method="post"> 
    <div> 
    <label for="username">Username</label> 
    <input type="text" name="username" id="username"> 
    <label for="password">Password</label> 
    <input type="password" name="password" id="password"> 
     <button type="submit">Sign in</button> 
    </div> 
    </form> 
</body> 
</html> 
+0

_ Вход.Файл jsp помещается вне каталога WEB-INF_ Тогда ваш 'InternalResourceViewResolver' бесполезен. –

+0

Спасибо за ответ. Однако, когда я перемещаю файл login.jsp в директорию WEB-INF, я все еще получаю 404 ошибки. – Wjoz

+0

Планируете ли вы использовать 'default-servlet-handler' для чего-нибудь? Если нет, удалите его. –

ответ

1

Это в дополнение к Shazin's answer

Во-первых, поместите файлы JSP внутри WEB-INF. Нет причин, чтобы иметь их за пределами этого, поскольку вы намеренно нарушаете функциональность рендеринга представления.

Во-вторых,

<servlet-mapping> 
    <servlet-name>spring-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

означает, что URL www.somedomain.com/ загрузит страницу индекса и все другие URL-адреса будут начинаться с этого. Однако ваша форма

<form action="/springmvcreview/login" method="post"> 

нажимает на URL-адрес www.somedomain.com/springmvcreview/login. Это не соответствует URL-адресу контроллера.

@RequestMapping(value="/login", method=RequestMethod.GET) 
public ModelAndView createLoginForm() { 

не содержит отображение для действия формы. Поэтому либо удалите /springmvcreview из формы, либо измените значение @RequstMapping на /springmvcreview/login

0

У вас нет contextConfigLocation для вашего DispatcherServlet. Вам нужно это сообщить context:component-scan для сканирования пакета com.github.wjoz.springmvcreview.auth и загрузить AuthController.

<servlet> 
    <servlet-name>spring-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value><PATH_TO>/spring-dispatcher-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

Я видел еще одну проблему. Вам не нужна часть main.java в следующем;

<context:component-scan base-package="com.github.wjoz.springmvcreview.auth" /> 
Смежные вопросы