2011-04-22 30 views
1

我創建了一個過濾器,它對我的​​應用程序獲取的所有請求都正常工作,爲此,我編寫了新的類ResourceRequestWrapper,它擴展了HttpServletRequestWrapper以修改請求。爲圖像請求重寫創建Java過濾器

例如,當請求來自於/ui/tx/images/abc.png我已重寫的HttpServletRequestWrappergetServletPath()getRequestURL()getRequestURI()方法修改進入請求的文本到/txeditor/images/abc.png

現在,我已經通過修飾server.xml和添加以下創建的虛擬目錄中的JBoss/Tomcat的,

<Context path="/txeditor" docBase="C:\resources\web_resources\txeditor.war" unpackWAR="false">    
</Context> 

我還在C:\resources\web_resources\txeditor.war定義WEB-INF和創建部署描述如下,

<?xml version="1.0"?> 

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
    <description>Web descriptor for the html adaptor</description> 
</web-app> 

上面的一切正常,每個請求都會被修改,但是當我的頁面被打開時,我無法看到任何圖像,我想當我們修改來自過濾器的請求以訪問虛擬目錄defi在server.xml需要,它不可能?

任何人都可以有其他的想法嗎?

回答

2

這確實不行。您想改爲重定向請求。

String oldUrl = request.getRequestURI(); 
String newUrl = oldUrl.replaceFirst("/ui/tx/", "/txteditor/"); 
response.sendRedirect(newUrl); 

如果你想永久(301)重定向,而不是做下面的最後一行:

response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
response.setHeader("Location", newUrl);