2009-10-02 74 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。

相关问题