2010-10-27 2 views
0

Я создал небольшое веб-приложение в 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> 

и что не получилось ...


/вздохнув, очень раздражает проблема, и не может отпустить ...

ответ

0

Я нашел очень простое решение этой проблемы. Я просто изменить метод формы в Logout.jsp методу = GET вместо POST, а затем записать действие =/«myappname»/«имя-сервлет»:

<form method=GET action=/Prototype/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> 

Решение довольно очевидно для меня сейчас, и я упал глупо об этом, потому что я действительно надеюсь, что кто-то другой будет иметь ту же проблему xD ...
Изменит заголовок моего вопроса на «Вернуться в url-pattern (вызывающий сервлет из jsp page) '