从丢失页面重定向到新页面
您好我正在升级站点,从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。
而不是使用过滤器,而不是JSP(否则您可能会冒险IllegalStateException
s)。而是使用重定向而不是转发(否则旧URL将保留在地址栏中)。而是使用301重定向而不是(默认)302(否则,旧网址仍将被searchbots编入索引)。
所以,你需要创建一个Filter
其监听的旧拓*.nsf
的url-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");
您需要维护旧页面url到新页面url的映射。您可以在属性文件,xml或数据库中保留此映射,并且avi_redirect.jsp查找此映射并重定向到新页面。
你需要采取的其他事情是关于url参数,如果他们是否相同。如果它们也不相同,那么你也需要为它们进行映射。
只有当我知道哪个页面丢失时,映射才有效。这是我找不到的。 – Craig 2010-02-10 10:57:46
您应该考虑在您的DD,web.xml中执行此操作。并写一个过滤器,将请求重定向到适当的页面。
啊,过滤器映射?现在就发现它的信息 – Craig 2010-02-10 11:05:42
正确,辉煌。让我们知道您是否需要进一步解释。 – 2010-02-10 11:24:51
太棒了,谢谢。它看起来像要走的路。由于托管服务器是Tomcat 4,因此我需要解决Tomcat的一个问题,它看起来像eclipse只支持5(或5.5)的Web.xml更改。但它看起来像我想要去的方式。 – Craig 2010-02-10 17:45:12