Каков наилучший способ создания сервлета Java или JSP, который может содержать контент, в зависимости от параметров URL? - PullRequest
3 голосов
/ 07 мая 2009

Я хочу создать страницу или сервлет JSP, которые будут работать двумя способами.

Пользователь заходит на страницу своего профиля:

HTTP // something.com / профиль /

Или они посещают страницу своих друзей:

http://something.com/profile/FriendsName

Они также могут посетить свою собственную страницу через явный URL-адрес, такой как: http://something.com/profile/YourName

У меня есть установка сервлет-сопоставления, как показано ниже, для сопоставления любых запросов в / profile с моим JSP, который будет обрабатывать этот запрос.

  <servlet>
          <servlet-name>Profile</servlet-name>
          <jsp-file>/profile.jsp</jsp-file>
  </servlet>

  <servlet-mapping>
    <servlet-name>Profile</servlet-name>
    <url-pattern>/profile</url-pattern>
  </servlet-mapping>

Тогда я подумал, что мог бы установить фильтр, который будет анализировать URL-адрес HTTPServletRequest для чтения после /profile/.

  <filter>
    <filter-name>profile-filter</filter-name>
    <filter-class>ProfileFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>profile-filter</filter-name>
    <url-pattern>/profile*</url-pattern>
  </filter-mapping>

Теперь фильтр может устанавливать атрибуты в запросе HttpServletRequest. Как мне их вытянуть на странице JSP, чтобы проверить, было ли указано имя пользователя, и проверить, было ли установлено ваше собственное имя?

Как бы я мог создать bean-объект с областью видимости в ServletFilter, чтобы я мог использовать его на странице JSP с помощью jspBean следующим образом:

<jsp:useBean id="profileInfo" scope="page" class="ProfileInfo" /> 

Ответы [ 2 ]

1 голос
/ 08 мая 2009

Я думаю, что фильтр служит только для искусственного разрыва логики. Вы можете очень легко определить значение части URL, которая не соответствует шаблону URL, описанному в web.xml. У класса HttpServletRequest есть метод, который возвращает это значение для вас, он называется getPathInfo(). Вот пример:

<%
   String path = request.getPathInfo();
   if (path == null || "".equalsIgnoreCase(path)) {
      // The path was empty, display the current user's profile
   } else {
      // Display the named profile
   }
%>

Это совсем не поможет вам с компонентами запроса, но я думаю, что это поможет с дизайном.

0 голосов
/ 08 мая 2009

Я не совсем слежу за вопросом, но если вы хотите, чтобы jsp получил доступ к параметрам или атрибутам запроса, просто сделайте:

<%
  String parameter = request.getParameter("parameter");
  String attribute = request.getAttribute("attribute");

%>

Вы также можете получить доступ к URL-адресу запроса и т. Д. ... если вам нужно что-то сделать с ними.

Лично я бы порекомендовал вам использовать сервлет для обработки ваших запросов и пересылать на jsp по вашему выбору (возможно, после установки информации о сеансе, которую может использовать jsp).

Использование фильтров уровня сервера и атрибутов запросов для такого рода вещей может быть немного излишним, но только вы знаете истинные требования вашего проекта.

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