2017-02-06 3 views
0

Wenn ich einen dummen Fehler gemacht und eine dumme Frage gestellt habe, dann entschuldige mich. Ich habe ein Servlet namens HelloWorld - es ist ein einfaches Servlet, das die Servlet-Schnittstelle implementiert, die Teil des "1stapp" -Projekts ist. Sein Code ist der folgende:Java-Servlet funktioniert nicht, URL-Mapping-Problem

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.*; 
public class helloworld implements Servlet 
{ 
    private ServletConfig config; 
    public void init(ServletConfig config) 
     throws ServletException { 
     this.config=config; 
    } 
    public void destroy(){} 
    public ServletConfig getServletConfig() { 
     return config; 
    } 
    public String getServletInfo() { 
     return "this is simple hello World Servlet"; 
    } 
    public void service(ServletRequest request, ServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out=response.getWriter(); 
     out.println("<html><head>"); 
     out.println("<title>Simple Servlet</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Hello, World</h1>"); 
     out.println("</body></html>"); 
     out.close(); 
     } 
    } 

Das Hello World Servlet erfolgreich in classes Verzeichnis innerhalb WEB-INF kompiliert wurde. Der Deployment Descriptor ist die folgende:

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" 
      "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"> 
    <web-app> 
     <servlet> 
      <servlet-name>hello</servlet-name> 
      <servlet-class>helloworld</servlet-class> 
     </servlet> 

     <servlet-mapping> 
      <servlet-name>hello</servlet-name> 
      <url-pattern>/hello</url-pattern> 
     </servlet-mapping> 
    </web-app> 

Nun, wenn ich localhost:8080/1stapp/hello firefox GEVES mir Problem loading page Nachricht eingeben. Kann jemand sagen, was ich falsch gemacht habe?

+0

Können Sie bitte die Fehlermeldung und den fehlenden Teil Ihrer 'web.xml' hinzufügen – andih

+0

Können Sie hinzufügen, was genau Fehler Firefox angezeigt wird. – soufrk

+0

Benötigen Sie speziell die web.xml? es funktioniert ohne das. –

Antwort

0

Dies ist nicht die Art und Weise Servlets in web.xml

Zu allererst Sie Ihre Servlet in web.xml als zu erklären, müssen Karte unten

<servlet> 
     <servlet-name>hello</servlet-name> 
     <servlet-class>HelloWorld</servlet-class> 
</servlet> 

dann Ihre URL-Muster an die Servlet als

Karte
<servlet-mapping> 
     <servlet-name>hello</servlet-name> 
     <url-pattern>/hello</url-pattern> 
</servlet-mapping> 

Und Sie besser HttpServlet eher als Servlet zu erweitern. HttpServlet ist die praktische Klasse, um mit dem HTTP-Protokoll zu arbeiten.

Ändern Sie Ihre Servlet-Klasse wie folgt.

public class HelloWorld extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<html><head>"); 
     out.println("<title>Simple Servlet</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Hello, World</h1>"); 
     out.println("</body></html>"); 
     out.close(); 
    } 
} 

Darüber hinaus sollte Ihr Servlet-Klassenname HelloWorld statt HelloWorld sein.

+0

Gefühl ich kein Paket verwendet habe, ich HelloWorld.java Servlet-Code gerade geschrieben setzte dort und in Klassen Verzeichnis zusammengestellt – olzhabala

+0

Okay, wenn Sie Haben Sie kein Paket, das in Ordnung ist (Antwort bearbeitet). Um genau zu sein, müssen Sie HttpServlet erweitern, anstatt die Servlet-Schnittstelle zu implementieren. –

+0

Das ist der Punkt, den ich versuche zu verstehen. Für Webseiten muss ich httpservlet erweitern oder es wird mit jeder Klasse funktionieren, die eine Servlet-Schnittstelle implementiert. Kannst du mir davon erzählen? – olzhabala

1

Es scheint zu sein, mindestens drei Ausgaben

Klassen in WEB-INF/classes gesucht werden, anstatt in WEB-INF

Verwenden Sie die HttpServlet anstelle der allgemeinen Servlet

Überschreiben Sie die doXXX Methoden des HttpServlet und nicht die generische service Methode. Die service Methode sendet die entsprechende doXXX Methode

+0

was ich jetzt tue, versucht zu verstehen, einfache einfache Schnittstelle Schnittstelle Implmentation – olzhabala

+0

Wenn Sie sorgfältig auf meine Faust schauen, schrieb ich, dass ich die Klassendatei in Klassen Unterverzeichnis von Web-inf – olzhabala

Verwandte Themen