mvc locations formulario form example espaƱol ejemplo docs java spring jsp servlets spring-mvc

java - locations - Error Spring MVC 404



spring mvc formulario ejemplo (7)

Me estoy volviendo loco y no puedo entender cuál es el problema:

Tengo la siguiente estructura:

SpringMVC +WebContent -web-inf -web.xml -springMVC-servlet.xml -index.jsp -security -login.jsp

web.xml

<display-name>springMVC</display-name> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/index.html</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list>

springMVC-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> <beans 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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"> <context:annotation-config/> <context:component-scan base-package="com.vanilla.springMVC"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="prefix"> <value>/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> </beans>

Mi controlador:

package com.vanilla.springMVC; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.portlet.ModelAndView; @Controller public class DefaultController { @RequestMapping(value="/index.html", method=RequestMethod.GET) public ModelAndView index(){ ModelAndView mv = new ModelAndView("index"); return mv; } @RequestMapping(value="/login.html", method=RequestMethod.GET) public ModelAndView loginPage(){ ModelAndView mv = new ModelAndView("/security/login"); return mv; } }

No tengo problema para navegar a /index.html

http: // localhost: 8080 / SpringMVC / index.html funciona perfecto.

sin embargo, cuando estoy navegando a http: // localhost: 8080 / SpringMVC / login.html tengo un error 404.

HTTP Status 404 - /SpringMVC/login.jsp type Status report message /SpringMVC/login.jsp description The requested resource (/SpringMVC/login.jsp) is not available.

No quiero mover login.jsp al mismo nivel que index.jsp, pero ¿por qué tengo este problema?


  1. cree una carpeta en WEB-INF "jsps" para todas sus vistas, y debajo de "jsps" una carpeta de "seguridad" para su caso. AVISO: Al mover los archivos JSP a WEB-INF, puede evitar el acceso directo a estos archivos. Es necesario para la seguridad de la aplicación. Piense en una situación en la que sus JSP brinden información personal sobre su cliente y su controlador tenga que otorgar / verificar el acceso. Si sus JSP existen en WEB-INF, se puede acceder a ellas con una solicitud directamente.

  2. configura tu resolución de vista de esta manera:

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

luego, ponga sus JSP de inicio de sesión en "WEB-INF / jsps / security" y devuelva "security / login" desde su página de inicio de sesión.

Ahora, el resolvedor de vista busca las vistas en "WEB-INF / jsps". Como su método devuelve "seguridad / inicio de sesión", el resolvedor de vistas espera un directorio bajo jsps llamado "seguridad" y un archivo JSP bajo esto, que se llama "login.jsp" (sufijo = jsp)


HTTP 404 significa que el recurso no se encuentra.

  • Esto significa que el controlador o un recurso de acceso directo (como un archivo CSS) no se encuentra
  • NO significa que el JSP al que se hace referencia en el controlador no se encuentra (esto sería un error interno del servidor 500)

HTTP Status 404 - /SpringMVC/login.jsp

Parece que envía una solicitud HTTP /SpringMVC/login.jsp pero su método de controlador está enlazado a .html , por lo que debe cambiar su solicitud HTTP a /SpringMVC/login.html

Debido al nombre (inicio de sesión) puede que su configuración de Spring Security no sea correcta.


Sospecho que ModelAndView mv = new ModelAndView("/security/login"); es donde está el problema Asegúrese de tener una carpeta de ''seguridad'' de directorio en su directorio raíz y contiene un archivo login.jsp. O intente mover la carpeta de seguridad dentro de WebContent

Proporcione el parámetro de inicio contextConfigLocation de su DispatcherServlet

<servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springMVC-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>


Estoy usando Spring MVC con eclipse y un sistema MacOS X y encontré un error 404 cuando el controlador devolvió el nombre de jsp correcto. Más tarde descubrí que el archivo problemático jsp no tiene x (ejecución) en el sistema de archivos. Luego ''chmod + x some.jsp'' y el problema se resuelve.


Añadiré esto aquí, porque resolvió mi problema 404. Resultó que mi problema era el valor de url-mapping en web.xml . Uso de Spring WebMVC versión org.springframework:spring-webmvc:4.1.6.RELEASE

Estaba usando lo siguiente (que no funcionó):

<url-pattern>/rest</url-pattern>

Debería haber estado usando el siguiente valor (que funciona):

<url-pattern>/rest/*</url-pattern>

o

<url-pattern>/</url-pattern>

Referencia: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html


Agregando esto aquí por si acaso alguien más enfrenta el mismo problema. Mi aplicación estaba funcionando bien antes, luego actualicé la versión Spring y en el proceso también actualicé la versión Spring-Security. Cuando intenté acceder a mi página html de inicio de sesión me enfrentaba a este problema. Hice todos los cambios de configuración necesarios debido al cambio de la versión de seguridad de primavera de 3 a 4. Me referí a este enlace y fue muy útil.

Estaba enfrentando este problema debido a la siguiente configuración en mi archivo web-servlet.xml

<mvc:resources mapping="/app/*.html" location="/app/*.html" cache-period="0"/> <mvc:resources mapping="/app/**/*.html" location="/app/**/*.html" cache-period="0"/>

Funcionó después de que modifiqué ambos valores de ubicación a "/app/" . Parece que la versión más reciente de la primavera coincide con toda la cadena o comprueba si la ubicación solicitada comienza con el valor de ubicación configurado anteriormente.

Encontré el siguiente código en org.springframework.web.servlet.resource.PathResourceResolver:

if (locationPath.equals(resourcePath)) { return true; } locationPath = (locationPath.endsWith("/") || locationPath.isEmpty() ? locationPath : locationPath + "/"); if (!resourcePath.startsWith(locationPath)) { return false; }

La segunda condición si se estaba evaluando como falsa en mi caso y, por lo tanto, la respuesta HTTP 404

Otro consejo, si enfrenta este error, intente habilitar el nivel más alto de registro del marco de resorte. Podrías conocer el motivo del error a partir de ahí.


Esta respuesta puede estar desactualizada para la pregunta anterior, pero ayudará a otros que recién comiencen la primavera. También estaba luchando con 404 WEB-INF / welcome.jsp página no encontrada error.

Aquí el problema es con la importación de ModelAndView

Reemplazar

import org.springframework.web.servlet.ModelAndView;

Con

import org.springframework.web.portlet.ModelAndView;