Java / Tomcat : résoudre l'erreur HTTP Status 404 The requested resource (/servlet) is not available
Si la ressource manquante est une servlet, alors il y a plusieurs points à vérifier. Si celle-ci est une page web, la procédure pour corriger le problème est beaucoup plus simple.
Lorsque vous utilisez le serveur open source Tomcat, il est possible d'obtenir une erreur 404 sur une servlet ou une autre ressource au moment de l'affichage. Le message "The origin server did not find a current representation for the target resource or is not willing to disclose that one exists" s'affiche alors sur votre navigateur. Il y a en effet plusieurs points à respecter dans la création de votre application pour vous assurer que votre servlet ou votre page est disponible.
Si la ressource manquante est une servlet, alors il y a plusieurs points à vérifier. Tout d'abord une servlet doit être contenue dans un package. Si ce n'est pas le cas, votre serveur ne pourra pas voir votre servlet. Pour l'emplacement de votre package, vous devez vous référer à la documentation de votre environnement de développement. Par exemple, il s'agit du dossier "src" pour Eclipse alors que c'est le dossier "main/java" pour Maven.
La deuxième étape est la variable "url-pattern". Cette variable doit être mise à jour pour contenir l'URL de la servlet. La manière d'effectuer la manipulation diffère selon la version des servlet que vous utilisez. Si vous utilisez une version des servlets antérieure à la version 3, vous devez modifier le fichier "web.xml" pour y indiquer votre servlet :
<servlet> <servlet-name>maServlet</servlet-name> <servlet-class>com.exemple.MaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>maServlet</servlet-name> <url-pattern>/ma-servlet</url-pattern> <!--C'est ici qu'il faut écrire l'URL de votre servlet. --> </servlet-mapping>
A partir de la version 3 des servlet, il suffit d'effectuer une déclaration avant la déclaration de classe de votre servlet. On utilise pour cela l'instruction "@WebServlet" :
@WebServlet("/ma-servlet")
L'étape suivante consiste à vérifier que la servlet est bien présente dans les fichiers issus du déploiement. Pour cela, la méthode la plus simple est de générer une archive web (WAR) puis de l'ouvrir avec une application qui gère les archives et de vérifier la présence de la servlet. Si elle est absente, il va falloir contrôler les paramètres de génération de votre projet.
Pour tester l'affichage de la servlet dans votre navigateur, il suffit de vous rendre sur l'URL de votre application puis d'ajouter l'URL de votre servlet : http://localhost:8080/mon-projet/ma-servlet. Si vous avez implémenté la méthode doGet() ou que votre servlet l'hérite d'une classe parente, vous aurez un affichage. Sinon vous devez avoir une erreur 405, qui indique que la méthode GET n'est pas supportée par votre servlet. Cependant, cela signifie que votre servlet est bien présente.
Si par la suite vous devez faire référence à l'URL de la servlet, par exemple dans un formulaire, nous vous conseillons d'utiliser la variable "${pageContext.request.contextPath}" qui contient directement l'URL du projet et change en fonction de votre installation.
<form action="${pageContext.request.contextPath}/ma-servlet">
Si votre ressource est une simple page web, la procédure pour corriger le problème est beaucoup plus simple. Vous devez d'abord vérifier que votre page est bien référencée dans le fichier "web.xml", sinon elle ne sera pas accessible. L'inverse est également vrai. Si dans votre fichier "web.xml", vous référencez une page qui n'existe pas, vous obtiendrez également ce message d'erreur. Dans ce cas, il faudra soit supprimer la référence, soit créer le fichier en question.