2009-10-02 78 views
6

我收到此錯誤。未找到具有URI的HTTP請求的映射:在Spring MVC應用程序中

的web.xml有這個

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

我有這個在我的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"/> 

我com.web.SchedulingController看起來像這樣

/* 
* 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; 
} 
} 

當我點擊這個控制器的網址http://localhost:8080/project1/app/Scheduling.htm Scheduling_main.jsp會顯示,但圖像顯示不正確。此外,js和css文件沒有被渲染。

我訪問相似圖片

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

如果我更改了servlet定義的URL映射到的* .htm,圖像顯示得到罰款。你能指出我錯過了什麼地方嗎?

下面是完整的錯誤消息

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

非常感謝。 拉維

+0

這裏是完整的錯誤消息: WARN [PageNotFound]發現用於與URI [/mavenproject1/app/jquerylib/images/save_32x32.png]在DispatcherServlet的名爲 'springweb' – Ravi 2009-10-02 17:11:41

回答

7

我想這是因爲你試圖讓你的形象,雖然servlet的(映射爲/應用/ *)您需要得到不與你的servlet處理它的靜態內容,例如設置圖像源

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

然後你的圖像的真實URI將是/mavenproject1/jquerylib/images/save_32x32.png,並且它將由你的tomcat本身返回而不需要任何處理。

+0

非常感謝HTTP請求沒有映射,有效。只需瞭解更多關於URL映射的信息。 – Ravi 2009-10-02 18:03:17

+0

救了我一天。你介意多解釋一下。當我用'../'作爲文件路徑的前綴時,它是否間接變成absoultepath?並使處理程序不被調用? – kalyan 2011-03-10 14:35:19

+0

@kalyan不,「..」不是指絕對路徑,「..」是指轉到上級目錄。那麼究竟發生了什麼:當您將image src設置爲../jquerylib/images/save_32x32.png時,您的完整路徑將爲/mavenproject1/app/../jquerylib/images/save_32x32.png,並將轉換爲/ mavenproject1/jquerylib /images/save_32x32.png通過您的瀏覽器。但是你的servet只處理/ mavenproject1/app/* url,所以/mavenproject1/jquerylib/images/save_32x32.png將作爲tomcat本身的handlet,並像往常一樣靜態返回原樣。對不起,我的英文不好 – 2011-03-10 15:07:05

2

我只加春默認規則(/ **)前三個規則來tuckey的urlrewritefilter(urlrewrite.xml)來解決問題

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

此加入springweb-servlet.xml中

<mvc:default-servlet-handler/>

下面文本從Spring reference

此標籤允許用於映射的DispatcherServlet提取到 「/」(從而覆蓋容器的默認的Servlet的映射),而仍然允許靜態資源請求由容器的默認Servlet處理。它使用URL映射(給定最低優先順序)「/ **」來配置DefaultServletHttpRequestHandler。該處理程序將把所有請求轉發給默認的Servlet。

相關問題