2012-05-25 6 views
5

Ich bin ein Neuling bei der Web-Entwicklung und bei der Verwendung von Embedded Jetty. Der unten dargestellte Quellcode wird mit der Eclipse IDE entwickelt. Ich muss den Jetty-Server programmatisch starten, ich habe keine Möglichkeit, ihn über die Kommandozeile zu starten. Es muss ein extrem leichtes Web-Interface sein, da es von einem System mit geringer Speicher-/Verarbeitungsgeschwindigkeit gestartet wird.mit embedded Jetty zum Erstellen einer Web-Schnittstelle

ich die folgende Verzeichnisstruktur in ECLIPSE

JettyExample <Project> 
    src 
    sample_package 
     HelloWorld.java 
    WEB-INF 
     index.html 
     web.xml 

Der Quellcode von HelloWorld.java

public static void main(String[] args) throws Exception 
{ 

    Server server = new Server(8080); 
    ResourceHandler resource_handler = new ResourceHandler(); 
    resource_handler.setDirectoriesListed(true); 
    resource_handler.setResourceBase(args.length == 2?args[1]:"."); 
    resource_handler.setWelcomeFiles(new String[]{ "WEB-INF/index.html" }); 


    System.out.println("serving " + resource_handler.getBaseResource()); 

    HandlerList handlers = new HandlerList(); 
    handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() }); 
    server.setHandler(handlers); 
    server.start(); 
    server.join(); 

} 

index.html ist

<html> 
<head> 
    <title>HTML Generator Sample Page</title> 
</head> 
<body> 
    <h1 style="text-align: center;"> 
     Agent Management Interface</h1> 
    <ol> 
     <li> 
      Start Platform</li> 
     <li> 
      Show Agent Status</li> 
     <li> 
      Create Dummy Agent</li> 
     <li> 
      Intiate Request Message</li> 
     <li> 
      Stop agent</li> 
     <li> 
      Stop Platform</li> 
    </ol> 
    <p> 
     Enter option :</p> 
    <p> 
     <textarea cols="10" name="myTextBox" rows="1" style="width: 104px; height: 25px;"></textarea></p> 
    <p> 
     <input name="option_selector" type="submit" value="option_selector" /></p> 
</body> 

entwickelt haben Die Datei web.xml ist die übliche Datei mit einer Liste von Begrüßungsdateien. wenn ich den Server laufen lasse und localhost: 8080 im Webbrowser starte, bekomme ich einen 404 Fehler Ich bin mir nicht sicher, was ich der web.xml Datei hinzufügen oder den Verweis der web.xml Datei hinzufügen muss ist in der Hauptmethode HelloWorld.java nicht korrekt.

Irgendwelche Hinweise/werden Vorschläge hilfreich sein EDIT 1:

Ich bin auch der Server-api.jar-Datei und der jetty.jar-Datei im Classpath und machen nicht für Eklipse des Maven Plugin.

EDIT2:

2012-05-25 14:40:39.253:DBUG:oejs.AsyncHttpConnection:async request (null null)@17160330 [email protected] 
2012-05-25 14:40:39.260:DBUG:oejs.Server:REQUEST/on org.eclipse.jett[email protected][email protected]:8080<->127.0.0.1:55062 
2012-05-25 14:40:39.264:DBUG:oejs.Server:RESPONSE/200 
2012-05-25 14:40:39.267:DBUG:oejs.AsyncHttpConnection:async request (null null)@17160330 [email protected] 
2012-05-25 14:40:39.272:DBUG:oejs.AsyncHttpConnection:async request (null null)@17160330 [email protected] 
2012-05-25 14:40:39.273:DBUG:oejs.Server:REQUEST /jetty-dir.css on org.eclipse.jett[email protected][email protected]:8080<->127.0.0.1:55062 
2012-05-25 14:40:39.275:DBUG:oejs.Server:RESPONSE /jetty-dir.css 404 
+0

Wenn Sie den gesamten Pfad der Datei eingeben, ist es immer noch Fehler für Sie? – BOSS

+0

@abhishek bose Ich kann die Verzeichnisstruktur sehen, nur wenn ich localhost: 8080/src/WEB-INF ich kann die HTML-Seite von der index.html Seite – bhavs

Antwort

2

Sie Ihre Willkommen-Datei WEB-INF/index.html eingestellt haben. Elemente, die sich im WEB-INF-Ordner befinden, sind nur für den Servlet-Container sichtbar und außerhalb des Containers nicht zugänglich.

Dies funktioniert nicht, da index.html hinter WEB-INF versteckt ist. Darüber hinaus, wenn mit WEB-INF arbeitet, ist es üblich, sie aus der Wurzel der Anwendung zuzugreifen, wie /WEB-INF/file.html:

resource_handler.setWelcomeFiles(new String[]{ "WEB-INF/index.html" }); 

Wenn Sie nur die Datei index.html als umfassen Begrüßungsdatei, und auch sicherstellen, dass index.html in der Wurzel Ihrer Anwendung ist, sollte der Jetty Server in der Lage sein, es zu finden:

resource_handler.setWelcomeFiles(new String[]{ "index.html" }); 

Seien sie sicher, dass Jetty neu starten, nachdem diese Änderung, da die Anwendung benötigt, um diese Informationen neu zu laden.

Wenn Sie eine neue Webanwendung auf einem Server konfigurieren, ist es im Allgemeinen eine gute Idee, Ihre Protokollierungsebenen auf den höchsten Stand zu bringen. Der Server und die Frameworks protokollieren normalerweise auf niedrigeren Ebenen, sodass sie nicht mit Anwendungsprotokollen interferieren. In diesem Fall müssen Sie jedoch feststellen, auf welche Ressourcen der Servlet-Container zugreifen soll, wenn Sie localhost: 8080 in Ihrem Browser laden.

Um weiter zu klären, ist die Java-Methode ResourceHandler.setWelcomeFiles die gleiche wie die Konfiguration des Servers via Web.xml in nicht eingebetteter Jetty, den folgenden XML-Eintrag mit:

<welcome-file-list> 
      <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

Es gibt einige Beispiele und weitere Informationen auf den Eclipse Wiki Page on Embedding Jetty, sollten Sie sie für mehr Orientierung zu überprüfen.

Dateistruktur eingebetteten Jetty 6:

Hier ist ein Beispiel Dateistruktur einer Kopie von eingebetteten Jetty, die ich habe. Beachten Sie, dass sich die index.html im Stamm befindet, direkt neben src:

+0

Dank für den Vorschlag für die Änderung der Protokollierung Ebenen, auch danach ändere, wenn ich localhost: 8080 schreibe, sehe ich jetzt die Verzeichnisstruktur meiner Code-Basis, wenn ich auf src/WEB-INF-Ordner klicke, kann ich die HTML-Seite sehen, die ich erstellt habe. Ich werde die Frage mit den Protokollmeldungen aktualisieren, indem ich die Protokollierungsstufen – bhavs

+1

in Ordnung erhöhe. Verschieben Sie index.html in den gleichen Ordner wie src - also sind sie Geschwister. Ihre index.html Datei ist 2 Ebenen tiefer als bei Jetty. Auch die Tatsache, dass WEB-INF sichtbar ist, legt nahe, dass keine der Konfigurationsdateien etwas unternimmt, da der Container diese normalerweise standardmäßig ausblendet. Aber das ist in Ordnung, da Sie programmgesteuert statt mit XML-Dateien konfigurieren ... – jmort253

+0

Danke für Ihren Vorschlag das half, kann ich die Seite jetzt ansehen – bhavs

Verwandte Themen