如何将Jetty和Jersey嵌入我的Java应用程序

如何将Jetty和Jersey嵌入我的Java应用程序,java,maven,jetty,embedded-jetty,Java,Maven,Jetty,Embedded Jetty,因此,我试图将jetty嵌入到我的web应用程序中,这样,如果我将其打包为jar,某人就可以运行jar文件,而不必担心配置服务器。但是,我在设置我的主类以便jetty可以访问我的资源类时遇到了一些问题。我看过一些教程,但它们并没有给出我想要的东西。这就是我目前所拥有的 包pojo; 导入org.eclipse.jetty.server.server; 导入org.eclipse.jetty.servlet.DefaultServlet; 导入org.eclipse.jetty.servlet.S

因此,我试图将jetty嵌入到我的web应用程序中,这样,如果我将其打包为jar,某人就可以运行jar文件,而不必担心配置服务器。但是,我在设置我的主类以便jetty可以访问我的资源类时遇到了一些问题。我看过一些教程,但它们并没有给出我想要的东西。这就是我目前所拥有的

包pojo;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.servlet.DefaultServlet;
导入org.eclipse.jetty.servlet.ServletContextHandler;
导入org.eclipse.jetty.servlet.ServletHolder;
公共班机{
公共静态void main(字符串[]args)引发异常{
服务器=新服务器(8080);
ServletContextHandler context=新的ServletContextHandler(ServletContextHandler.NO_会话);
context.setContextPath(“/”);
ServletHolder h=新的ServletHolder(新的DefaultServlet());
h、 setInitParameter(“javax.ws.rs.Application”、“resources.DBCollection”);
addServlet(h,“/*”);
setHandler(上下文);
server.start();
join();
}
}
我试图把它映射到这个类:

包资源;
导入java.util.ArrayList;
导入java.util.List;
导入javax.ws.rs.GET;
导入javax.ws.rs.Path;
导入javax.ws.rs.PathParam;
导入javax.ws.rs.products;
导入javax.ws.rs.core.Context;
导入javax.ws.rs.core.MediaType;
导入javax.ws.rs.core.Request;
导入javax.ws.rs.core.UriInfo;
进口方;
@路径(“/双方”)
公共类数据库集合{
@上下文
UriInfo url;
@上下文
请求;
字符串名;
@得到
@产生({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public List getAllParties()引发异常
{
列表=新的ArrayList();
addAll(DBConnection.getPartyCollection().values());
退货清单;
}
@得到
@路径(“计数”)
@生成(MediaType.TEXT\u PLAIN)
公共字符串getPartyCount()引发异常
{
返回字符串.valueOf(DBConnection.getPartyCollection().size());
}
@路径(“{party}”)
public DBResource getParty(@PathParam(“party”)字符串party)
{
返回新的数据库资源(url、请求、参与方);
}
}
这是我的POM文件:


4.0.0
帕提亚皮
帕提亚皮马文
0.0.1-快照
罐子
mysql
mysql连接器java
5.1.6
com.codahale.metrics
度量核心
3.0.1
泽西岛
泽西服务器
1.17.1
org.eclipse.jetty
jetty服务器
9.0.0.RC0
编译
org.eclipse.jetty
码头servlet
9.0.0.RC0
编译
org.eclipse.jetty
防波堤小艇
9.0.0.RC0
编译
org.eclipse.persistence
日食
2.6.0-快照
oss.sonatype.org
OSS Sonatype分期
https://oss.sonatype.org/content/groups/staging
org.apache.maven.plugins
maven阴影插件
1.6
真的
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
包裹
阴凉处
com.resteasy.Star.Main
一些事情

JETTY 0.0.0.RC0是一个旧的,还不稳定的版本,考虑升级到一个稳定的最终版本,例如
  • 您需要一些将Jax-RS类连接到servlet api的东西。通常通过Servlet或您选择的库的某种初始化来完成。(就你而言,泽西岛)
  • 在您的示例中,您只设置了一个
    DefaultServlet
    来服务静态文件,没有任何配置来使用
    DBCollection
    对象

    对于Jersey,您需要配置
    org.glassfish.Jersey.servlet.ServletContainer
    ,并在您选择的上下文上设置其servlet映射

    示例:

    package.com.example;
    导入org.eclipse.jetty.server.server;
    导入org.eclipse.jetty.servlet.DefaultServlet;
    导入org.eclipse.jetty.servlet.ServletContextHandler;
    导入org.eclipse.jetty.servlet.ServletHolder;
    公共班机
    {
    公共静态void main(字符串[]args)
    {
    服务器=新服务器(8080);
    ServletContextHandler context=新的ServletContextHandler(ServletContextHandler.NO_会话);
    context.setContextPath(“/”);
    setHandler(上下文);
    ServletHolder jerseyServlet=context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class,“/webapi/*”;
    jerseyServlet.setInitOrder(1);
    setInitParameter(“jersey.config.server.provider.packages”、“com.example”);
    ServletHolder staticServlet=context.addServlet(DefaultServlet.class,“/*”);
    staticServlet.setInitParamet
    
    ServletContextHandler sch = new ServletContextHandler();
    sch.setContextPath("/xxx");
    
    TheResource resource = new TheResource();
    ResourceConfig rc = new ResourceConfig();
    rc.register(resource);
    
    ServletContainer sc = new ServletContainer(rc);
    ServletHolder holder = new ServletHolder(sc);
    sch.addServlet(holder, "/*");
    
    Server server = new Server(port);
    server.setHandler(sch);
    server.start();
    server.join();