使用嵌入式码头创建一个Web界面

我是网站开发的新手,并使用嵌入式码头。下面介绍的源代码是使用eclipse IDE开发的。 我必须以编程方式启动码头服务器,我没有通过命令行启动它的选项。它需要是一个非常轻量级的Web界面,因为它将从低内存/处理速度的系统启动。

我在ECLIPSE中开发了以下目录结构

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

Agent Management Interface

    
  1. Start Platform
  2. Show Agent Status
  3. Create Dummy Agent
  4. Intiate Request Message
  5. Stop agent
  6. Stop Platform
    
Enter option :

<input name="option_selector" type="submit" value="option_selector" /> </body>

web.xml文件是包含欢迎文件列表的常用文件。 当我运行服务器并启动 localhost:8080在Web浏览器中,我收到一个404错误我不确定我需要添加到web.xml文件或web.xml文件的引用在HelloWorld.java主目录中不正确方法。

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

我在classpath中包含了server-api.jar文件和jetty.jar文件,并没有使用Eclipse的Maven插件。

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
5
额外 编辑
意见: 1
@abhishek bose我可以看到目录结构,只有当我输入localhost:8080/src/WEB-INF时,我可以从index.html页面看到html页面
额外 作者 bhavs,
如果你输入文件的整个路径,它是否仍然给你错误?
额外 作者 BOSS,

1 答案

您已将您的欢迎文件设置为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方法与使用以下XML条目在非嵌入式Jetty中通过web.xml配置服务器相同:

    
            index.html
    

Eclipse Wiki页面上嵌入码头中有一些示例和更多文档,请务必检查出来以获得更多指导。

嵌入式Jetty 6的文件结构

以下是我拥有的嵌入式Jetty副本的示例文件结构。请注意,index.html位于根目录中,紧邻src:

build.properties*  index.html*  README.textile*  src/   war/
build.xml*         licenses/    server/          test/  WEB-INF/
2
额外
感谢您的更改日志记录级别的建议,即使在此更改后,当我键入localhost:8080时,我现在可以看到我的代码库的目录结构,当我单击src/WEB-INF文件夹时,我可以看到我拥有的html页面创建。我将用增加日志记录级别的日志消息更新问题
额外 作者 bhavs,
感谢您的建议,我现在可以查看该页面
额外 作者 bhavs,
好。将index.html移动到与src相同的文件夹 - 因此它们是兄弟姐妹。您的index.html文件比Jetty正在查看的层级深两级。此外,WEB-INF可见的事实表明,没有任何配置文件正在做任何事情,因为容器通常默认隐藏这些文件。但是没关系,因为您是以编程方式配置而不是使用XML文件。
额外 作者 jmort253,
你太客气了。祝你好运! :)
额外 作者 jmort253,