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.

27
demandé sur BalusC 2013-10-06 15:06:50

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

21
répondu 2013-10-06 11:16:52

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>
11
répondu Petr Mensik 2013-10-06 11:17:00

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

6
répondu Roman C 2017-04-13 12:36:16

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

2
répondu prasanth 2017-07-24 18:29:32

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.

0
répondu vladiastudillo 2016-01-17 15:15:25

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

0
répondu user5706295 2016-02-15 10:03:27

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.

-1
répondu parsecer 2018-02-10 12:52:56