2013-10-24 86 views
1

我創建了一個Spring-MVC項目。Spring MVC應用程序 - URL給出找不到文件(404)

的web.xml

<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/soundmails</url-pattern> 
</servlet-mapping> 

MVC-調度-servlet.xml中

<?xml version="1.0"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

<mvc:annotation-driven /> 
<context:component-scan base-package="somepkg.controllers" /> 

<bean id="multipartResolver" class="org.gmr.web.multipart.GMultipartResolver"> 
    <property name="maxUploadSize" value="1048576" /> 
</bean> 

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <!-- property name="location"> 
     <value>/WEB-INF/social.properties</value> 
    </property--> 
</bean> 
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jacksonMessageConverter"/> 
     </list> 
    </property> 
</bean> 
</beans> 

該控制器具有這樣的代碼: ProjectController.java

@Controller 
@RequestMapping("/soundmails") 
public class FileUploadController { 
    @RequestMapping(value="/test", method=RequestMethod.GET) 
    public @ResponseBody String test() { 
     System.out.println("Hai"); 
     return "Hai"; 
    } 
} 

我在本地機器上使用Google App Engine來測試此操作。我在我的日誌讓這些:

[信息] 2013年10月24日上午01時54分18秒com.google.appengine.tools.development.LocalResourceFileServlet的doGet [INFO]警告:沒有文件發現:/soundmails/test

我試過/ soundmails/soundmails/test。這也給了同樣的錯誤。

我使用Spring 3.1.0.RELEASE

有人可以幫我找出我錯過了什麼 -/soundmails /測試是給404錯誤。

編輯

我無法爲此啓用DEBUG日誌。出於某種原因,它沒有采取在logging.properties

配置日誌級別,但我觀察到一些有趣的事情:

1)如果我請求映射到空字符串(value = ""

@RequestMapping(value="", method=RequestMethod.GET) 
public @ResponseBody String test() { 
    System.out.println("Hai"); 
    return "Hai"; 
} 

然後,當我嘗試訪問127.0.0.1/soundmails,它工作正常(返回字符串「海」)。

2)當我有value="/test"

@RequestMapping(value="/test", method=RequestMethod.GET) 
public @ResponseBody String test() { 
    System.out.println("Hai"); 
    return "Hai"; 
} 

,我嘗試訪問127.0.0.1/soundmails/test,它給HTTP 404這很奇怪。

+0

你的DEBUG日誌告訴你什麼? – MattSenter

+0

不幸的是,我無法啓用調試級別日誌記錄。這是一個單獨的問題,我正在弄清楚。我對這個問題做了一些編輯,並在這個特定問題上進行了更多的調查。 – user1700184

+0

好的,下一個問題:部署的應用程序的上下文路徑是什麼?什麼是你用來訪問該網頁的完整url。 (如果您願意,您可以僞造域名。) – MattSenter

回答

0

我可能會誤解你的設置,但它看起來像「測試」實際上是在url/soundmails/sounmails /測試,而不僅僅是/ sountmails /測試。由於Web xml中的servlet名稱和控制器註釋,我認爲這是如何工作的。但是,我可能記得Spring的設置錯了 - 如果是的話,讓我知道,我會再看一次。

+0

這就是我在開始工作之前所想的。但是,當我在方法級別的RequestMapping註釋中使用空字符串進行測試時:@RequestMapping(value =「」,method = RequestMethod.GET)'(請參閱我的編輯問題),它似乎只適用於/ soundmails不與/ soundmails/soundmails。我正在使用Spring 3.1.0.RELEASE – user1700184

相關問題