Назад | Перейти на главную страницу

Как я могу переписать / перенаправить URL-адреса в Glassfish V3?

Я хотел бы упростить URL-адреса для доступа к приложению Glassfish V3, удалив расширения файлов и иным образом сократив URL-адреса.

Я уже установил свое приложение как приложение по умолчанию, так что нет необходимости включать корень контекста в URL.

Я бы хотел:
* Удалить расширения файлов
* Сократите URL-адрес до файлов глубоко в структуре папок

Я бы хотел сделать это с использованием сопоставления с образцом, а не для отдельных файлов (в настоящее время сайт небольшой, но он будет часто меняться и расти).

Некоторые примеры того, что я хотел бы сделать:
* foo.com/bar.html -> foo.com/bar
* foo.com/folder1/folder2/bar2.html -> foo.com/bar2

Любая помощь будет принята с благодарностью. Спасибо.

Привет,

Джин

Взято из http://www.sun.com/bigadmin/sundocs/articles/urlrdn.jsp похоже, это то, что вы ищете.

Перенаправление URL в домене

Вы можете использовать элемент url-prefix свойства redirect_, чтобы перенаправить URL-адрес на другой URL-адрес в том же домене.

Следующая процедура показывает, как разрешить посетителям веб-сайта вводить текст http://www.mywebsite.com/myproduct1 и будут перенаправлены или перенаправлены на http://www.mywebsite.com/mywarname/products/myproduct1.jsp.

  1. Войдите в консоль администратора сервера приложений Sun Java System или GlassFish.
  2. В консоли администратора разверните узел Конфигурации.
  3. Разверните узел конфигурации сервера.

    Игнорируйте этот шаг, если вы используете домен разработчика (домен, не имеющий возможности кластеризации).

  4. Разверните HTTP-сервис.

  5. Разверните Виртуальные серверы.
  6. Щелкните сервер.
  7. На странице «Редактировать виртуальный сервер» нажмите кнопку «Добавить свойство».
  8. В столбце Имя введите redirect_1.
  9. Если вы используете Application Server 9.0, введите from=/<context-root>/myproduct1 url-prefix=/mywarname/mypages/products/myproduct1.jsp в столбце Значение.

    Заметка - Ценность <context-root> указанное здесь значение должно соответствовать значению корневого контекста, указанному в файле web.xml или application.xml.

    Если вы используете Application Server 9.1, введите from=/myproduct1 url-prefix=/mywarname/mypages/products/myproduct1.jsp в столбце Значение.

В этом случае вы должны написать реализацию javax.servlet.Filter, которая распознает сокращенные URL-адреса и перенаправляет запросы реальной цели.

/**
 *
 * @author vrg
 */
@WebFilter(filterName = "SimplifiedUrlRequestDispatcher", urlPatterns = {"/*"})
public class ShortenedUrlRequestDispatcher implements javax.servlet.Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //reading configuration from filterConfig
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String shortURI = httpRequest.getRequestURI();
        String realURI = getRealURI(shortURI);
        if (realURI == null) {
            //in this case the filter should be transparent
            chain.doFilter(request, response);
        } else {
            //forwarding request to the real URI:
            RequestDispatcher rd = request.getRequestDispatcher(realURI);
            rd.forward(request, response);
        }
    }
    /**
     * Calculates the real URI from the given URI if this is a shortened one,
     * otherwise returns null.
     * @param shortURI
     * @return 
     */
    private String getRealURI(String shortURI) {
        //TODO implement your own logic using regexp, or anything you like
        return null;
    }

    @Override
    public void destroy() {
    }

}

привет! Отличный грунт, но еще одно - RequestDispatcher rd = request.getRequestDispatcher(realURI); работает с путем к сервлету, получая URI с именем приложения, выдаст ошибку. так - req.getServletPath() дает правильный путь без контекста, и диспетчер работает так, как должен.