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

yizhihongxing

使用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日

相关文章

  • JavaSpringBoot报错“NoClassDefFoundError”的原因和处理方法

    当使用Java的Spring Boot框架时,可能会遇到“NoClassDefFoundError”错误。这个错误通常是由以下原因之一引起的: 缺少依赖项:如果您的应用程序缺少依赖项,则可能会出现此错误。在这种情况下,需要确保所有依赖项都已正确添加。 类路径错误:如果类路径错误,则可能会出现此错误。在这种情况下,需要确保类路径正确。 以下两个实例: 例 1 …

    Java 2023年5月5日
    00
  • 超细致讲解Spring框架 JdbcTemplate的使用

    下面我将为您详细讲解“超细致讲解Spring框架 JdbcTemplate的使用”的完整攻略。 一、什么是JdbcTemplate JdbcTemplate是Spring框架提供的一个非常重要的特性,它是一个基于JDBC(Java数据库连接)的模板类,封装了JDBC的许多繁琐操作,使得开发者可以更加轻松便捷地操作数据库。同时,JdbcTemplate在执行S…

    Java 2023年5月19日
    00
  • 关于SpringBoot单元测试(cobertura生成覆盖率报告)

    下面我详细讲解关于SpringBoot单元测试以及cobertura生成覆盖率报告的攻略。 什么是单元测试 单元测试是一种测试方法,该方法用于测试软件设计的最小单位——单元。在Java中,一个单元通常指的是一个方法。单元测试通常是在开发过程中进行的,以确保代码的每个部分都经过了适当的测试。单元测试通常是在代码完成之前进行,并且可以使用自动化测试工具进行。 S…

    Java 2023年5月19日
    00
  • 如何使用Java调用Linux系统命令

    现在我来详细讲解如何使用Java调用Linux系统命令的完整攻略。 简述 Java是跨平台语言,虽然Java可以调用系统命令,但是由于在不同的操作系统之间,系统命令是不同的,所以Java也不能完全跨平台的调用系统命令。本文主要介绍在Linux系统下,如何使用Java来调用Linux系统命令。 方法一:Runtime.getRuntime().exec() J…

    Java 2023年5月26日
    00
  • 使用Maven中的scope总结

    使用Maven中的scope属性可以控制依赖关系的传递范围。scope有以下属性值: compile 依赖于当前项目的compile周期,该依赖会一直对所有周期都有效。默认值。 provided 只在编译和测试classpath中有用,但运行时不在classpath中。例如,servlet-api依赖可以设置为provided。在打包时不会将依赖项打入输出文…

    Java 2023年5月19日
    00
  • Spring Security动态权限的实现方法详解

    Spring Security动态权限的实现方法详解 什么是动态权限? 在传统的企业应用中,权限被存储在静态的权限表中,着重强调的是用户拥有哪些权限。但是在现实生活中,我们会发现企业的角色是十分复杂的,拥有权限表面看起来是不够的。例如,对于一个CRM系统,管理员可能需要对某些用户进行一些特殊的操作。这种情况下,我们需要实现动态权限,即在运行时动态授权,而不是…

    Java 2023年5月20日
    00
  • 一个用JSP做的日历

    下面我来为您详细讲解“一个用JSP做的日历”的完整攻略。 1. 准备工作 在使用JSP制作日历前,需要准备以下工具和环境: Java Web开发环境(如Apache Tomcat) 文本编辑器(如Notepad++, Sublime Text等) 了解基本的HTML、CSS和JavaScript 2. 创建JSP文件 首先,创建一个JSP文件,并添加HTML…

    Java 2023年6月15日
    00
  • JSP 注释的详解及简单实例

    标题:JSP 注释的详解及简单实例 JSP 注释通常用于在 JSP 页面中描述代码的意图和功能。本文将介绍 JSP 注释的语法和用法,并提供两个示例说明。 JSP 注释的语法 JSP 注释有三种语法:HTML 注释、JSP 注释和 JSP 作家注释。这里我们分别介绍。 HTML 注释 HTML 注释是以 “” 结束的注释,如下所示: <!– 这是 H…

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