SSM(四)WebService入门详解

news/2024/7/7 15:39:01 标签: python, java, git

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

前言

webservice这个不知道大家首次接触的时候是怎么理解的,反正我记得我当时第一次接触这个东西的时候以为又是一个XX框架,觉得还挺高大上。然而这一切在之后我使用过后才发现这些全都是YY。
那么webservice到底是什么呢,根据我自己的理解:简单来说就像是一个公开的接口,其他系统不管你是用什么语言来编写的都可以调用这个接口,并可以返回相应的数据给你。就像是现在很多的天气应用,他们肯定不会自己去搞一个气象局之类的部门去监测天气,大多都是直接调用一个天气接口,然后返回天气数据,相关应用就可以将这些信息展示给用户了。
通常来说发布这类接口的应用都是用一两种语言来编写即可,但是调用这个接口应用可能会是各种语言来编写的,为了满足这样的需求webservice出现了。

简单来说webservice就是为了满足以上需求而定义出来的规范。


Spring整合CXF

在Java中实现webservice有多种方法,java本身在jdk1.7之后也对webservice有了默认的实现,但是在我们实际开发中一般还是会使用框架来,比如这里所提到的CXF就有着广泛的应用。
废话我就不多说了,直接讲Spring整合CXF,毕竟现在的JavaEE开发是离不开Spring了。
该项目还是基于之前的SSM进行开发的。

加入maven依赖

第一步肯定是要加入maven依赖:

        <!--cxf-->
        <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.1.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-core -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>3.1.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.1.6</version>
        </dependency>

web.xml配置

接着我们需要配置一个CXF的servlet:

    <!--定义一个cxf的servlet-->
    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/webservice/*</url-pattern>
    </servlet-mapping>

之后只要我们访问webservice/*这个地址就会进入CXF的servlet中。

整合Spring配置

接下来是最重要的一部,用Spring整合CXF:
在这之前我有新建一个CXF的包,如下图:
目录结构
这里有两个主要类
- HelloWorld接口。
- 实现HelloWorld接口的HelloWorldImpl类。
代码如下:
HelloWorld.java

java hljs">package com.crossoverJie.cxf;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
    public String say(String str);
}

其中就只定义了一个简单的say()方法。
HelloWorldImpl.java

java hljs">package com.crossoverJie.cxf.impl;
import com.crossoverJie.cxf.HelloWorld;
import org.springframework.stereotype.Component;
import javax.jws.WebService;
@Component("helloWorld")
@WebService
public class HelloWorldImpl implements HelloWorld {
    public String say(String str) {
        return "Hello"+str;
    }
}

这里就是对say()方法的简单实现。
接下来就是整合Spring了,由于需要使用到CXF的标签,所以我们需要添加额外的命名路径如下:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">


    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    <!-- 自动扫描webService -->
    <context:component-scan base-package="com.crossoverJie.cxf" />
    <!-- 定义webservice的发布接口 -->
    <jaxws:endpoint  implementor="#helloWorld" address="/HelloWorld" </beans>

更加具体的配置可以查看官方给出的文档:http://cxf.apache.org/docs/how-do-i-develop-a-service.html。
#helloWorld指的是我们在HelloWorldImpl类中所自定义的名字,/HelloWorld则是我们需要访问的地址。
之后我们运行项目输入该地址:http://127.0.0.1:8080/ssm/webservice/HelloWorld?wsdl如果出现如下界面:
xml则说明我们的webservice发布成功了。
接下来只需要通过客户端调用这个接口即可获得返回结果了。


总结

以上就是一个简单的webservice入门实例,更多的关于CXF拦截器,客户端调用就没有做过多介绍,后续有时间的话再接着更新。

项目地址:https://github.com/crossoverJie/SSM.git
个人博客地址:http://crossoverjie.top。
GitHub地址:https://github.com/crossoverJie。

转载于:https://my.oschina.net/crossoverjie/blog/725975


http://www.niftyadmin.cn/n/1412864.html

相关文章

linux环境下搭建环境

一.安装JDK 1.首先去官网下载linux版本的JDK 2.将下载好的jdk的压缩包放到linux的opt文件夹下 3.解压缩  tar -xzvf jdk-8u211-linux-x64.tar.gz 4.然后再该目录下输入ls查看文件夹就能看见我们熟悉的jdk1.8.0_211文件了 5.修改etc文件夹下面的profile文件&#xff0c;类似于…

让 Angular 1.x 跟上时代的步伐

本篇技术博客来自有着化腐朽为神奇能力的&#xff0c;Worktile 技术牛人Web 总监 徐海峰 大神的分享~满满的干货&#xff0c;你值得拥有&#xff01;Worktile 的前端构建之路 2013年&#xff0c;那时候 Angular.js 才刚刚兴起&#xff0c;我们大胆了选择了当时看来比较新的技术…

BezierCode 工具使用

概要 今天无意间看到一个视频&#xff0c;发现了一款绘画Bezier 图形绘制并自动生成OC代码的神器&#xff0c; 因此马上先记录下。 之前一直很纠结如果程序员自己去绘制图片&#xff0c;久那么使用bezier 自己去画吗&#xff1f; 答案是&#xff1a;其实这样很不现实的。 点…

elasticsearch7.7安装部署

这里只搭建了一个节点&#xff0c;提供给测试环境使用&#xff0c;暂未考虑ES集群扩容和优化。 ES 7.0 是 2019 年 4 月份发布的&#xff0c;底层是 Lucene 8.0。其他重要特性有&#xff1a; 废除单个索引下多 Type 的支持 ES Security 免费使用 ECK - ES Operator on K8s 新功…

整合梅花雨日历控件,推出.NET版本

转 http://www.cnblogs.com/PiedPiper/archive/2007/01/10/617004.html 喜欢梅花雨的日历控件&#xff0c;利用周末时间整合了该控件。主要功能如下&#xff1a;1.将该控件整合为.NET版本&#xff0c;做成服务器控件&#xff1b; 2.可以设计时显示输入文本框&#xff0c;并可以…

你了解Beyond Compare日志面板嘛

系统日志是记录系统中硬件、软件和系统问题的信息&#xff0c;同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因&#xff0c;或者寻找受到攻击时攻击者留下的痕迹。系统日志包括系统日志、应用程序日志和安全日志。Beyond Compare软件是一款专业级别的文件…

windows下使用cmd命令杀死进程

tasklist 使用以上命令显示当前进程&#xff0c;及其PID等&#xff0c;如图所示 找到我要删除的进程的pid(好像有点费劲&#xff1f;) 出现以下提示 原因&#xff1a;没有管理员权限&#xff0c;使用管理员模式打开 在Windows菜单栏中找到命令提示符-->右键-->以管理员身…

SkyWalking7.0安装部署

1. 安装 8.0版本的UI 改为自定义查询语句&#xff0c;需要配置定制化图表&#xff0c;所以暂时使用7.0版本。 8.x版本后会增加kafka数据传输特性&#xff0c;可以解决异地机房部署问题&#xff0c;目前2020-06暂未发布。 elasticsearch 安装参考&#xff1a;https://blog.csdn.…