2011-12-15 16 views
2

私は2つのサーブレット(MainServletとLoginServlet)を持っており、MainServletはすべてのリクエストを処理し、それは/*にマップされています。 LoginServletプロセス要求であり、/ loginにマップされます。私は1つのhtmlファイル/html/login.htmlを持っています。今私はhttp://localhost:8080/app/loginを押すと、このhtmlファイルを表示したいと思います。サーブレットのURLマッピング

LoginServlet doGet方法で、私は

httpServletRequest.getRequestDispatcher("login/login.html").include(httpServletRequest, httpServletResponse);が、MainServletに、このリダイレクト要求をしています。 MainSerlvetのURLマッピングを/*から別のものに変更することはできません。

どのように私は上記の達成することができますか? PS:質問が明確でない場合は教えてください。

+0

あなたのhtmlファイルは "/html/login.html"にありますが、 "login/login.html"のリクエストディスパッチャを取得しているようです。これはあなたの質問のタイプミスですか?それ以外の場合、これは問題の少なくとも一部を表している可能性があります。 – shelley

答えて

1

MainServletをグローバルURLパターン/*にマッピングしました。これはサーブレット(CSS/JS/images/etcなどの静的リソースもカバーしています)にはあまり慣れていません。これは、転送されたすべてのリクエストにも傍受されます。より具体的なURLパターン(例:URL)にMainServletをマッピングする必要があります。 /main/*/app/*などを入力し、Filterを作成し、/*にマッピングし、MainServletにすべての非/loginリクエストを転送します。

String uri = ((HttpServletRequest) request).getRequestURI(); 

if (uri.startsWith("/login/")) { 
    // Just continue to login servlet. 
    chain.doFilter(request, response); 
} else { 
    // Forward to main servlet. 
    request.getRequestDispatcher("/main" + uri).forward(request, response); 
} 

ところで、RequestDispatcher#include()を使用してビューを表示することは、まったく正しいわけではありません。代わりにRequestDispatcher#forward()を使用してください。

関連する問題