5

私はWeb開発と組み込み桟橋の使用の初心者です。以下に示すソースコードは、EclipseIDEを使用して開発されています。Jettyサーバーをプログラムで起動する必要があります。コマンドラインから起動するオプションがありません。メモリ/処理速度の遅いシステムから起動されるため、非常に軽量なWebインターフェイスである必要があります。

ECLIPSEで次のディレクトリ構造を開発しました

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

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は

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

web.xmlファイルは、ウェルカムファイルのリストを含む通常のファイルです。サーバーを実行してWebブラウザーでlocalhost:8080を起動すると、404エラーが発生します。web.xmlファイルに何を追加する必要があるのか​​、またはweb.xmlファイルの参照が正しくないのかわかりません。 HelloWorld.javaメインメソッドで修正します。

ヒント/提案は役に立ちます編集1:

server-api.jarファイルとjetty.jarファイルをクラスパスに含めており、Eclipse用のMavenプラグインを使用していません。

EDIT2:

2012-05-25 14:40:39.253:DBUG:oejs.AsyncHttpConnection:async request (null null)@17160330 org.eclipse.jetty.server.Request@105d88a
2012-05-25 14:40:39.260:DBUG:oejs.Server:REQUEST / on   org.eclipse.jetty.server.nio.SelectChannelConnector$SelectChannelHttpConnection@1db05b2@127.0.0.1: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 org.eclipse.jetty.server.Request@105d88a
2012-05-25 14:40:39.272:DBUG:oejs.AsyncHttpConnection:async request (null null)@17160330 org.eclipse.jetty.server.Request@105d88a
2012-05-25 14:40:39.273:DBUG:oejs.Server:REQUEST /jetty-dir.css on org.eclipse.jetty.server.nio.SelectChannelConnector$SelectChannelHttpConnection@1db05b2@127.0.0.1:8080<->127.0.0.1:55062
2012-05-25 14:40:39.275:DBUG:oejs.Server:RESPONSE /jetty-dir.css  404
4

1 に答える 1

2

ウェルカムファイルをWEB-INF/index.htmlに設定しました。WEB-INFフォルダー内にあるアイテムは、サーブレットコンテナーにのみ表示され、コンテナーの外部からはアクセスできません。

index.htmlはWEB-INFの背後に隠されているため、これは機能しません。さらに、WEB-INFを使用する場合、通常は/WEB-INF/file.htmlなどのアプリケーションのルートからアクセスします。

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

index.htmlファイルのみをウェルカムファイルとして含め、index.htmlがアプリケーションのルートにあることを確認すると、Jettyサーバーはそれを見つけることができるはずです。

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

アプリケーションはこの情報をリロードする必要があるため、この変更を行った後は必ずJettyを再起動してください。

また、サーバー上で新しいWebアプリケーションを構成する場合は、通常、ログレベルを完全に上げることをお勧めします。サーバーとフレームワークは通常、アプリケーションログに干渉しないように、より低いレベルでログを記録します。ただし、この場合、ブラウザにlocalhost:8080をロードするときに、サーブレットコンテナがアクセスしようとしているリソースを確認する必要があります。

さらに明確にするために、ResourceHandler.setWelcomeFiles Javaメソッドは、次のXMLエントリを使用して、埋め込まれていないJettyでweb.xmlを介してサーバーを構成するのと同じです。

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

桟橋の埋め込みに関するEclipseWikiページには、いくつかの例とその他のドキュメントがあります。詳細なガイダンスについては、それらを確認してください。

埋め込まれたJetty6のファイル構造:

これが私が持っている埋め込まれたJettyのコピーのファイル構造の例です。index.htmlがルートのsrcのすぐ隣にあることに注意してください。

build.properties*  index.html*  README.textile*  src/   war/
build.xml*         licenses/    server/          test/  WEB-INF/
于 2012-05-25T06:28:26.897 に答える