将Jetty作为Servlet容器嵌入 [英] Embedding Jetty as a Servlet Container

查看:157
本文介绍了将Jetty作为Servlet容器嵌入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Tomcat来为我的Java Servlet提供服务,这对我来说更有用。我只需要服务,单独的Servlet请求,没有静态内容,也不需要JSP等。所以我一直在寻找可以嵌入我的应用程序的Servlet容器。我觉得如果剥离Jetty并单独使用它作为Servlet容器,它可以更具可扩展性并占用很小的内存,[我不需要Jetty的'Web Server'和其他部件]。所以我有几个问题,

I'm using Tomcat to serve my Java Servlets and it's kinda more for me. I just need to serve, Servlet Requests alone, no static content, neither JSP, etc. So I was looking for a Servlet container that can be embedded in my Application. I felt it if stripped Jetty and use it as a Servlet Container alone, it can be more scalable and occupying small memory footprint, [I don't need Jetty's 'Web Server' and other Parts]. So I've a few questions though,


  1. 如何在我的应用程序代码中嵌入Jetty以单独提供Servlet请求?

  2. 如果我在我的应用程序代码中嵌入Jetty代码,我能否轻松升级Jetty版本?

  3. 我在这里获得了Jetty代码,如果我必须嵌入Jetty的Servlet容器在我的应用程序中,我应该从源代码中使用它,
    http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/snapshot/jetty-9.0.3.v20130506.tar。 bz2
    jetty-9.0.3.v20130506 / jetty-servlet或jetty-9.0.3.v20130506 / jetty-servlets

  1. How do I embed Jetty in my Application Code to serve Servlet Requests alone?
  2. If I embed Jetty code in my Application Code, will I be able to easily upgrade Jetty Versions?
  3. I got the Jetty code here, if I have to embed Jetty's Servlet Container in my App, which one should I use from the source, http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/snapshot/jetty-9.0.3.v20130506.tar.bz2 , jetty-9.0.3.v20130506/jetty-servlet or jetty-9.0.3.v20130506/jetty-servlets

我打算用我的应用程序提供API请求,我正在寻找性能和可伸缩性作为主要约束。当然还有Servlet 3.0支持。

I intend to serve API Requests with my Applications and I'm looking for Performance and Scalability as main constraints. And of course Servlet 3.0 support.

推荐答案

您正在寻找的是在嵌入式场景中运行Jetty。

What you are looking for is running Jetty in an embedded scenario.

有很多例子可以说明如何将实现目标所需的各种部分联系在一起。

There's plenty of examples available showing how to tie together the various pieces you need to accomplish your goals.

查看嵌入式示例在码头源代码树中

为了记录,jetty standalone实际上只是一个嵌入了一些启动和类路径相关引导的jetty。它是相同的代码,并以基本相同的方式组装。

For the record, jetty standalone is really just jetty embedded with a few startup and classpath related bootstraps. It is the same code, and assembled in basically the same way.

既然你说你想要Servlet 3.0,对JSP没兴趣,这很容易设置。 (JSP设置比较棘手,但可能)。

Since you stated you want Servlet 3.0, have no interest in JSP, this is rather easy to setup. (JSP is trickier to setup, but possible).

对于servlet 3.0特定的嵌入,有一个完整的示例项目在github上托管。

For servlet 3.0 specific embedding, there's a complete example project hosted at github.

https://github.com/jetty-project/embedded-servlet-3.0

简而言之,您将拥有以下初始化代码。

In short, you'll have the following initialization code.

package com.company.foo;

import org.eclipse.jetty.annotations.AnnotationConfiguration;
import org.eclipse.jetty.plus.webapp.EnvConfiguration;
import org.eclipse.jetty.plus.webapp.PlusConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.FragmentConfiguration;
import org.eclipse.jetty.webapp.MetaInfConfiguration;
import org.eclipse.jetty.webapp.TagLibConfiguration;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.webapp.WebInfConfiguration;
import org.eclipse.jetty.webapp.WebXmlConfiguration;

public class EmbedMe {
    public static void main(String[] args) throws Exception {
        int port = 8080;
        Server server = new Server(port);

        String wardir = "target/sample-webapp-1-SNAPSHOT";

        WebAppContext context = new WebAppContext();
        // This can be your own project's jar file, but the contents should
        // conform to the WAR layout.
        context.setResourceBase(wardir);
        // A WEB-INF/web.xml is required for Servlet 3.0
        context.setDescriptor(wardir + "WEB-INF/web.xml");
        // Initialize the various configurations required to auto-wire up
        // the Servlet 3.0 annotations, descriptors, and fragments
        context.setConfigurations(new Configuration[] {
                            new AnnotationConfiguration(), 
                            new WebXmlConfiguration(),
                            new WebInfConfiguration(), 
                            new TagLibConfiguration(),
                            new PlusConfiguration(), 
                            new MetaInfConfiguration(),
                            new FragmentConfiguration(), 
                            new EnvConfiguration() });

        // Specify the context path that you want this webapp to show up as
        context.setContextPath("/");
        // Tell the classloader to use the "server" classpath over the
        // webapp classpath. (this is so that jars and libs in your
        // server classpath are used, requiring no WEB-INF/lib 
        // directory to exist)
        context.setParentLoaderPriority(true);
        // Add this webapp to the server
        server.setHandler(context);
        // Start the server thread
        server.start();
        // Wait for the server thread to stop (optional)
        server.join();
    }
}

这篇关于将Jetty作为Servlet容器嵌入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆