Для этого лучше использовать Фильтр, а не JSP (иначе вы можете рискнуть IllegalStateException
с). Также лучше использовать перенаправление вместо пересылки (в противном случае старый URL останется в адресной строке). Также лучше использовать перенаправление 301 вместо (по умолчанию) 302 (в противном случае старый URL все равно будет проиндексирован поисковыми роботами).
Итак, вам нужно создать Filter
, который прослушивает url-pattern
старого расширения *.nsf
и реализовать его в основном следующим образом:
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");