web-dev-qa-db-fra.com

Servlet Tomcat: Erreur 404 - La ressource demandée n'est pas disponible

Je suis complètement nouveau à l'écriture d'un Servlet Java) et j'ai du mal à obtenir un exemple simple HelloWorld pour qu'il fonctionne correctement.

La classe HelloWorld.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");
  }
}

J'exécute Tomcat v7.0 et j'ai déjà lu des questions similaires, avec des réponses faisant référence à la modification du invokerservlet-mapping section dans web.xml, cette section n’existe pas dans la mienne et, quand je l’ai ajoutée, le même problème se produisait.

27
Tom Haddad

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 votre application le nom de contexte de votre application

21
user2511414

Vous devez absolument mapper votre servlet sur une URL. Si vous utilisez Java EE 6 (cela signifie au moins Servlet API 3.0)), vous pouvez annoter votre servlet de la manière suivante:

@WebServlet(name="helloServlet", urlPatterns={"/hello"})
public class HelloWorld extends HttpServlet {
     //rest of the class

Ensuite, vous pouvez simplement aller à la localhost:8080/yourApp/hello et la valeur devrait être affichée. Si vous ne pouvez pas utiliser l'API Servlet 3.0, vous devez enregistrer ce servlet dans web.xml fichier comme

<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
Petr Mensik

Ecrire Java servlets 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 est que le descripteur de déploiement n'est plus nécessaire!

Lisez le tutoriel pour Java Servlets .

6
Roman C

cela est peut-être dû à ce que vous avez créé votre fichier .jsp ou le fichier .html dans le dossier WEB-INF au lieu du dossier WebContent.

Solution: remplacez simplement les fichiers présents dans le dossier WEB-INF par le dossier Webcontent et essayez de les exécuter. Vous obtiendrez le résultat approprié.

2
prasanth

Vous devez utiliser ../../NomProjet/NomFichier.jsp dans votre action attr. ou href

../ = contient le dossier actuel simple (demo.project.filename.jsp)

Servlet ne peut être appelé avec 1 barre oblique à l'avant du nom de votre projet.

0
user5706295

Pour ceux qui sont coincés avec "La ressource demandée n'est pas disponible" dans Java EE 7 et le module Web dynamique 3.x, cela pourrait peut-être aider: l'assistant "Créer un servlet" dans Eclipse (testé dans Mars ) ne crée pas l'annotation @ Path pour la classe servlet, mais je devais l'inclure pour pouvoir accéder correctement aux méthodes publiques exposées.

0
vladiastudillo