Tomcat Servlet: Error 404 - la ressource demandée N'est pas disponible
je suis complètement nouveau à écrire un Servlet Java, et j'ai du mal à obtenir un simple HelloWorld
exemple de fonctionnement correct.
The HelloWorld.la classe java est:
package crunch;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
je lance Tomcat v7.0, et ont déjà lu des questions similaires, avec des réponses se référant à la modification du invoker
servlet-mapping
dans la section web.xml
, cette section n'existe pas dans la mienne, Et quand je l'ai ajoutée, le même problème s'est quand même produit.
7 réponses
essayez ceci (si le Java EE V6)
package crunch;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
@WebServlet(name="hello",urlPatterns={"/hello"})
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
maintenant atteindre le servlet par http://127.0.0.1:8080/yourapp/hello
où 8080 est le port tomcat par défaut, et yourapp est le nom de contexte de votre application
vous avez certainement besoin de mapper votre servlet sur une URL. Si vous utilisez Java EE 6 (cela signifie au moins L'API Servlet 3.0), alors vous pouvez annoter votre servlet comme
@WebServlet(name="helloServlet", urlPatterns={"/hello"})
public class HelloWorld extends HttpServlet {
//rest of the class
alors vous pouvez simplement aller à la localhost:8080/yourApp/hello
et la valeur doit être affichée. Dans le cas où vous ne pouvez pas utiliser L'API Servlet 3.0, vous devez enregistrer ce servlet dans web.xml
le fichier
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>crunch.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
écrire des servlets Java est facile si vous utilisez Java EE 7
@WebServlet("/hello-world")
public class HelloWorld extends HttpServlet {
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World");
out.flush();
}
}
depuis servlet 3.0
La bonne nouvelle, c'est le descripteur de déploiement n'est plus nécessaire!
Lire le tutoriel Java Servlets.
c'est peut-être dû à la chose que vous avez créé votre .jsp ou le .un fichier html dans le WEB-INF au lieu de WebContent dossier.
Solution: il suffit de remplacer les fichiers présents dans le dossier WEB-INF vers le dossier Webcontent et d'essayer d'exécuter la même chose - vous obtiendrez la sortie appropriée
pour ceux qui restent avec" la ressource demandée n'est pas disponible " dans Java EE 7 et dynamic Web module 3.x, peut-être que cela pourrait aider: L'Assistant "Create Servlet" dans Eclipse (testé dans Mars) ne crée pas le @Path annotation pour la classe servlet, mais j'ai dû l'inclure pour accéder avec succès aux méthodes publiques exposées.
vous devez utiliser ../../nom_projet/nom de fichier.jsp dans votre action attr. ou href
../ = contient le dossier courant simple (demo.projet.filename.jsp)
Servlet ne peut être appelé qu'avec 1 slash avancé à votre nom de projet..
Mon problème était dans web.xml
fichier. Dans un <servlet-mapping>
il y a une erreur à l'intérieur de <url-pattern>
: j'ai oublié d'ajouter /
avant d'url.