JSF 2 – Redirect HTTP 404 de manière programmatique

Tuto - JSF 2 – Redirect HTTP 404 de manière programmatique

Pierre LISERON
Mis à jour le 24 Janv 2024

Il nest pas forcément évident de faire un redirect 404 de manière programmatique en JAVA. 

Un des principaux cas dutilisation est lorsquon utilise un url rewritting pour générer des liens vers des pages web. Il peut arriver que la page web nexiste pas ou nexiste plus mais que la redirection (par exemple avec pretty-faces) vous a déjà fait calculer une partie de la page. Il devient dès lors très compliqué denvoyer proprement une 404 au navigateur et non pas un simple message derreur.

Pourquoi il est important denvoyer une vrai error 404? 

Pour le référencement. En effet il est important que les moteurs de recherche trouvent bien une erreur 404 et non une page derreur classique. Sinon le référencement va en patir.

Créer une vrai erreur HTTP 404

La solution se fait en deux étapes.

Le validator

Premièrement créer un validator qui va valider la donnée « métier ». Est-ce que ma page existe réellement. 

{{< highlight java >}} package validators;

import java.io.IOException;

import javax.faces.context.FacesContext; import javax.inject.Inject; import javax.inject.Named; import javax.servlet.http.HttpServletResponse;

@Named public class PageValidatorFaq404 {

public void validate(javax.faces.event.ComponentSystemEvent tete) {
  
    if (monTest) {

        FacesContext context = FacesContext.getCurrentInstance();
        context.getExternalContext().setResponseStatus(404);
        context.responseComplete();
        HttpServletResponse lHttpServletResponse = ((HttpServletResponse) FacesContext
                .getCurrentInstance().getExternalContext().getResponse());
        try {
            lHttpServletResponse
                    .sendError(HttpServletResponse.SC_NOT_FOUND);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

}{{< /highlight >}}

 

Dans la JSF

Dans la page que nous voulons valider, il suffit de rajouter un validator sur la phase prerenderview comme ci.

{{< highlight java >}} < f:metadata> < f:event listener="#{pageValidatorGlossaire404.validate}" type="preRenderView" /> < /f:metadata>{{< /highlight >}}

 

Ainsi lors que la page ne valide pas le validator, une vrai erreur 404 est envoyé au navigateur et vous pouvez ensuite la traiter de manière propre, en affichant par exemple une jolie page 404 en la configurant de votre web.xml comme ceci:

Le web.xml

{{< highlight java >}} < error-page> < error-code>404< /error-code> < location>/error404.xhtml< /location> < /error-page>{{< /highlight >}}

Pour aller plus loin

Sécurité du SI : pourquoi la cyber-résilience est le nouveau moteur de la confiance numérique ?

Dans l'écosystème IT actuel, la sécurité du SI n'est plus une simple option technique ou une case à cocher en fin de projet pour se donner bonne conscience. Entre des cyberattaques qui se professionnalisent et un cadre légal européen qui se durcit, elle est devenue un vrai socle pour la stratégie d'entreprise.

Small right arrow

Comprendre les Méthodes HTTP : explications et exemples

Bienvenue dans l’univers fascinant des méthodes HTTP, les véritables héros de la communication sur le web ! Que vous soyez développeur web ou simplement curieux, comprendre ces méthodes vous permettra de maîtriser les interactions entre les navigateurs et les serveurs. Dans cet article, nous allons explorer les différentes méthodes HTTP, découvrir leurs utilisations spécifiques et voir comment elles peuvent transformer votre manière de développer des applications web. Prêt pour le voyage ? Allons-y !

Small right arrow

Java : quelles sont les nouveautés en 2024 ?

La convention WeAreDevelopers 2024 s'est déroulée ce juillet à Berlin. Comme d'habitude depuis plusieurs années maintenant, AXOPEN était présent à l'évènement ! C'était l'occasion de découvrir les technologies de demain et de discuter des avancées des différents acteurs de la scène informatique. Dans cet article, nous allons nous focaliser sur l'un des sujets abordés lors de la convention : le langage de programmation Java. Quelles sont ses nouveautés ? Est-il toujours pertinent d'utiliser Java en 2024 ? C'est ce que nous allons voir aujourd'hui !

Small right arrow