2010-10-27 5 views
0

J'ai créé une petite application web en jsp avec une page d'accueil avec login et quelques pages restreintes avec déconnexion, tout contrôlé avec des filtres et des servlets. J'ai commencé à le faire parce que je voulais apprendre à utiliser les filtres et les servlets, et je pense que j'ai très bien réussi dans ce domaine.
Tout fonctionne correctement quand je m'assure que tout se passe dans le modèle d'URL 'root', mais le problème est que je veux que les pages restreintes soient dans son propre répertoire url-pattern ...Revenir dans l'url-pattern (invocation d'une servlet à partir d'une page jsp)

Sur mes pages restreintes J'ai inclus (< @ include ...>) une page de déconnexion qui contient ce formulaire:

<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> 

la soumettre sur cette page envoie l'utilisateur à un servlet de commande qui efface juste un LoginBean, définit un isLoggedIn booléen valeur à false sur le même bean et enfin 'sendRedirect' l'utilisateur à ma page de démarrage. Cela fonctionne bien lorsque toutes les pages se trouvent dans le répertoire url-pattern 'root'.

Une de mes pages restreintes est Yellow.jsp. Comme il est maintenant, il a juste après la cartographie de servlet:

<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> 

ce que je veux que ce soit est la suivante:

<servlet-mapping> 
    <servlet-name>ptYellow</servlet-name> 
    <url-pattern>/RestrictedPages/YellowZone/Yellow.jsp</url-pattern> 
    </servlet-mapping> 

Mais lorsque je tente de la carte comme ça et je tente une fermeture de la session la page Yellow.jsp, elle crache juste une erreur 404 car elle tente d'accéder à ma servlet de contrôle de déconnexion dans le répertoire '/ RestrictedPages/YellowZone /'.

il tente d'accéder à:
http: // localhost: 8080/myapp/RestrictedPages/YellowZone/LC
(LC est mon Déconnexion servlet Control)
quand il doit aller juste pour:
http:// localhost: 8080/myapp/LC



Je souhaite inclure ma déconnexion sur plusieurs pages restreintes différentes dans des modèles d'URL différents. Il ne doit donc pas être mappé sur le même modèle d'URL (cela ne semble pas résoudre le problème). problème de toute façon).
Et je ne veux définitivement pas coder en dur le formulaire de déconnexion sur toutes les pages restreintes, quand je sais qu'il devrait être possible de simplement "l'inclure" ...

Je suppose que je dois écrire quelque chose de spécial dans mes attributs d'action de déconnexion des formulaires, mais ne peut pas savoir quoi écrire. J'ai essayé des choses comme:
action = */LC
et
action =/../LC

Stripped de code le plus hors de propos, mon fichier xml ressemble à ceci:

<?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 être génial si quelqu'un peut signaler ce que je fais de mal ... Je peux voir beaucoup de potentiel dans l'utilisation de filtres sur les modèles d'URL, mais cela ne me sert à rien quand je ne peux pas faire des choses simples comme revenir dans un modèle d'url ....
J'utilise Eclipse Helios et apache-tomcat 7.0, si cela a de la pertinence ...
(je l'ai utilisé des heures à essayer de chercher une réponse, mais je ne pense pas que je sais exactement quoi chercher)

EDIT: fautes de frappe et la clarification

EDIT2: Je l'ai essayé de faire une cartographie sur ma page Logout.jsp (qui est la page de déconnexion que j'inclue 'sur mes pages restreintes), mais cela ne semble pas résoudre le problème non plus ...

EDIT3: J'ai poussé un peu plus avec ce problème ce soir.
J'ai essayé d'ajouter ce bloc de code à mon YellowFilter.java (et ajouté le nom = Déconnexion du bouton soumettre à Logout.jsp):

try{ 
     if(httpReq.getParameter("logout").equals("Log ud")) 
      httpResp.sendRedirect("LC"); 
     } catch(NullPointerException e) 
     { 
     } 

il ne fonctionne pas non plus, il essaie toujours juste Pour accéder à
http: // localhost: 8080/myapp/RestrictedPages/YellowZone/LC
J'ai également essayé de supprimer le paramètre d'action de mon formulaire de déconnexion, il suffirait donc de POST sur la même page. Cela n'a pas aidé non plus ...

De plus, j'ai essayé de modifier le servlet-mapping pour mon servlet de contrôle de déconnexion dans le fichier xml:

<servlet-mapping> 
    <servlet-name>LC</servlet-name> 
    <url-pattern>/*/*/LC</url-pattern> 
    </servlet-mapping> 

n'a pas fonctionné, alors j'ai essayé:

<servlet-mapping> 
    <servlet-name>LC</servlet-name> 
    <url-pattern>/*/LC</url-pattern> 
    </servlet-mapping> 

ne fonctionne pas non plus, alors j'ai essayé:

<servlet-mapping> 
    <servlet-name>LC</servlet-name> 
    <url-pattern>/*LC</url-pattern> 
    </servlet-mapping> 

et ça n'a pas marché non plus ...


/soupir, problème très ennuyeux, et ne peut pas laisser aller ...

Répondre

0

J'ai trouvé une solution très simple au problème. Je viens de changer la méthode de forme Logout.jsp à la méthode GET = au lieu de POST, puis écrire action =/« myappname »/« nom de servlet »:

<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> 

La solution est assez évident pour moi maintenant, et je suis tombé stupide sur le fait de négliger cela, alors j'espère vraiment que quelqu'un d'autre a le même problème xD ...
Va changer le titre de ma question à 'Retour à l'url-pattern (invoquant servlet d'un jsp page) '