2010-02-10 79 views
2

您好我正在升級站點,從Notes轉移到Java JSP並需要支持從舊URL重定向到新的。所以/site/oldpage.nsf?home需要重定向到/site/newpage.jsp。從丟失頁面重定向到新頁面

在Tomcat中我已經設置了一個錯誤頁面重定向: /avi_redirect.jsp

在avi_redirect.jsp我:

pageContext.forward( "/newpage.jsp"); 

但正如我需要要做很多頁面我需要知道舊的頁面名稱,即/site/oldpage.nsf?home。
任何想法如何我可以得到這個?迴應&標題沒有它。查詢字符串有參數,但沒有url。

回答

2

而不是使用過濾器,而不是JSP(否則您可能會冒險IllegalStateException s)。而是使用重定向而不是轉發(否則舊URL將保留在地址欄中)。而是使用301重定向而不是(默認)302(否則,舊網址仍將被searchbots編入索引)。

所以,你需要創建一個Filter其監聽的舊拓*.nsfurl-pattern並實現它基本上像如下:

private static final Map<String, String> urlMapping = new HashMap<String, String>(); 

static { 
    urlMapping.put("/site/oldpage.nsf?home", "/site/newpage.jsp"); 
    // Put more here. 
} 

public doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException) { 
    HttpServletRequest httpReq = (HttpServletRequest) request; 
    String oldUrl = httpReq.getRequestURL().append("?").append(httpReq.getQueryString()).toString(); 
    String newUrl = urlMapping.get(oldUrl); 
    response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
    response.setHeader("Location", newUrl); 
} 

你看,我已經重建的URL包括查詢字符串(在?之後的部分)。

理想情況下,如果新JSP文件的結構和命名方式與原來的完全相同,但僅限於不同的擴展名。這樣你就不需要映射,但只需要在URL上替換一個字符串就足夠了:

String newUrl = oldUrl.replace(".nsf", ".jsp"); 
+0

太棒了,謝謝。它看起來像要走的路。由於託管服務器是Tomcat 4,因此我需要解決Tomcat的一個問題,它看起來像eclipse只支持5(或5.5)的Web.xml更改。但它看起來像我想要去的方式。 – Craig 2010-02-10 17:45:12

0

您需要維護舊頁面url到新頁面url的映射。您可以在屬性文件,xml或數據庫中保留此映射,並且avi_redirect.jsp查找此映射並重定向到新頁面。

你需要採取的其他事情是關於url參數,如果他們是否相同。如果它們也不相同,那麼你也需要爲它們進行映射。

+0

只有當我知道哪個頁面丟失時,映射纔有效。這是我找不到的。 – Craig 2010-02-10 10:57:46

1

您應該考慮在您的DD,web.xml中執行此操作。並寫一個過濾器,將請求重定向到適當的頁面。

+0

啊,過濾器映射?現在就發現它的信息 – Craig 2010-02-10 11:05:42

+0

正確,輝煌。讓我們知道您是否需要進一步解釋。 – 2010-02-10 11:24:51