2012-01-12 15 views
0

現在、私たちのサイトのすべてのリンクは/xxx/UseCaseとして設定されています。同じサーブレットを持つ2つのURIをサポート

/yyy/xxx/UseCaseのような接頭辞/yyyを持つ着信要求を受け入れるようになりました。したがって、/yyy/xxx/UseCase/xxx/UseCaseの両方でリクエストを受け入れるサーブレットが1つあります。

どうすればこのことができますか?

多くのページが絶対パスを使用して他のURIにリダイレクトされます。つまり、Patientsサーブレットは/xxx/Insuranceにリダイレクトされます。

<servlet-mapping> 
    <servlet-name>fooServlet</servlet-name> 
    <url-pattern>/xxx/*</url-pattern> 
    <url-pattern>/yyy/*</url-pattern> 
</servlet-mapping> 

または:あなたはあなただけつ以上のURLパターンにサーブレットをマッピングすることができます/yyy/xxx/Insurance

+0

'yyy'はコンテキストパスですか? – adarshr

答えて

4

にリダイレクトされるはずです - あなたは今/xxx/Insuranceにリダイレクトべきではありません/yyy/xxx/Patientsにいる場合は問題がありますあなたは、サーブレット3.0にすでにしている:

@WebServlet(urlPatterns={"/xxx/*", "/yyy/*"}) 
public class FooServlet extends HttpServlet { 
    // ... 
} 

することができます必要な使用/yyy/xxx/*の代わり/yyy/*場合。

サーブレットマッピングを解除する場合は、/yyy/xxx/*/xxx/*に要求を転送するFilterを作成することもできます。このような何か(基本的なチェックは省略):あなたは/xxx/*/yyy/xxx/*から、ブラウザのアドレスバーにURLを変更する場合は

@WebFilter("/yyy/xxx/*") 
public class FooFilter implements Filter { 

    // ... 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
     HttpServletRequest req = (HttpServletRequest) request; 
     String oldURI = req.getRequestURI().substring(req.getContextPath().length() + 1); 
     String newURI = oldURI.substring(oldURI.indexOf("/")); 
     req.getRequestDispatcher(newURI).forward(request, response); 
    } 

    // ... 
} 

は、あなたはRequestDispatcher#forward()の代わりにHttpServletResponse#sendRedirect()を使用する必要があります。

  // ... 
     HttpServletResponse res = (HttpServletResponse) response; 
     res.sendRedirect(newURI); 
+0

+1サーブレット3.0の例 – adarshr

+0

ありがとう。問題は、質問に記載されているようにリダイレクトに関連しています。 –

+0

私は具体的な問題が何であるか、そしてそれがどのように問題(またはあなたがそれを「挑戦」と呼んでいるか)がどの程度正確かは分かりません。一般に、要求/応答を変更するために「フィルタ」が使用される。 TuckeyのURLRewriteFilterのような第三者のものも存在します。これはよく知られているHTTPDの 'mod_rewrite'によく似ています:http://code.google.com/p/urlrewritefilter/これはマップの方法に関する最初の質問とは全く関係ありません複数のURLパターンを持つ単一のサーブレット – BalusC

1

問題はサーブレットのマッピングではないと思います。私はリダイレクトをどのようにしているのかと思います。あなたのリダイレクトロジックにこれを試してみてください...

response.sendRedirect(request.getRequestURI().replace("Patients", "Insurance")); 

このように、両方の状況で動作するはずのif文を使用する必要はありません。

+0

リンクを生成する方法を変更するには、かなりのコード/ HTMLを変更する必要がありますが、これは良い提案です。少ない労力で解決できるソリューションを望んでいました。 –

+0

ちょっと混乱しているのは、これが単なるサーバー側のリダイレクトであれば、htmlがサーバー側でリダイレクトされてしまっているかどうかわからないからです。どのようにあなたのリンクを生成していますか? – Dave

+0

さまざまな方法:JSPまたはJavaコードでハードコードされています。 –

関連する問題