1

我正在为我的 Wicket 项目使用嵌入式码头,因为 wicket 不使用 JSP。直到我遇到使用嵌入式码头应用程序服务器创建基本动态 Web 应用程序的任务。

我知道默认情况下码头不支持 JSP。我也知道还有其他几个 Servlet 容器可供选择。但是对于这项任务,我想展示使用 jetty 进行 Web 开发是多么强大和简单,因为我在大型项目中使用它并取得了巨大成功。

我使用 Eclipse Helios 作为我的 IDE,并将以下 jars 添加到我的类路径中

  • junit-4.8.1.jar
  • jetty-6.1.25.jar
  • jetty-management-6.1.25.jar
  • jetty-util-6.1.25.jar
  • log4j-1.2.14.jar
  • servlet-api-2.5-6.1.4.jar
  • jsp-2.1-6.1.5.jar
  • javax.servlet.jar

这是我用来启动嵌入式码头的代码

import org.mortbay.jetty.Connector;

import org.mortbay.jetty.Server;

import org.mortbay.jetty.bio.SocketConnector;

import org.mortbay.jetty.webapp.WebAppContext;

public class Start {

    public static void main(String[] args) throws Exception {
        Server server = new Server();
        SocketConnector connector = new SocketConnector();

        // Set some timeout options to make debugging easier.
        connector.setMaxIdleTime(1000 * 60 * 60);
        connector.setSoLingerTime(-1);
        connector.setPort(8080);
        server.setConnectors(new Connector[] { connector });

        WebAppContext bb = new WebAppContext();
        bb.setServer(server);
        bb.setContextPath("/");
        bb.setWar("WebContent");

        server.addHandler(bb);

        try {
            System.out.println(">>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP");
            server.start();
            System.in.read();
            System.out.println(">>> STOPPING EMBEDDED JETTY SERVER"); 
            // while (System.in.available() == 0) {
            //   Thread.sleep(5000);
            // }
            server.stop();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(100);
        }
    }
}

下面是错误消息

2011-02-11 09:18:12.953:INFO::Logging to STDERR via org.mortbay.log.StdErrLog 启动嵌入式码头服务器,按任意键停止 2011-02-11 09:18:13.000:INFO::jetty -6.1.25 2011-02-11 09:18:13.156:WARN::failed jsp: java.lang.NoClassDefFoundError: javax/servlet/jsp/JspApplicationContext 2011-02-11 09:18:13.171:WARN::failed org .mortbay.jetty.webapp.WebAppContext@76cbf7{/,WebContent}: java.lang.NoClassDefFoundError: javax/servlet/jsp/JspApplicationContext 2011-02-11 09:18:13.171:WARN::Error 启动处理程序 java.lang。 NoClassDefFoundError: javax/servlet/jsp/JspApplicationContext at org.apache.jasper.compiler.JspRuntimeContext.(JspRuntimeContext.java:103) at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:134) at org.mortbay .jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440) 在 org.mortbay。jetty.servlet.ServletHolder.doStart(ServletHolder.java:263) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)在 org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 在 org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1272) 在 org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) 在 org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:489) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 org.mortbay.jetty。 handler.HandlerWrapper.doStart(HandlerWrapper.java:130) at org.mortbay.jetty.Server.doStart(Server.java:224) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 com.pldt.embededserver.Start.main(Start.java:36) 2011-02-11 09:18:13.203:INFO::Started SocketConnector@0.0.0.0:8080

我希望你们能帮助我解决这个问题。我感到非常失望(与码头有关的文档),由于文档差,即使是最简单的任务(如何使用 JSP 运行 Web 应用程序),像这样的非常简单的任务也变得非常混乱和耗时对于想要学习 java 并将 jetty 作为他们的 Servlet 容器的人来说,这特别难。

提前致谢。

4

1 回答 1

3

看起来您只是缺少几个 jar 文件。

不过,让我说,我认为您对文档的抱怨是不合适的。Jetty 与 JSP 配合得很好,独立的 Jetty 和 Jetty-Maven-plugin 都设计为自动包含 JSP 支持。

您选择做的是通过嵌入 Jetty 来构建您自己的服务器,然后您没有包含必要的 jar 文件来使其工作。
嵌入 Jetty 是一个高级用例,文档假设您知道自己在做什么。

现在,关于你遇到的问题......

在 Jetty 发行版中有一个lib/目录。
在那个lib/目录里面有一个jsp-2.1目录。
您需要在类路径中包含该目录中的所有 jar 文件。
你好像不见了

  • jsp-2.1-glassfish-2.1.v20091210.jar
  • jsp-api-2.1-glassfish-2.1.v20091210.jar
  • 蚂蚁1.6.5.jar
  • 核心3.1.1.jar

(它们在 Jetty 6.1.25 中的版本可能略有不同 - 我从 6.1.26 中提取了这些)

于 2011-02-11T04:23:20.973 回答