サーブレットフィルタを使用して受信URLを変更するにはどうすればいいですか?
http://nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123
に
http://nm-java.appspot.com/Check_License?Contact_Id=My_Obj_123
?
アップデート: 以下の BalusC の手順に従って、次のコードを作成しました。
public class UrlRewriteFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
//
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String requestURI = request.getRequestURI();
if (requestURI.startsWith("/Check_License/Dir_My_App/")) {
String toReplace = requestURI.substring(requestURI.indexOf("/Dir_My_App"), requestURI.lastIndexOf("/") + 1);
String newURI = requestURI.replace(toReplace, "?Contact_Id=");
req.getRequestDispatcher(newURI).forward(req, res);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
//
}
}
関連するエントリはweb.xml
次のようになります。
<filter>
<filter-name>urlRewriteFilter</filter-name>
<filter-class>com.example.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>urlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
サーバー側とクライアント側の両方のリダイレクトを試しましたが、期待どおりの結果になりました。うまくいきました。BalusC さん、ありがとうございます!
ベストアンサー1
- 伸ばす
jakarta.servlet.http.HttpFilter
。 - で
doFilter()
方法、使用HttpServletRequest#getRequestURI()
道を掴むために。 - 率直に
java.lang.String
次のような方法substring()
、split()
、concat()
関心のある部分を抽出し、新しいパスを構成します。 - どちらかを使用する
ServletRequest#getRequestDispatcher()
その後RequestDispatcher#forward()
リクエスト/レスポンスを新しいURLに転送する(サーバー側リダイレクト、ブラウザのアドレスバーには反映されない)、または使用HttpServletResponse#sendRedirect()
応答を新しい URL にリダイレクトします (クライアント側のリダイレクト、ブラウザのアドレス バーに反映されます)。 - フィルターを登録するには、
@WebFilter
コンテキスト パスに応じて、url-pattern
または の/*
注釈。/Check_License/*
URLがニーズ変更される場合ない、電話するだけFilterChain#doFilter()
そうしないと、無限ループで自分自身を呼び出します。
あるいは、既存のサードパーティAPIを使用してすべての作業を行うこともできます。たとえば、タッキーの UrlRewriteFilterこれは、Apache の場合と同じように設定できますmod_rewrite
。