2010-12-07 21 views
2

我收到了一個奇怪的問題,試圖將Spring MVC和Maven集成到Google AppEngine webapp中。在GAE上使用Spring3 MVC + Maven2沒有找到映射

這是我的web.xml

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

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

這是我用SpringMVC配置文件

<context:annotation-config /> 

<context:component-scan base-package="com.mypackage" /> 

<mvc:annotation-driven/> 

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/WEB-INF/jsp/view/" 
       p:suffix=".jsp" 
        p:viewClass="org.springframework.web.servlet.view.JstlView" /> 

這是我的控制器:

@Controller 
@RequestMapping(value = "/hello") 
public class HelloController { 
    @RequestMapping(method = RequestMethod.GET) 
    public String helloGet(ModelMap map) { 
      map.put("name", "seb!"); 
      return "hello"; 
    } 
} 

,這是位於web應用我的看法/WEB-INF/jsp/view/hello.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Hello Controller</title> 
    </head> 
    <body> 
     <h1>Hello ${name}!</h1> 
    </body> 
</html> 

,這是我的POM都包含依賴於3.0.3用SpringMVC,servlet的API 2.5,JSTL 1.2

我讓越來越

WARNING: No mapping found for HTTP request with URI [/WEB-INF/jsp/view/hello.jsp] in DispatcherServlet with name 'dispatcher' 

時,我打本地主機:8080 /您好,我無法弄清楚爲什麼。是由於GAE還是我在某些配置中遺漏了任何東西?

更新: 如果我派遣來從/應用/ *春調度,改變了我的web.xml這樣的網址:

<servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/app/*</url-pattern> 
    </servlet-mapping>` 

它會工作,但我只想用登陸頁面並使用應用程序的根目錄

回答

3

我以前遇到過這個問題。如果我記得正確,它在部署時運行正常,但在開發服務器上失敗。我的解決方案是將調度程序servlet映射到/app/*而不是/*

結果/app在您的應用程序的所有URL路徑中。如果你想擺脫這一點,使用URL重寫。

web.xml

<filter> 
    <filter-name>urlRewriteFilter</filter-name> 
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>urlRewriteFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

而且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/</to> 
    </rule> 
    <rule> 
     <from>/_ah/**</from> 
     <to>/_ah/$1</to> 
    </rule> 
    <rule> 
     <from>/**</from> 
     <to>/app/$1</to> 
    </rule> 
    <outbound-rule> 
     <from>/_ah/**</from> 
     <to>/_ah/$1</to> 
    </outbound-rule> 
    <outbound-rule> 
     <from>/app/**</from> 
     <to>/$1</to> 
    </outbound-rule> 
</urlrewrite> 
+0

urlrewrite可能不夠好,我會嘗試一下。謝謝 – sebarmeli 2010-12-07 21:29:11

相關問題