Я создал небольшое веб-приложение в jsp с начальной страницей с логином и некоторыми ограниченными страницами с выходом из системы, - все контролируется фильтрами и сервлетами. Я начал делать это, потому что хотел узнать, как использовать фильтры и сервлеты, и думаю, что я успешно справился с этим.
Все отлично работает, когда я просто убедиться, что все, что происходит в «корневой» URL-шаблон, но проблема, я хочу, ограниченные страницы, чтобы быть в своем собственном каталоге URL-шаблон ...Вернитесь в url-шаблон (вызывающий сервлет со страницы jsp)
На моих ограниченных страницах Я включил (< @ включают ...>) страницу Выход, который содержит эту форму:
<form method=POST action=LC>
<table align="right">
<tr>
<td>Navn:</td>
<td><b><%=login.getName() %></b></td>
</tr>
<tr>
<td>Aktør:</td>
<td><b><%= login.getAktoer() %></b></td>
</tr>
<tr>
<td><input type="submit" value="Log ud"></td>
</tr>
<tr>
<td></td>
<td><b><%= login.getMeddelelse() %></b></td>
</tr>
</table>
</form>
передать на этой странице будет посылать пользователю управления сервлета, который просто очищает на LoginBean, устанавливает логическое isLoggedin значение false для одного и того же компонента и, наконец, «sendRedirect» пользователя на мою стартовую страницу. Это хорошо работает, когда все страницы находятся в корневой директории url-pattern.
Одна из моих ограниченных страниц - Yellow.jsp. Как это сейчас, это просто следующее отображение сервлета:
<servlet>
<servlet-name>ptYellow</servlet-name>
<jsp-file>/Yellow.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>ptYellow</servlet-name>
<url-pattern>/Yellow.jsp</url-pattern>
</servlet-mapping>
, что я хочу, чтобы это:
<servlet-mapping>
<servlet-name>ptYellow</servlet-name>
<url-pattern>/RestrictedPages/YellowZone/Yellow.jsp</url-pattern>
</servlet-mapping>
Но когда я пытаюсь отобразить его, как это и я пытаю выход из системы из на странице Yellow.jsp, она просто выплевывает ошибку 404, потому что она пытается получить доступ к моему сервлету управления выходом из системы в каталоге '/ RestrictedPages/YellowZone /'.
он пытается получить доступ:
HTTP: // локальный: 8080/MyApp/RestrictedPages/YellowZone/LC
(LC мое управление Выходом сервлета)
, когда он должен просто пойти:
HTTP:// localhost: 8080/myapp/LC
Я хочу включить мой выход на многие разные страницы с ограниченным доступом в разных url-образцах, поэтому он не должен отображаться на один и тот же шаблон url (который, похоже, не решает проблему проблема в любом случае).
И я определенно не хочу жестко кодировать форму выхода на всех ограниченных страницах, когда я знаю, что должно быть возможно просто «включить» это ...
Я предполагаю, что мне нужно написать что-то особенное в моем атрибуте action logout, но не может понять, что писать. Я пробовал такие вещи, как:
действие = */LC
и
действие =/../LC
Лишенный из наиболее неактуальной кода, мой файл XML выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<welcome-file-list>
<welcome-file>StartSide.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>control.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<servlet-name>AC</servlet-name>
</filter-mapping>
<filter>
<filter-name>YellowFilter</filter-name>
<filter-class>control.YellowFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>YellowFilter</filter-name>
<url-pattern>/RestrictedPages/YellowZone/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>ptYellow</servlet-name>
<jsp-file>/Yellow.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>ptYellow</servlet-name>
<url-pattern>/RestrictedPages/YellowZone/Yellow.jsp</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>start</servlet-name>
<jsp-file>/StartSide.jsp</jsp-file>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>start</servlet-name>
<url-pattern>/start</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AC</servlet-name>
<servlet-class>control.ActorControl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AC</servlet-name>
<url-pattern>/AC</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LC</servlet-name>
<servlet-class>control.LogoutControl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LC</servlet-name>
<url-pattern>/LC</url-pattern>
</servlet-mapping>
</web-app>
Would быть здоровым, если кто-то может указать, что я делаю неправильно ... Я вижу много возможностей в использовании фильтров на url-образцах, но мне это бесполезно, когда я не могу делать простые вещи, например, url-pattern ....
Я использую Eclipse Helios и apache-tomcat 7.0, если это имеет значение ...
(я использовал часы, пытаясь найти ответ, но я не думаю, что я точно знаю, что искать)
EDIT: опечатки и осветления
edit2: Я пытался сделать некоторое отображение на моей странице Logout.jsp (которая является страницей выхода, которую я «включаю» на мои ограниченные страницы), но это, похоже, не решает проблему ...
EDIT3: эта проблема сегодня.
Я пытался добавить этот блок кода в моей YellowFilter.java (и добавил имя = Выход на кнопку отправки в Logout.jsp):
try{
if(httpReq.getParameter("logout").equals("Log ud"))
httpResp.sendRedirect("LC");
} catch(NullPointerException e)
{
}
он не работал ни, она еще только пытается для доступа
http: // localhost: 8080/myapp/RestrictedPages/YellowZone/LC
Я также попытался удалить параметр действия из моей формы выхода, так что это просто POST на той же странице. Это не помогло ...
Кроме того, я попытался изменить сервлет-отображение для моего управления сервлета Выход в файле XML:
<servlet-mapping>
<servlet-name>LC</servlet-name>
<url-pattern>/*/*/LC</url-pattern>
</servlet-mapping>
не работает, то я пробовал:
<servlet-mapping>
<servlet-name>LC</servlet-name>
<url-pattern>/*/LC</url-pattern>
</servlet-mapping>
не получилось, так что я пробовал:
<servlet-mapping>
<servlet-name>LC</servlet-name>
<url-pattern>/*LC</url-pattern>
</servlet-mapping>
и что не получилось ...
/вздохнув, очень раздражает проблема, и не может отпустить ...