2009-10-02 13 views
6

Recibo este error.No se encontró una asignación para la solicitud HTTP con URI: en una aplicación Spring MVC

mi Web.xml tiene esta

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

<servlet-mapping> 
    <servlet-name>springweb</servlet-name> 
    <url-pattern>/app/*</url-pattern> 
</servlet-mapping> 

tengo unas pocas cosas en mi aplicación web-config.xml

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
</bean> 

<bean name="/Scheduling.htm" class="com.web.SchedulingController"/> 

mi com.web.SchedulingController se parece a esto

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package com.web; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.mvc.Controller; 


public class SchedulingController implements Controller{ 

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 

    ModelAndView modelAndView = new ModelAndView("/jsp/Scheduling_main.jsp"); 
    modelAndView.addObject("message","Hello World MVC!!"); 
    return modelAndView; 
} 
} 

Cuando presiono este controlador con la URL http://localhost:8080/project1/app/Scheduling.htm Se muestra Scheduling_main.jsp pero las imágenes no se muestran correctamente. Además, el archivo js y css no se está procesando.

estoy acceder a las imágenes como ésta

<img src="jquerylib/images/save_32x32.png" title="Save Appointment"> 

Si cambio de la correlación de URL en la definición de servlet * .htm, las imágenes a ser visualizado bien. ¿Puedes señalar dónde me estoy perdiendo?

Aquí es el mensaje de error completo

WARN [PageNotFound] No mapping found for HTTP request with URI [/mavenproject1/app/jquerylib/images/save_32x32.png] in DispatcherServlet with name 'springweb' 

muchas gracias. Ravi

+0

Aquí es completa Mensaje de error: WARN [pagenotfound] No hay resultados para la solicitud HTTP con URI [/mavenproject1/app/jquerylib/images/save_32x32.png] en DispatcherServlet con el nombre '' Spring Web – Ravi

Respuesta

7

me parece que se debe a que intenta obtener su imagen sin embargo servlet (asignada a/app/*) Es necesario obtener el contenido estático sin manejarlo con el servlet, por ejemplo, configurar la fuente de imagen para

<img src="../jquerylib/images/save_32x32.png" title="Save Appointment">

entonces el URI real de su imagen será /mavenproject1/jquerylib/images/save_32x32.png, y su propio tomcat lo devolverá como está, sin ningún procesamiento.

+0

Muchas gracias mapeo, funcionó. Solo tengo que aprender más sobre las asignaciones de URL. – Ravi

+0

me salvó el día. ¿Te importaría explicar un poco más? cuando prefijo la ruta del archivo con '../' ¿se convierte indirectamente en una ruta de acceso absoluta? y para que el controlador no sea invocado? – kalyan

+0

@kalyan No, ".." no significa ser ruta absoluta, ".." significa ir al directorio superior. Entonces, ¿qué ocurre en realidad: cuando configura image src en ../jquerylib/images/save_32x32.png su ruta completa será /mavenproject1/app/../jquerylib/images/save_32x32.png y se transformará en/mavenproject1/jquerylib /images/save_32x32.png por tu navegador. Pero su servidor solo maneja/mavenproject1/app/* urls, por lo que /mavenproject1/jquerylib/images/save_32x32.png será handlet por el propio tomcat y se devolverá como está, como contenido estático habitual. Perdón por mi inglés malo –

2

Acabo de añadir tres reglas antes regla por defecto del resorte (/ **) para urlrewritefilter de Tuckey (urlrewrite.xml) para resolver el problema

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd"> 
    <urlrewrite default-match-type="wildcard"> 
     <rule> 
      <from>/</from> 
      <to>/app/welcome</to> 
     </rule> 
     <rule> 
      <from>/scripts/**</from> 
      <to>/scripts/$1</to> 
     </rule> 
     <rule> 
      <from>/styles/**</from> 
      <to>/styles/$1</to> 
     </rule> 
     <rule> 
      <from>/images/**</from> 
      <to>/images/$1</to> 
     </rule> 
     <rule> 
      <from>/**</from> 
      <to>/app/$1</to> 
     </rule> 
     <outbound-rule> 
      <from>/app/**</from> 
      <to>/$1</to> 
     </outbound-rule>  
    </urlrewrite> 

How to handle static content in Spring MVC?

2

Añadir a esta el Spring-servlet.xml

<mvc:default-servlet-handler/>

continuación texto se extrae de Spring reference

Esta etiqueta permite el mapeo de la DispatcherServlet a "/" (anulando por lo tanto el mapeo de Servlet predeterminada del contenedor), mientras aún permite que las solicitudes de recursos estáticos sean manejadas por el Servlet predeterminado del contenedor. Configura un DefaultServletHttpRequestHandler con una asignación de URL (dada una orden de prioridad más baja) de "/ **". Este controlador reenviará todas las solicitudes al Servlet predeterminado.

Cuestiones relacionadas