使用CXF和Jersey框架来进行Java的WebService编程

使用CXF和Jersey框架进行Java的WebService编程步骤如下:

  1. 配置pom.xml文件,添加CXF和Jersey框架相关的依赖。

    ```

    org.apache.cxf
    cxf-bundle-jaxrs
    3.3.6


    org.glassfish.jersey.core
    jersey-server
    2.30


    org.glassfish.jersey.containers
    jersey-container-servlet-core
    2.30

    ```

  2. 创建实现WebService接口的类和类的实现方法。其中,方法需要用@GET@POST等注解标记,并且也需要注解类@Path指定URL路径。

    ```
    @Path("/helloworld")
    public class HelloWorldServiceImpl implements HelloWorldService {

    @Override
    @GET
    @Path("/sayHello")
    public String sayHello() {
        return "Hello World";
    }
    

    }
    ```

  3. 在web.xml文件中配置CXF和Jersey框架相关的servlet和filter。

    ```

    CXFServlet
    org.apache.cxf.transport.servlet.CXFServlet
    javax.ws.rs.Application com.example.ws.HelloWorldApplication


    CXFServlet
    /services/*


    JerseyServlet
    org.glassfish.jersey.servlet.ServletContainer
    javax.ws.rs.Application com.example.ws.HelloWorldApplication


    JerseyServlet
    /jersey/*


    CXFFilter
    org.apache.cxf.jaxrs.servlet.CXFServletFilter


    CXFFilter
    /services/*


    JerseyFilter
    org.glassfish.jersey.servlet.ServletContainer
    javax.ws.rs.Application com.example.ws.HelloWorldApplication


    JerseyFilter
    /jersey/*

    ```

  4. 创建继承javax.ws.rs.core.Application的类,利用register方法注册WebService实现类并指定URL路径。

    ```
    public class HelloWorldApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(HelloWorldServiceImpl.class);
        return classes;
    }
    
    @Override
    public Set<Object> getSingletons() {
        Set<Object> singletons = new HashSet<Object>();
        singletons.add(new HelloWorldServiceImpl());
        return singletons;
    }
    

    }
    ```

  5. 启动Tomcat服务器,在浏览器中输入以下URL地址,查看WebService是否成功访问。其中,localhost:8080表示Tomcat的访问地址,/services/helloworld/sayHello/jersey/helloworld/sayHello表示不同的WebService访问路径。

    ```
    http://localhost:8080/services/helloworld/sayHello

    http://localhost:8080/jersey/helloworld/sayHello
    ```

示例1:利用CXF和Jersey框架实现计算器WebService

  1. 创建CalculatorService接口。

    ```
    @Path("/calculator")
    public interface CalculatorService {

    @GET
    @Path("/add/{num1}/{num2}")
    public int add(@PathParam("num1") int num1, @PathParam("num2") int num2);
    
    @GET
    @Path("/subtract/{num1}/{num2}")
    public int subtract(@PathParam("num1") int num1, @PathParam("num2") int num2);
    

    }
    ```

  2. 创建CalculatorServiceImpl实现类。

    ```
    public class CalculatorServiceImpl implements CalculatorService {

    @Override
    public int add(int num1, int num2) {
        return num1 + num2;
    }
    
    @Override
    public int subtract(int num1, int num2) {
        return num1 - num2;
    }
    

    }
    ```

  3. HelloWorldApplication中注册CalculatorServiceImpl类。

    Set<Class<?>> classes = new HashSet<Class<?>>();
    classes.add(CalculatorServiceImpl.class);

  4. 启动Tomcat服务器,在浏览器中输入以下URL地址,进行计算器WebService访问。

    ```
    http://localhost:8080/services/calculator/add/1/2

    http://localhost:8080/jersey/calculator/subtract/3/2
    ```

示例2:利用CXF和Jersey框架实现文件上传WebService

  1. HelloWorldApplication中注册FileUploadService类。

    Set<Object> singletons = new HashSet<Object>();
    singletons.add(new FileUploadService());

  2. 创建FileUploadService类,并在类中创建文件上传方法。

    ```
    @Path("/fileupload")
    public class FileUploadService {

    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream,
                               @FormDataParam("file") FormDataContentDisposition fileDetail) {
        String uploadedFileLocation = "C://temp/" + fileDetail.getFileName();
    
        try {
            OutputStream out = new FileOutputStream(new File(uploadedFileLocation));
            byte[] buffer = new byte[1024];
            int bytesread = 0;
    
            while ((bytesread = uploadedInputStream.read(buffer)) != -1) {
                out.write(buffer, 0, bytesread);
            }
    
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        return Response.status(200).entity("File uploaded to : " + uploadedFileLocation).build();
    }
    

    }
    ```

  3. 启动Tomcat服务器,在浏览器中输入以下URL地址,进行文件上传WebService访问。其中,file表示文件参数的名字。

    ```
    POST http://localhost:8080/services/fileupload/upload
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="file"; filename="example.txt"

    [binary data]
    ```

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用CXF和Jersey框架来进行Java的WebService编程 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • JAVA和JAVAC 命令详细介绍

    当我们在使用Java编写程序之后,需要使用Java和Javac命令来进行编译和执行。接下来,我将为大家一一介绍这两个命令,并提供一些示例说明。 1. Java命令 Java命令是一个用于启动Java虚拟机的命令。Java命令用于执行.class文件,并且可以用于执行打包成jar文件的应用程序。使用Java命令执行Java程序,需要保证在Java环境中,配置了…

    Java 2023年5月30日
    00
  • 使用SpringBoot 工厂模式自动注入到Map

    使用SpringBoot工厂模式自动注入到Map的完整攻略 在Spring Boot中,我们可以使用工厂模式将一组相关的类进行组合,并将它们自动注入到Map中。这种方式可以帮助我们更加灵活地管理和使用这些类。本文将详细讲解使用Spring Boot工厂模式自动注入到Map的完整攻略,包括以下内容: 工厂模式的基本概念 Spring Boot中的工厂模式实现方…

    Java 2023年5月15日
    00
  • Java spring mvc请求详情介绍

    Java Spring MVC是一个基于Java的web框架,它可以帮助我们快速的开发web应用程序。在Java Spring MVC中,处理请求的过程分为几个步骤,包括请求的映射、数据绑定、参数验证、业务逻辑处理、响应的渲染等等。 请求的映射 在Spring MVC中,每个请求都有一个对应的处理方法,这个处理方法就是通过@RequestMapping注解来…

    Java 2023年5月16日
    00
  • 详解Java中KMP算法的图解与实现

    “详解Java中KMP算法的图解与实现”的完整攻略主要可以分为以下几个部分: 1. 什么是KMP算法 KMP算法,也称为Knuth-Morris-Pratt算法,是一种字符串匹配算法,用于在一个文本串S内查找一个模式串P的出现位置。它利用字符串自身的特点,避免了像暴力匹配算法中需要从头对比每个字符的情况。 2. KMP算法的实现思路 KMP算法的实现思路可以…

    Java 2023年5月19日
    00
  • java工具类StringUtils使用实例详解

    Java工具类StringUtils使用实例详解 什么是StringUtils StringUtils 是一个Apache Commons Lang库中的工具类,提供一系列处理字符串的静态方法。该类提供了一些我们常用的字符串操作方法,比如字符串为空、字符串不为空或者为null、去除字符串两端的空格等。 StringUtils的导入方式 如需使用StringU…

    Java 2023年5月27日
    00
  • 详解java安全编码指南之可见性和原子性

    详解Java安全编码指南之可见性和原子性 可见性问题 在Java中,可见性问题主要是由于多线程之间的共享变量引起的。当一个线程修改了共享变量,这个变量的值可能会被其他线程所看到,也可能不会被看到,这就是可见性问题。Java提供了关键字volatile和synchronized来解决可见性问题。 volatile关键字 volatile关键字用于修饰共享变量,…

    Java 2023年5月20日
    00
  • spring boot项目快速构建的全步骤

    下面是一份详细的“Spring Boot项目快速构建的全步骤”攻略: 步骤一:创建Spring Boot项目的初始结构 要快速构建Spring Boot项目,我们需要使用Spring Initializr工具来快速创建基于Maven或Gradle构建系统的Spring Boot项目的初始结构。 打开 https://start.spring.io/,选择项目…

    Java 2023年5月15日
    00
  • 21基于java的旅游信息管理系统

    项目背景 根据旅游行业的这种现状,提出解决问题的一个可行性方法,实现了旅游管理的网络化。 项目总体介绍 旅游系统设计分为前后网站和后台管理系统,功能点包含旅游景点信息分类展示、景点详情(地理位置、特色景点概述等)、下单预订等功能;角色分为管理员和普通用户。用户可以对旅游线路及其详细信息进行查询、预定旅游线路等。详细如下: 用户注册,登录 查看和预订旅游路线 …

    Java 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部