2010-12-07 12 views
2

Google AppEngine WebアプリケーションにSpring MVCとMavenを統合しようとすると奇妙な問題が発生しています。GA3でSpring3 MVC + Maven2を使用してマッピングが見つかりません

これは、これは私のコントローラであり、これは私のSpringMVCの設定ファイルである

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

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

私のweb.xmlです:

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

と、これは私のポンポンがJSTL 1.2

、SpringMVC 3.0.3、サーブレットAPI 2.5への依存関係が含まれている私は、ローカルホストを打ったとき

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

を取得して維持しています:8080 /ハローとなぜ私は理解できません。それはGAEに起因するのですか、あるいは何らかの設定で何かが欠けていますか?

更新: 私はこのように私のweb.xmlを変更し、春Dispatcherに/アプリ/ *からのURLを派遣する場合:

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

それはうまくいくが、私はちょうど使用したいですランディングページを開いてアプリのルートを使用する

答えて

3

私は過去にこの問題に直面しました。正しくリコールすれば、デプロイ時には正常に動作しましたが、開発サーバーでは失敗しました。私の解決策は、/*ではなく、ディスパッチャーサーブレットを/app/*にマッピングすることでした。

結果は、アプリケーション内のすべてのURLパスで/appとなります。これを取り除きたい場合は、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

+0

それはurlrewriteで動作します:) – sebarmeli

関連する問題