如何使用Servlet篩選器來從如何在Java中使用servlet過濾器來更改傳入的servlet請求url?
http://nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123
改變傳入servlet請求的URL
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!
相關問題:http://stackoverflow.com/questions/2723829/how-to-catch-non-exist-requested-url-in-java-servlet – BalusC 2010-04-27 21:06:32
是否使用的是Servlet規範的版本?如何使用不同版本轉發請求更改。 – 2010-04-27 21:11:03
[看到這篇文章](http://stackoverflow.com/questions/2283237/most-useful-java-servlet-filter-out-there)它也有一個過濾器,做你想做的 – 2010-04-27 21:38:33