2013-04-16 29 views
5

これは確かにnoobの質問ですが、私は答えのためにstackoverflowをトラッキングするのに良い時間を費やしていますが、誰も私の場合はそうではないようですgo ...Spring MVCでRESTとJSPを混ぜるとJSPが見つかりません

私はSpring MVCを使用する新しいwebappを持っています。ほとんどのアプリケーション(99%)は純粋なRESTなので、「表示」はありませんが、単にJSONをワイヤに戻して送信するか、エラーなどの代替HTTPステータスを送信します。

例外実際のJSPである必要があるログインページですが、RESTコントローラをマップするために使用している設定は、通常のJSPマッピングが失敗する状態になってしまいます。ここで

は、私が持っているものです:

私のディスパッチャサーブレットの設定では、関連する部分である:それは働いて得るために私の試みにおいて

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/pages/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

、私はまた、 "へのマッピングを追加しました現在、私のログインJSPにリダイレクトにHomeController」:web.xmlに、

<bean name="/" class="com.somepackage.HomeController"/> 

今は私が持っている:

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

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

<listener> 
    <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring-dispatcher-servlet.xml 
    </param-value> 
</context-param> 

これは次のようになり、私のRESTfulなコントローラ、ため正常に動作します:

@Controller 
@RequestMapping(value = "/api/user") 
public class BlahBlahController {... 

ただ、このようになります私の "にHomeController"、:私は "を打ったとき

@Controller 
@RequestMapping(value = "/") 
public class HomeController extends AbstractController { 
    @Override 
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { 
     return new ModelAndView("login"); 
    } 
} 

がトリガされます/」というURLが表示されますが、ログにこのエラーが表示されます。

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

ここでは、 /WEB-INF/pages/login.jspの解決方法はわかりませんが(このページはbtwです)、これを動作させるにはどうすればいいか分かりません。

どのように動作するのか少し混乱します。誰でも手がかりを手に入れましたか?

ありがとうございました。

+0

は、私はそれが重要かどうかわからないんだけど、なぜあなたは二度ビューリゾルバを定義していますか?また、あなたの 'HomeController'には' @Controller'の代わりに '@Component'が付いています。 – NilsH

+0

ああ..笑..ええ、重複は間違いです...あなたが言ったように問題ではありません。 @ Component/@ Controllerの区別はよく分かります。私は今よりも変更して、やり直してみます。 HTTPでマッピングが見つかりませんでした。(この問題を解決するために編集しました) –

+0

マッピングと私は以前と同じエラーが発生します: URI [/WEB-INF/pages/login.jsp]のHTTP要求のマッピングが見つかりませんでした... 私はそのxml設定を持っているのが嫌いです。私はすべてが注釈駆動されることを望むでしょうが、関係なくそれはまだ私のために働いていません –

答えて

6

OK ..答えを見つけました。ディスパッチャの設定では、url-patternです。

の代わりに:それは私が実際に他の場所でこの答えを発見し、それを試してみましたが、それは働いていなかった「と思っていた」

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

でなければなりません

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

は、その後、私は思った理由を実現しましたこれは根本的な原因とは無関係でした。

なぜこれがうまくいくと、他のではないでしょうノーアイデアが..しかし、一度に一つの問題...

-1

メソッドレベルでRequestMappingを入れてみましたが、私のコードで試してみました。あなただけのすべてのログインビューをリダイレクトしたい場合は、コードの下に使用することができます

@Override 
@RequestMapping(value = "/") 
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { 
    return new ModelAndView("login"); 
} 

:「コンポーネント・スキャン・コンテキスト」あなたは@Controllerを使用して、適切なを持っている場合にHomeController Beanを定義する必要はありません"/"アクセス。

<mvc:view-controller path="/" view-name="login"/> 

参考文献としてmvc show caseプロジェクトのgithubからチェックアウトしてください。

+0

前のコメントで触れたように、問題はコントローラが見つからないということではなく、起動しているということです。問題は、それが転送するJSPが見つからないということです。 DispatcherServletのURI [/WEB-INF/pages/login.jsp]を持つHTTPリクエストのマッピングが見つかりません –

+0

私が逃したurl-patternを正しく修正しました。あなたはコントローラを書く必要はありませんを追加するだけで、春の使いやすさを鑑賞することができます – apurvc

+0

チップをありがとう。ポストのコントローラーはほんの一例でした。そこに行くより多くのコードがありますが、私は、問題が発生している正確な条件を示すことが重要かもしれないと思った。私はview-controller要素を他の場所で使用していますが、実際には非常に便利だと私は同意します。 –

関連する問題