而不是使用过滤器,而不是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");
太棒了,谢谢。它看起来像要走的路。由于托管服务器是Tomcat 4,因此我需要解决Tomcat的一个问题,它看起来像eclipse只支持5(或5.5)的Web.xml更改。但它看起来像我想要去的方式。 – Craig 2010-02-10 17:45:12