如何在不使用 tomcat 的情况下运行 jersey

编程入门 行业动态 更新时间:2024-10-26 12:29:29
本文介绍了如何在不使用 tomcat 的情况下运行 jersey-server webservice server的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

这是我第一次处理网络服务.简单地说,我需要从 jersey web 服务客户端(在用 javascript 实现的网页内)向我的一个 maven 模块中的 jersey 服务发送一个发布请求.

This is my first time dealing with web-services. Simply, I need to send a post request from jersey web service client (inside a webpage implemented in javascript) to a jersey service which is in one of my maven modules.

正如我所说,我已经在我的一个 maven 模块中创建了 jersey-server,并且我想在开始执行客户端之前以某种方式运行它(我不知道如何运行 Web 服务程序.).通过在网上搜索,我看到了很多例子,但都是使用tomcat.所以我的第一个问题是我是否需要使用 tomcat(或类似的东西)才能运行 Web 服务?其次,下面我分享了我的 jersey-server 模块.我怎么能开始运行它?

As I said I've created jersey-server within one of my maven modules and I would like to run it somehow (I do not know how to run a web service program.) before starting client side of my implementation. Through searching on the web, I saw lots of examples but all of them was using tomcat. So my first question is that do I need to use tomcat (or something like this ) in order to run a web service ? Secondly, below I shared my jersey-server module. How could I start to run it ?

package com.exampleProject.rest; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.List; @Path("/test") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public class SiderRecommender { @POST @Path("/functiontest") public List<Recommendation> sampleFunction() { // return something here. I removed it for simplicity. } }

推荐答案

您没有在已安装的 Web 服务器上运行 Jersey 应用程序.您可以在 嵌入式 服务器中运行它,这意味着服务器以独立模式运行,具有普通的 main 方法.

You don't have to run a Jersey app in an installed web server. You can run it in an embedded server, meaning a server that runs in standalone mode with a normal main method.

如果您使用 Maven,并且熟悉创建 Maven 原型,则可以使用 jersey-quickstart-grizzly2 原型

If you are using Maven, and you are familiar with creating Maven archetypes, you can use the jersey-quickstart-grizzly2 archetype

  • 来自命令行
  • 来自 Eclipse(使用 jersey-quickstart-grizzly2 除外)
  • 来自 Netbeans(见答案底部.也使用 jersey-quickstart-grizzly2).
  • From Command line
  • From Eclipse (except use jersey-quickstart-grizzly2)
  • From Netbeans (See bottom of answer. Also use jersey-quickstart-grizzly2).

这是您通过原型项目免费获得的一切.

This is everything you get for free with the archetype project.

Main.java

package com.underdog.jersey.grizzly; import org.glassfish.grizzly.http.server.HttpServer; import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; import org.glassfish.jersey.server.ResourceConfig; import java.io.IOException; import java.URI; /** * Main class. * */ public class Main { // Base URI the Grizzly HTTP server will listen on public static final String BASE_URI = "localhost:8080/myapp/"; /** * Starts Grizzly HTTP server exposing JAX-RS resources defined in this application. * @return Grizzly HTTP server. */ public static HttpServer startServer() { // create a resource config that scans for JAX-RS resources and providers // in com.underdog.jersey.grizzly package final ResourceConfig rc = new ResourceConfig().packages("com.underdog.jersey.grizzly"); // create and start a new instance of grizzly http server // exposing the Jersey application at BASE_URI return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc); } /** * Main method. * @param args * @throws IOException */ public static void main(String[] args) throws IOException { final HttpServer server = startServer(); System.out.println(String.format("Jersey app started with WADL available at " + "%sapplication.wadl Hit enter to stop it...", BASE_URI)); System.in.read(); server.stop(); } }

MyResource.java

package com.underdog.jersey.grizzly; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; /** * Root resource (exposed at "myresource" path) */ @Path("myresource") public class MyResource { /** * Method handling HTTP GET requests. The returned object will be sent * to the client as "text/plain" media type. * * @return String that will be returned as a text/plain response. */ @GET @Produces(MediaType.TEXT_PLAIN) public String getIt() { return "Got it!"; } }

MyResourceTest.java

package com.underdog.jersey.grizzly; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import org.glassfish.grizzly.http.server.HttpServer; import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; public class MyResourceTest { private HttpServer server; private WebTarget target; @Before public void setUp() throws Exception { // start the server server = Main.startServer(); // create the client Client c = ClientBuilder.newClient(); // uncomment the following line if you want to enable // support for JSON in the client (you also have to uncomment // dependency on jersey-media-json module in pom.xml and Main.startServer()) // -- // c.configuration().enable(new org.glassfish.jersey.media.json.JsonJaxbFeature()); target = c.target(Main.BASE_URI); } @After public void tearDown() throws Exception { server.stop(); } /** * Test to see that the message "Got it!" is sent in the response. */ @Test public void testGetIt() { String responseMsg = target.path("myresource").request().get(String.class); assertEquals("Got it!", responseMsg); } }

pom.xml - 我自己添加了 jersey-media-json-jackson 和 maven-assembly-plugin,这样你可以创建单个可运行的 jar 文件.

pom.xml - I added the jersey-media-json-jackson and the maven-assembly-plugin myself, so that you can create a single runnable jar file.

<project xmlns="maven.apache/POM/4.0.0" xmlns:xsi="www.w3/2001/XMLSchema-instance" xsi:schemaLocation="maven.apache/POM/4.0.0 maven.apache/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.underdog</groupId> <artifactId>jersey-grizzly</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>jersey-grizzly</name> <dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey</groupId> <artifactId>jersey-bom</artifactId> <version>${jersey.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-grizzly2-http</artifactId> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.3</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.underdog.jersey.grizzly.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>create-archive</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <inherited>true</inherited> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>com.underdog.jersey.grizzly.Main</mainClass> </configuration> </plugin> </plugins> </build> <properties> <jersey.version>2.17</jersey.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project>

通过以上所有,您可以从命令行cd到项目并执行

With all the above, you can cd to the project from the command line and do

  • mvn clean package
  • java -jar target/jersey-grizzly-jar-with-dependencies.jar
  • 应用程序将启动.

    您可以从 localhost:8080/myapp/myresource

    就是这样.注意上面是一个普通的jar项目.所以如果你不知道如何创建原型,你几乎可以将上面的所有内容复制到一个 jar 项目中.

    That's it. Note that the above is a normal jar project. So if you can't follow how to create the archetype, you can pretty much copy everything above into a jar project.

    另请参阅:

    • Jersey 使用 Maven 入门 更多解释.
    • Getting Started with Jersey Using Maven for some more explanation.

    更多推荐

    如何在不使用 tomcat 的情况下运行 jersey

    本文发布于:2023-11-15 04:24:00,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1591123.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:情况下   如何在   tomcat   jersey

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!