2010-02-10 76 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