您好我正在升级网站,从Notes迁移到Java JSP,需要支持从旧网址到新网址的重定向。所以/site/oldpage.nsf?home需要重定向到/site/newpage.jsp。
在Tomcat中我设置了一个错误页面来重定向: 404 /avi_redirect.jsp
在avi_redirect.jsp中我有:
pageContext.forward( "/newpage.jsp" );
但是因为我需要在许多页面上执行此操作,所以我需要知道旧的页面名称,即/site/oldpage.nsf?home。
知道我怎么能得到这个吗?响应&标题没有它。查询字符串有params而不是url。
答案 0 :(得分:2)
而是使用过滤器,而不是JSP(否则你可能会冒IllegalStateException
的风险)。另外,使用重定向而不是转发(否则旧网址将保留在地址栏中)。另外,使用301重定向而不是(默认)302(否则旧网址仍会被搜索机构索引)。
因此,您需要创建一个Filter
来监听旧版url-pattern
的{{1}}并实现它,基本如下:
*.nsf
您看到我已经重新构建了URL以包含查询字符串(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);
}
之后的部分)。
理想情况下,如果新JSP文件的结构和命名方式与原始方式完全相同,但只能使用不同的扩展名。这样您就不需要映射,但只需在URL上替换字符串即可:
?
答案 1 :(得分:1)
您应该考虑在DD,web.xml中执行此操作。并编写一个过滤器,将请求重定向到适当的页面。
答案 2 :(得分:0)
您需要维护旧页面网址到新网页网址的映射。您可以将此映射保留在属性文件,xml或数据库中,avi_redirect.jsp会查找此映射并重定向到新页面。
您需要采取的其他事项是关于url参数,如果它们相同或不相同。如果它们也不相同,那么你也需要为它们进行映射。