在嵌入式Jetty上使用DefaultServlet提供静态html文件

时间:2012-10-23 00:34:53

标签: html static embedded jetty

我正在开发一个需要自包含的项目,所以我决定在我的应用程序中嵌入Jetty。我将提供静态HTML页面,一些JSP页面,并且还将使用一些自定义servlet。我已经找到了一个完美的例子,说明如何设置嵌入式Jetty来完成所有这些(http://thinking.awirtz.com/2011/11/03/embedded-jetty-servlets-and-jsp/),但是,因为这是我第一次使用Jetty并使用JSP页面或servlet,所以我有一些基本问题。

这是代码(如上面链接中所示):

class RunServer {
  public static void main(String args[]) {

    System.out.println("Initializing server...");
    final ServletContextHandler context =
      new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    context.setResourceBase("webapp");

    context.setClassLoader(
        Thread.currentThread().getContextClassLoader()
    );

    context.addServlet(DefaultServlet.class, "/");

    final ServletHolder jsp =
      context.addServlet(JspServlet.class, "*.jsp");
    jsp.setInitParameter("classpath", context.getClassPath());

    // add your own additional servlets like this:
    // context.addServlet(JSONServlet.class, "/json");

    final Server server = new Server(8080);
    server.setHandler(context);

    System.out.println("Starting server...");
    try {
        server.start();
    } catch(Exception e) {
        System.out.println("Failed to start server!");
        return;
    }

    System.out.println("Server running...");
    while(true) {
        try {
            server.join();
        } catch(InterruptedException e) {
            System.out.println("Server interrupted!");
        }
    }
  }
}

我已经添加了一个额外的自定义servlet,但我的工作非常好,但是,我遇到了静态内容的问题(即:HTML文件)。尝试访问它时,我一直收到“找不到文件”错误。我很确定这是因为我不能100%确定放置HTML文件的位置。我假设那行“context.setResourceBase(”webapp“);”是告诉各个servlet在哪里查找文件(即:资源)的行,但是,我不确定“webapp”实际指向的是什么。它是文件夹,类名,实际文件吗?

我非常感谢“webapp”实际上(或指向)的任何帮助,以及将静态文件放在项目中的位置。

谢谢, 哈利

1 个答案:

答案 0 :(得分:3)

webapp是你应该创建的目录,并将你的静态文件放入。:)如果你有一个maven项目,你的项目的根目录就是“src / main / webapp”。

希望有所帮助。

干杯, 托马斯