2017-09-25 7 views
0

モジュール化のための角度経路を含むUIのAngularjsを使用してアプリケーションを作成しようとしています。次に、Spring MVCを呼び出してDAOを呼び出して基本的なCRUD。問題は、両方同時に働くようになっています。これまでのところ私がしていることは、どちらか一方が404になる原因となります。Angularjsを使用したSpring MVC、角度経路ページの適切な処理

私は間違っているかもしれませんが、問題はweb.xml、特にurl-patternに根ざしていると思います。例えば、場合、私はそうのようなマッピングを設定:

<servlet-mapping> 
    <servlet-name>MyApp</servlet-name> 
    <url-pattern>/obviousJunk</url-pattern> 
</servlet-mapping> 

は、次にアプリケーションを実行するには、私は私のhtmlページをプレビューし、すべての私の <div> sおよび <table> sおよび <img> sがすべてきれいに見えるかを確認することができます。これらのページには、形式が http://localhost:8080/MyApp/#!/homeまたは http://localhost:8080/MyApp/#!/categoryList などのURLがあります。つまり、すべてが角経路「#!」を持ちます。パターン。

この<url-pattern>では、もちろん私のサーブレットを呼び出すことはできません。私は上記を変更する場合は、:

<servlet-mapping> 
    <servlet-name>MyApp</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

そしてその後、私は正常にこの方法で実行することができ、http://localhost:8080/MyApp/services/category/listを打つ:「!#」で

@RequestMapping(value="/services/category/list", method=RequestMethod.GET) 
public @ResponseBody String listCategory() { 
    return "Hello, World"; 
    // TODO: modify this method to make a DAO call and return a list of categories 
} 

しかし、私のすべてのページを404に突然行く。コントローラメソッドがないので、それらを提供することができない。

私は

(上記のように)私は、「/サービス/」を持つすべてのサービスコールのURLを前置き場合、私はように(とと*なし)私のweb.xmlを変更することができるかもしれないと思いました
<servlet-mapping> 
    <servlet-name>MyApp</servlet-name> 
    <url-pattern>/services/*</url-pattern> 
</servlet-mapping> 

同様に、@RequestMappingアノテーションを変更して、 "/ services"部分をインクルードして削除しました。いいえ - ページをもう一度見ることができますが、サービスは404を呼び出します。コントローラーメソッドは呼び出されません。また、サービスメソッド呼び出しの最後に ".do"を追加し、上記を作成する例をいくつか挙げました<url-pattern>*.do</url-pattern>。 @RequestMapping値の最後に ".do"を追加した場合でも、これも失敗します。http://localhost:8080/MyApp/services/category/list.doは404を返し、 コントローラメソッドは呼び出されません。

具体的なものを<url-pattern>から除外することについてもう1つ質問しました。それは答えがすべて であると言うことはできません。私はまた、@RequestMapping(value="/#!/**")で簡単に何もしない方法を試みましたが、決して呼び出されませんでした(私はうまくいきませんでしたが、試してみる価値がありました)。

どうすれば解決できますか?

+0

答えはここにあります:http://forum.spring.io/forum/spring-projects/web/112412-spring-3-1-enablewebmvc-setting-alwaysusefullpath-property、この質問とその回答を介して到着しました:https://stackoverflow.com/q/11692837/241291気をつけて複製してください。 – cobaltduck

答えて

0

http://localhost:8080/MyApp/#!/homeは、ルート(http://localhost:8080/MyApp/)でサーバーに要求します。 #Urlの後はリクエストの一部にはなりません。

+0

。 rootへのリクエストをどうやって処理できますか? – cobaltduck

+0

Index.htmlまたはランディングページは、http:// localhost:8080/MyApp/urlから配信されます。 http:// localhost:8080 /のように見えます。 – ManishSingh

関連する問題