Сделайте все запросы к mysite.com/user/specified/path для запуска того же JSP - PullRequest
2 голосов
/ 26 апреля 2011

Я хочу разрешить пользователям создавать группы в моем приложении и получать к ним доступ через URL. Например, если вы создали группу под названием «sweethatclub», вы можете получить к ней доступ по адресу http://mysite.com/sweethatclub.. Конечно, тот же код будет работать для / sweethatclub и / drillteam и даже / Students / Yearbook

Я работаю в среде сервлетов Java и не могу найти пути для этого. Я могу написать фильтр, который перехватывает все запросы и добавляет информацию к запросу, анализируя URL, но затем я хочу запустить код index.jsp. Я не хочу отображать index.jsp на все URL, потому что, например, /images/smiley.jpg по-прежнему должен отвечать соответствующим файлом вместо index.jsp.

Есть ли способ отправить все запросы сервлету, если только запрос не соответствует простому старому файлу? Или есть какой-то другой способ сделать то, что я хочу здесь?

Пожалуйста, дайте мне знать, если мне нужно предоставить больше информации. Я новичок в этой среде.

Ответы [ 3 ]

3 голосов
/ 26 апреля 2011

Шаблоны URL в web.xml не должны быть достаточно умными, чтобы выяснить природу целевого URL. Если вы можете это терпеть, самый простой способ - поместить все пути, указанные пользователем, в хорошо известный корень ... где-нибудь отдельно от статических файлов. Таким образом, вы получите указанные пользователем пути, например http://mysite.com/<strong>sites</strong>/sweethatclub.

Кроме того, вы можете переместить все статическое содержимое в http://mysite.com/<strong>static</strong>/ и настроить сопоставления или фильтры сервлета для обработки всего, что начинается с 'static', отличного от динамического пространства URL.

1 голос
/ 26 апреля 2011
  1. Отобразить сервлет по определенному шаблону URL

    <url-pattern>/groups/*</url-pattern>
    
  2. Поместите весь статический контент в общую папку, например, /static и исправьте все URL-адреса на страницах, чтобы вместо них указывать на этот URL-адрес.

  3. Создать фильтр, который сопоставлен с

    <url-pattern>/*</url-pattern>
    

    и выполняет следующую работу в doFilter() метод

    String uri = ((HttpServletRequest) request).getRequestURI();
    
    if (uri.startsWith("/static/")) {
        chain.doFilter(request, response); // Goes to default servlet.
    } else {
        request.getRequestDispatcher("/groups" + uri).forward(request, response);
    }
    

    Нет, это не заканчивается /groups в адресной строке браузера. Это полностью прозрачно. При необходимости вы можете сделать "/ static" и / или "/ groups" <init-param> фильтра, чтобы он мог настраиваться извне.

1 голос
/ 26 апреля 2011

Если вы находитесь в среде Unix, вы можете просто создать все «групповые сайты» в виде виртуальных каталогов, которые будут просто указывать на каталог по умолчанию.

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