5

我是 Web 开发和使用嵌入式码头的新手。下面提供的源代码是使用 eclipse IDE 开发的。我必须以编程方式启动码头服务器,我没有通过命令行启动它的选项。它需要是一个重量极轻的 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 错误在 HelloWorld.java 主方法中正确。

任何提示/建议都会有所帮助 编辑 1:

我在类路径中包含 server-api.jar 文件和 jetty.jar 文件,并且没有使用 Maven 插件进行 Eclipse。

编辑2:

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 文件夹内的项目仅对 servlet 容器可见,在容器外无法访问。

这不起作用,因为 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 时,您需要查看 servlet 容器尝试访问的资源。

为了进一步澄清,ResourceHandler.setWelcomeFiles Java 方法与在非嵌入式 Jetty 中通过 web.xml 配置服务器相同,使用以下 XML 条目:

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

在 Embedding Jetty的 Eclipse Wiki 页面上有一些示例和更多文档,请务必查看它们以获得更多指导。

嵌入式 Jetty 6 的文件结构:

这是我拥有的嵌入式 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 回答