Перенаправить с отсутствующей страницы на новую - PullRequest
2 голосов
/ 10 февраля 2010

Привет! Я обновляю сайт, перехожу с Notes на Java JSP и должен поддерживать перенаправление со старых URL-адресов на новые. Поэтому /site/oldpage.nsf?home необходимо перенаправить на /site/newpage.jsp.

В Tomcat я настроил страницу ошибок для перенаправления: 404 /avi_redirect.jsp

в avi_redirect.jsp у меня есть:

pageContext.forward(  "/newpage.jsp" );

Но так как мне нужно сделать это для многих страниц, мне нужно знать старое имя страницы, т.е. /site/oldpage.nsf?home.
Любая идея, как я могу получить это? Ответ и заголовки не имеют его. Строка запроса содержит параметры, но не URL.

Ответы [ 3 ]

2 голосов
/ 10 февраля 2010

Для этого лучше использовать Фильтр, а не 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");
1 голос
/ 10 февраля 2010

Вы должны рассмотреть возможность сделать это в своем DD, web.xml. И напишите фильтр, который будет перенаправлять запросы на соответствующие страницы.

0 голосов
/ 10 февраля 2010

Вы должны поддерживать отображение старого URL-адреса страницы на новый URL-адрес страницы. Вы можете сохранить это отображение в файле свойств, XML или базе данных, и avi_redirect.jsp ищет это отображение и перенаправляет на новую страницу.

Другая вещь, которую вам нужно принять, касается параметров URL, если они одинаковы или нет. Если они также не одинаковы, то вам необходимо сопоставить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...