Je développe petit à petit mon site web en Java, et me voilà déjà devant une erreur 404. J'ai mis en place deux pages :
.../panel
.../panel/home
La page /panel n'étant pas censée exister, elle redirige automatiquement vers .../panel/home. Les deux pages ont bien évidemment une servlet qui leur est propre. Notons tout de même qu'elles sont toutes deux protégées par un filtre qui n'autorise la consultation de celles-ci que lorsque le membre est connecté et a les autorisations suffisantes. Lors du test, je tente une connexion et BIM erreur 404. La page panel me redirige convenablement et je tombe sur .../panel/home, mais c'est sur cette page que l'erreur 404 a lieu. Pourtant, le filtre fonctionne puisque les méthodes "doGet()" des deux servlets sont appelées. Je suppose que la servlet ne redirige pas vers ma page JSP, pourtant le chemin entré est bien valide... Ou bien est-ce le filtre qui bloque la page ? Bref, je vous demande de l'aide
Voici les documents qui pourront vous aider :
Servlet de la page .../panel :
public class PanelServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
public static final String REDIRECT = "/panel/home";
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.sendRedirect(request.getContextPath() + REDIRECT);
}
}
Servlet de la page .../panel/home :
public class HomePanelServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
public static final String HOMEPANEL_PAGE = "AdminPanel/Home.jsp";
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
request.getRequestDispatcher(HOMEPANEL_PAGE).forward(request, response);
}
}
Filtre 2 (il y a deux filtres, mais le premier s'applique à toutes les pages et redirige correctement vers le deuxième) :
public class AdminPanelFilter implements Filter{
public static final String ERROR_PAGE = "/restricted";
@Override
public void init(FilterConfig config) throws ServletException{}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException{
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
User user = (User)request.getAttribute("user");
if(user == null || (user != null && user.getRank().getLevel() < UserRank.ADMINISTRATOR.getLevel())){
response.sendRedirect(request.getContextPath().replace("panel/", "") + ERROR_PAGE);
}
else{
chain.doFilter(request, response);
}
}
@Override
public void destroy(){}
}
Voilà tout (enfin, pas tout sinon ce serait un peu long ^^).
Oups petite question : je trouve que les Beans sont assez peu pratiques avec leurs constructeurs sans paramètres. Donc je voulais demander : peut-on mettre deux constructeurs sur un Bean ? Un sans paramètres, et un avec paramètres, pour l'esthétique du code ?
Je vous remercie d'avance pour vos réponses. Cordialement,
EclipseOnFire
- Edité par EclipseOnFire 31 octobre 2014 à 15:26:22
Quelle est l'erreur affichée dans les logs Tomcat quand tu obtiens cette 404 ?
Pour les beans, il te suffit d'initialiser les propriétés à coups de setXXX(), pas besoin de constructeurs (le constructeur, c'est rarement une bonne idée en J2EE).
Ah ça fonctionne en rajoutant un / devant "WEB-INF". Seul ennui : mon CSS ne part pas avec la JSP car je suis dans une situation... curieuse au niveau de la hiérarchie des pages et des dossiers.
La JSP :
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ include file="../Header.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Panneau d'administration</title>
</head>
<body>
<section>
<h1>Panneau d'administration</h1>
</section>
</body>
</html>
<%@ include file="../Footer.jsp" %>
Pour le CSS, le fichier est implicitement inséré puisqu'il est inséré dans le fichier "Header.jsp".
Les dossiers :
Pour moi le chemin vers le CSS et vers la JSP sont bons O_o. Je n'ai jamais mis de "/" devant l'URL de mon "WEB-INF", qu'est-ce que ça change précisément (hormis le fait que cela fonctionne pour ma JSP) ?
Merci d'avance
- Edité par EclipseOnFire 1 novembre 2014 à 22:12:49
J'ai aussi relu la partie du cours sur les filtres au cas où. J'ai donc décidé de stocker toutes les pages JSP partagées et les feuilles de style dans un dossier "Included" stocké à la racine du serveur ("WebContent").
Du coup, ça nous donne : "Header.jsp" et "Footer.jsp" contiennent le lien pour la feuille de style principale ("MainStyle.css").
Tout cela placé dans un dossier "Included" situé dans "WebContent".
J'ai résolu tous les problèmes excepté un : lorsque je me connecte à l'interface d'administration, le CSS n'est pas téléchargé. J'ai donc affiché la console de Firefox m'indiquant qu'il va chercher le CSS dans "http://localhost:8080/Site_Web/panel/Included/MainStyle.css", ce qui est logique, puisque le contexte de mon application est sous "/panel". L'ennui c'est que je ne sais pas comment faire pour rediriger correctement vers mon CSS (la page devrait se trouver dans "http://localhost:8080/Site_Web/Included/MainStyle.css") sauf en trichant et en définissant une variable dans mon filtre pour rediriger correctement...
Enfin, je souhaitais poser une autre question, sans vouloir abuser, afin d'éviter de poster un autre topic : comment puis-je initialiser des classes en même temps que le serveur démarre et faire en sorte que toute exception levée force le serveur à s'arrêter ? Pour l'instant, ces classes démarrent par leur propres moyens, via leur variable d'instance "getInstance()" mais vu qu'il n'y a pas de "public static void main()"..
- Edité par EclipseOnFire 2 novembre 2014 à 11:53:57
Pour le CSS, utilise la JSTL et sa balise c:url : en lui donnant une URL absolue, cela donnera ce que tu attends. Là encore, prends le temps de bien lir eles chapitres (dans l'ordre, tant qu'à faire ).
- loadOnStartup dans le web.xml te permet de précharger des servlets au démarrage du serveur ;
- http://stackoverflow.com/questions/13932746/how-to-abort-tomcat-startup-upon-exception-in-servletcontextlistener pour essayer de tuer le serveur si une exception est levée, mais c'est un peu hardcore comme comportement. Le mieux )d'après moi) est sûrement de gérer ça au sein d'un filtre dans l'appli (via une variable d'application qui serait initialisée à "ERREUR" en cas d'exception, et qui serait testée dans un filtre global, par exemple), et de servir une page d'erreur le cas échéant.
Pour le CSS, utilise la JSTL et sa balise c:url : en lui donnant une URL absolue, cela donnera ce que tu attends. Là encore, prends le temps de bien lir eles chapitres (dans l'ordre, tant qu'à faire ).
Super ça marche !
Coyote a écrit:
Pour ton autre question :
- loadOnStartup dans le web.xml te permet de précharger des servlets au démarrage du serveur ;
- http://stackoverflow.com/questions/13932746/how-to-abort-tomcat-startup-upon-exception-in-servletcontextlistener pour essayer de tuer le serveur si une exception est levée, mais c'est un peu hardcore comme comportement. Le mieux )d'après moi) est sûrement de gérer ça au sein d'un filtre dans l'appli (via une variable d'application qui serait initialisée à "ERREUR" en cas d'exception, et qui serait testée dans un filtre global, par exemple), et de servir une page d'erreur le cas échéant.
Je suis aussi partisan de ta seconde méthode, étant donné que j'ai déjà un filtre qui s'applique à toutes les pages . Ce sont des classes très importantes : j'ai mon DatabaseManager par exemple, qui gère la base de données, sans ça le site ne marcherait pas ^^.
Je teste en envoyant ma page d'administration et je te dis ce qu'il en est
Merci pour ta patience
- Edité par EclipseOnFire 2 novembre 2014 à 14:58:13
Tout fonctionne excepté le fait que je doive changer tous les liens du header (<nav></nav>) du panneau d'administration x) De tout façon je vais changer le header pour le panneau d'administration, pour montrer qu'on est bien à un endroit différent.
Bon, sur ce, merci mille fois !! Bonne continuation !
Merci ! D'autant plus que je viens d'attaquer le chapitre sur JSF... Hum... Je viens de digérer les Servlets, voilà autre chose x)
- Edité par EclipseOnFire 2 novembre 2014 à 21:47:51
Error 2006, MySQL server has gone away
Java EE - Erreur 404
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.