динамические URL в веб-приложении java (как в rails) - PullRequest
3 голосов
/ 13 июля 2011

Я - разработчик Ruby on Rails, программирующий веб-приложение на Java.Я пытаюсь добиться чего-то похожего на то, что достигается в Rails.В Rails можно вызывать ссылку, используя localhost:8000\Users\1, когда Users - Модель, а 1 - идентификатор конкретного пользователя.Я хотел бы получить то же самое в Java.

Я работаю в дизайне типов MVC, где мои страницы JSP - это представление, а мои сервлеты - контроллеры.Я создал сервлет с именем Users, который отображает страницу users.jsp, и теперь я могу попасть на эту страницу с помощью URL localhost:8000\projectName\Users. Я бы хотел перенаправить localhost:8000\projectName\Users\1 на страницу user.jsp, пока соответствующий сервлет будет обрабатывать отправку.на страницу правильный пользователь (с id = 1).

Есть идеи, как мне этого добиться?

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

Ответы [ 3 ]

7 голосов
/ 13 июля 2011

теперь я могу попасть на эту страницу, используя URL-адрес localhost: 8000 \ projectName \ Users, я бы хотел перенаправить localhost: 8000 \ projectName \ Users \ 1 на страницу user.jsp, пока соответствующийСервлет будет обрабатывать отправку на страницу нужного пользователя (с id = 1).

Простой.Сопоставьте сервлет с шаблоном URL-адреса /Users/* вместо /Users.Затем вы можете получить информацию о пути (часть после /Users в URL, которая, таким образом, /1 в вашем примере) следующим образом:

String pathInfo = request.getPathInfo();
// ...

Вы можете просто переслатьusers.jsp обычным способом.

Long id = Long.valueOf(pathInfo.substring(1));
User user = userService.find(id);
request.setAttribute("user", user);
request.getRequestDispatcher("/WEB-INF/users.jsp").forward(request, response);
1 голос
/ 13 июля 2011

Я бы попробовал это с помощью сервлетов и сервлетных отображений, как в web.xml

<servlet>
    <servlet-name>UserServlet</servlet-name>
    <servlet-class>com.example.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <url-pattern>/Users</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <url-pattern>/Users/*</url-pattern>
</servlet-mapping>

Чем в вашей UserServlet попытаться получить полный URL и проанализировать его в соответствии с вашими потребностями. Пример:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) {

   String url = reg.getRequestURL();

   //... get last part after slash and parse it to your id

}

См. http://download.oracle.com/javaee/1.3/api/javax/servlet/http/HttpServletRequest.html для дальнейшей документации по запросу и способам получения его параметров

1 голос
/ 13 июля 2011

UrlRewriteFilter похож на mod_rewrite, но для Tomcat.Вы можете использовать его, чтобы сделать ваши URL-адреса SEO-дружественными.Вы также можете использовать Apache + mod_rewrite + Tomcat.

...