spring - sirve - No se encontró una asignación para la solicitud HTTP con URI... en DispatcherServlet con nombre
spring mvc español (23)
Esta pregunta ya tiene una respuesta aquí:
Ya revisé casi todos los artículos relevantes sobre stackoverflow, pero simplemente no puedo solucionar mi problema.
Aquí está el código: web.xml:
<display-name>Spring3MVC</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</context-param>
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.html</url-pattern>
<url-pattern>/</url-pattern>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
spring-servlet.xml:
<context:component-scan base-package="com.mycompany.elso" />
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
myController:
public class myController {
@RequestMapping("/hello")
public ModelAndView helloWorld() {
String message = "Hello World, Spring 3.0!";
return new ModelAndView("hello", "message", message);
}
}
Páginas web / index.jsp:
<html>
<head>
<title>Spring 3.0 MVC Series</title>
</head>
<body>
<a href="hello.html">Say Hello</a>
</body>
</html>
Páginas web / WEB-INF / jsp / hello.jsp:
<html>
<head>
<title>Spring 3.0 MVC Series: Hello World - ViralPatel.net</title>
</head>
<body>
${message}
</body>
</html>
Así que cuando inicio la aplicación, index.jsp se carga correctamente, pero cuando hago clic en href para navegar a hello.jsp, aparece un error 404 y el registro del servidor dice:
No mapping found for HTTP request with URI [/Elso/hello.html] in DispatcherServlet with name ''spring''
He revisado docenas de artículos como ese, pero simplemente no puedo encontrar el error, ¿alguien tiene alguna idea de lo que podría ser?
¿Qué es / Elso?
Intenta:
@RequestMapping("/Elso")
public class myController {
@RequestMapping("/hello")
public ModelAndView helloWorld() {
String message = "Hello World, Spring 3.0!";
return new ModelAndView("hello", "message", message);
}
}
Añadir
<mvc:default-servlet-handler/>
a spring-servlet.xml
Además de <mvc:annotation-driven/>
funcionó para mí. Agréguelo antes de la linea <context:component-scan ............/>
Agregue @Controller
a su controlador o donde quiera que tenga @RequestMapping
para su punto final JSON.
Esto funcionó para mí al implementar una aplicación similar.
Asegurarse
<mvc:annotation-driven/>
<context:component-scan base-package="com.hireartists.web.controllers"/>
señala el paquete apropiado que contiene controladores.
Compruebe ur Bean xmlns ..
También tuve un problema similar, pero lo resolví agregando mvc xmlns.
<?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:mvc="http://www.springframework.org/schema/mvc"
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.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<context:component-scan base-package="net.viralpatel.spring3.controller" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
Eliminar el servidor de Tomcat y agregar nueva configuración de tomcat en Eclipse resolvió el problema para mí.
En pom.xml, asegúrese de que el embalaje esté configurado en war
como <packaging>war</packaging>
, no en jar o en ninguna otra cosa.
No es encontrar los controladores, estos son problemas básicos. puede deberse a las siguientes razones.
R. dentro de la carpeta WEB-INF tiene el archivo web.xml que hace referencia a dispatcherServlet. Aquí este caso es mvc-config.xml
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
B. Este archivo mvc-config.xml tiene espacios de nombres y tiene que escanear los controladores.
<context:component-scan base-package="org.vimal.spring.controllers" />
<mvc:annotation-driven />
C. Verifique la exactitud del nombre del paquete donde tiene los controladores. Deberia de funcionar.
All Controllers must be Annotated with @Controller.
Podría tratar de agregar una anotación @Controller
sobre su clase myController y probar la siguiente url /<webappname>/my/hello.html
. Esto se debe a org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
prepends / my a cada RequestMapping en la clase myController.
Resolví mi problema con: Java Build Path -> JRE biblioteca del sistema -> Edit -> Alternate JRE -> -> Finish
Como estaba configurado para la carpeta JDK, por lo que estaba dando excepción
Si dependes de Spring Social , verifica que hayas configurado un bean controlador web:
import org.springframework.context.annotation.Bean;
import org.springframework.social.connect.web.ConnectController;
import org.springframework.social.connect.ConnectionFactoryLocator;
import org.springframework.social.connect.ConnectionRepository;
...
@Bean
public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) {
return new ConnectController(connectionFactoryLocator, connectionRepository);
}
Si desea servir archivos .html, debe agregar este <mvc:default-servlet-handler />
en su archivo de configuración de primavera. Los archivos .html son estáticos. Espero que esto pueda ayudar a alguien.
Si está utilizando Maven, agréguelos a su pom.xml
<dependency>
<groupid>javax.servlet</groupid>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
<dependency>
<groupid>taglibs</groupid>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<scope>runtime</scope>
Si está utilizando maven como herramienta de compilación para el proyecto, cree su proyecto correctamente, sus cambios en el código y los archivos xml no se reflejarán después de las compilaciones.
Si está utilizando un código Java basado en la configuración Spring MVC, habilite DefaultServletHandlerConfigurer
en el objeto WebMvcConfigurerAdapter
.
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
Si estás usando
<mvc:annotation-driven/>
asegúrese de que spring-servlet.xml tenga
<context:component-scan base-package="com.....controller" /> tag.
Básicamente, debe incluir todos los paquetes donde haya utilizado la anotación en su código java.
También me enfrenté al mismo problema, pero después de poner el espacio de nombres a continuación, funciona bien:
xmlns:mvc="http://www.springframework.org/schema/mvc"
Tenía exactamente el mismo error y me llevó mucho tiempo intentar entenderlo. Lo más probable es que se deba a errores de compilación, las clases de Java no se publicaron en su servlet. Verifique esto yendo al servidor que está utilizando / tmp1 / wtpwebapps [NOMBRE_PROYECTO] / WEB-INF / classes / e intente encontrar sus clases de controlador para ver si se han publicado o no. De lo contrario, debe llegar al final de los errores de compilación.
Tratar:
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
¡Trabajó para mi!
Tuve el mismo problema y después de investigar mucho, descubrí que las clases no se publicaban en mi carpeta de destino. Así que había ejecutado los siguientes dos comandos desde cmd
- mvn instalación limpia
- paquete mvn
Sorprendentemente, pude acceder a la página y el error desapareció. Lo mismo se puede verificar desde la carpeta de destino donde podrá encontrar las clases compiladas que faltaban antes.
Verifique su directorio [PROJECT_NAME]/target/classes
para ver si myController.class
se genera o no.
De lo contrario, compruebe todo el código fuente de Java si existen errores de compilación.
si está utilizando maven, ejecute maven install command antes de ejecutar su aplicación web en un servidor, ya que generará un archivo de clase para su controlador y en mi experiencia eso es lo que le ha faltado a su aplicación.