ようなあなたのweb.xmlに特定のURLをマッピングすることができます:あなたのフィルターで
<filter>
<display-name>SessionFilter</display-name>
<filter-name>SessionFilter</filter-name>
<filter-class>com.colabcom.goshare.app.base.filter.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
、
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String url = request.getServletPath();
boolean allowedRequest = Utility.filterURL(url, avoidUrls);
if(allowedRequest){
chain.doFilter(request, response);
}else{
//Main Filter Code
}
ユーティリティクラスは、あなたのURLをフィルタリングします
DefaultServletを拡張することができます拡張サーブレットがフロントコントローラになります。 doGETメソッドまたはdoPOSTメソッドで、静的ページをスーパークラスに転送します。 DefaultServletは、デフォルトでurl "/"にマップされるサーブレットです。私はjettyサーバーと一緒に使っていますが、Tomcatでも実装できます。私はプロセスにデフォルト・サーブレットへ/ /静的で始まるすべての要求を転送した上記のコードサンプルで
public class FrontController extends DefaultServlet {
@Override
public void init() throws UnavailableException {
super.init();
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String uri = request.getRequestURI();
/*
* if request is trying to access inside /static then use the default
* servlet. YOU CAN USE YOUR OWN BUSINESS LOGIC TO FORWARD REQUESTS
* TO DEFAULTSERVLET
*/
if (uri.startsWith("/static/")) {
super.doGet(request, response);
return;
} else {
// else use your custom action handlers
}
}
}
。このようにして、FrontControllerを「/」レベルにマップすることができます。
<servlet>
<description></description>
<display-name>FrontController</display-name>
<servlet-name>FrontController</servlet-name>
<servlet-class>FrontController</servlet-class>
<servlet-mapping>
<servlet-name>FrontController</servlet-name>
<url-pattern>/</url-pattern>
回答のおかげで、今、私はちょうどに/ページ/すべてのものを残しておきますのは、フィルターに到達するために私にしばらく時間がかかるだろうので、それは複雑に見えます – Mark
拡張機能のないリクエストをpath.match( "^。* \\/[^ \\。* * $")にマッチさせてフロントコントローラに転送することができます。 – Ring
@BalusC 'substring'のポイントは何ですか? – user2418306