# Servlet lässt sich nicht aufrufen



## MichiM (9. Dez 2007)

Hallo,


habe in NetBeans ein Servlet eingefügt:



```
/*
 * test.java
 *
 * Created on 9. Dezember 2007, 21:09
 */

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

/**
 *
 * @author user
 * @version
 */
public class test extends HttpServlet {
    
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet test</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet test at " + request.getContextPath () + "</h1>");
        out.println("</body>");
        out.println("</html>");
         
        out.close();
    }
    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}
```



Die Eintragungen in die web.xml hab ich automatisch vornehmen lassen:



> <servlet>
> <servlet-name>test</servlet-name>
> <servlet-class>test</servlet-class>
> </servlet>
> ...




Der Context Path: /java


Beim Aufruf von:




> http://localhost:8084/java/test



kommt:



> HTTP Status 404 - /java/test
> 
> type Status report
> 
> ...



In die java.war eingebunden wird die Servlet-Klasse auf jeden Fall, da hab ich nachgeschaut.


Woran liegt das, dass das Servlet nicht ausgeführt wird?

Gruß Michi


----------



## SlaterB (10. Dez 2007)

auch auf die Gefahr hin zu nerven:
das beste Vorgehen ist es, aus dem Internet ein fertiges Beispiel zu laden und auszuprobieren,

dann deine selbst erzeugten Komponenten bei Fehlern Schritt für Schritt vergleichen
(Classpath, Aufbau der Archive, Aufbau der Konfigurationsdateien, ..)


----------



## maki (10. Dez 2007)

Ins Log gucken hilft auch.


----------



## number8 (10. Dez 2007)

Ich bin mir jetzt nicht ganz sicher ob es was nützt, aber es sieht so aus, als ob das servlet im default-package liegt. Bitte pack das mal in ein von Dir definiertes package rein und pass den Rest in der web.xml dementprechend an.


----------



## SlaterB (10. Dez 2007)

oh, und dazu noch:
gerade wenn Konfigurationsdateien oder automatische Klassensuche ins Spiel kommen,
dann unbedingt an Standardkonventionen wie großgeschriebe Klassennamen halten (!!)


----------



## MichiM (11. Dez 2007)

Ok, geht jetzt. Eine eindeutige Erklärung hab ich zwar nicht, aber zum einen empfiehlt es sich, wie ich nun mehrfach gelesen habe, Servlets immer in ein Package zu packen (der Tip kam ja auch von number8) und zum anderen mag es was mit dem Build-Zustand / Cache zu tun gehabt haben, denn auch nachdem ich es bereits in ein Package gepackt hatte, scheiterten noch einige Versuche, die nach entsprechenden Beispielen, die ich so im Netz fand, gepasst hätten müssen und am Ende auch gepasst haben. Kleinkram als Fehlerursache ist natürlich besonders nervig.  

Als Tip für Anfänger (zu denen ich übrigens auch gehöre :wink: ) :

Die Beschau der Logs hilft manchmal auch weiter, man muss sie nur finden.
Für den Tomcat (den die meisten Anfänger wohl verwenden):
Da gibts ein Unterverzeichnis *logs*, da finden sich Dateien wie manager.x, catalina.x, localhost.x, host-manager.x, admin.x, wobei x = Datum

In localhost.x sammeln sich z.B. die ausführlichen Fehlermeldungen.


----------



## SlaterB (11. Dez 2007)

> Eine eindeutige Erklärung hab ich zwar nicht

du kannst allgemein in Java von einer Klasse in einem package aus nicht auf eine andere Klasse im leeren Default-package zugreifen


----------

