jax_ws_使用JAX-RS和Jetty创建Web服务和Rest Server

jax_ws

jax_ws

用Java创建WebService非常容易。 将其添加到ServletContainer并将其部署到嵌入式WebServer仅需要几行代码。

让我们创建一个具有两个函数的简单计算器,作为WebService的示例。 计算器将计算任意数量的squareRoot和平方。 它将返回一个简单的JSON响应,其中包含动作名称,输入和输出。

在我们开始之前,这是Gradle配置,您将需要:

apply plugin: 'java'

version = '1.0'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.glassfish.jersey.core', name: 'jersey-server', version: '2.7'
    compile group: 'org.glassfish.jersey.containers', name: 'jersey-container-servlet-core', version: '2.7'
    compile group: 'org.glassfish.jersey.containers', name: 'jersey-container-jetty-http', version: '2.7'
    compile group: 'org.glassfish.jersey.media', name: 'jersey-media-moxy', version: '2.7'
    compile group: 'org.eclipse.jetty.aggregate', name: 'jetty-all', version: '9.3.0.M1'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

这是计算器的代码:

package example;


import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

@Path("calculator")
public class Calculator {
    @GET
    @Path("squareRoot")
    @Produces(MediaType.APPLICATION_JSON)
    public Result squareRoot(@QueryParam("input") double input){
        Result result = new Result("Square Root");
        result.setInput(input);
        result.setOutput(Math.sqrt(result.getInput()));
        return result;
    }

    @GET
    @Path("square")
    @Produces(MediaType.APPLICATION_JSON)
    public Result square(@QueryParam("input") double input){
        Result result = new Result("Square");
        result.setInput(input);
        result.setOutput(result.getInput()*result.getInput());
        return result;
    }

    static class Result{
        double input;
        double output;
        String action;

        public Result(){}

        public Result(String action) {
            this.action = action;
        }

        public String getAction() {
            return action;
        }

        public void setAction(String action) {
            this.action = action;
        }

        public double getInput() {
            return input;
        }

        public void setInput(double input) {
            this.input = input;
        }

        public double getOutput() {
            return output;
        }

        public void setOutput(double output) {
            this.output = output;
        }
    }
}

注释确定REST动作的类型将被施加到该方法@GET@PUT@Path注释确定该请求的URI和@Produces注释确定如何响应将被返回。 在我们的例子中,我们选择JSON,所有的转换都可以无缝处理。

为了部署我们的WebService,我们需要一个将要使用Jersey的ServletContainer和一个我们可以将要使用Jetty的容器放入其中的WebServer。

这是RestServer的代码:

package example;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;


public class RestServer {
    public static void main(String[] args) throws Exception {
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");

        Server jettyServer = new Server(8080);
        jettyServer.setHandler(context);

        ServletHolder jerseyServlet = context.addServlet(
                org.glassfish.jersey.servlet.ServletContainer.class, "/*");
        jerseyServlet.setInitOrder(0);

        jerseyServlet.setInitParameter(
                "jersey.config.server.provider.classnames",
                Calculator.class.getCanonicalName());

        try {
            jettyServer.start();
            jettyServer.join();
        } finally {
            jettyServer.destroy();
        }
    }
}

运行RestServer之后,您将可以使用此URL对其进行测试。

  • http:// localhost:8080 / calculator / squareRoot?input = 16

从IntelliJ运行查询的一种非常不错的方法是使用内置的REST Client,可以在工具菜单下找到它。

屏幕截图2015-03-09 at 15.40.00

当您运行REST客户端时,您将收到以下响应:

屏幕截图2015年3月9日在15.41.33

这是测试RESTful服务器的一种非常简单的方法。

翻译自: https://www.javacodegeeks.com/2015/03/creating-web-services-and-a-rest-server-with-jax-rs-and-jetty.html

jax_ws

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值