A. SpringBoot|| Spring Cloud 整合cxf开发webService接口服务端-流程步骤
Apache CXF 是一个开源的 Service 框架,简化用户的 service 开发,基于CXF开发的应用可提供 SOAP 、 XML/HTTP 、 RESTFUL HTTP 或 CORBA 等服务。 CXF 底层页可以使用不同的传输协议,包括 HTTP 、 JMS 或 JBI 等。
自定义注解标注要发布的服务类,发布出去
在接口上添加 @WebService 注解
通过浏览器访问wsdl,wsdl路径即为发布的路径加上?wsdl
http://127.0.0.1:[端口号]/cxf/test?wsdl
可以看到接口就成功了。
到此服务端开发结束!
如果是soapui工具,发送的参数包括xml的:将xml写在 <![CDATA[ 【xml】]]> 里面
B. spring Boot和CXF构建WebService
说起web service最近几年restful大行其道,大有取代传统soap web service的趋势,但是一些特有或相对老旧的系统依然使用了传统的soap web service,例如银行、航空公司的机票查询接口等。
目前就遇到了这种情况,需要在系统中查询第三方提供的soap web service接口,也就是说要将它整合进现有的系统当中。
Spring整合CXF本来十分简单,但是因为使用了 Spring Boot ,不想用以前xml一堆配置的方式,那么能否按照Spring Boot的风格优雅的进行整合呢?
答案当然是肯定的,但是遍查网上几乎没有这方面的资料,折腾过后觉得还是有必要记录一下,虽然它显得非常的简单。
这里主要添加的是cxf的包依赖
这里我创建了一个hello word的测试方法
在业务实现中我们需要如下配置:
参数说明:
targetNamespace 为这是我的接口类所在路径;
endpointInterface 这是我的业务类所在路径;
业务层我们已经创建完成了,但是我们应该如何让webService运行起来呢?
那么到这里呢,我们的所有的步骤基本完成了,启动spring boot 然后再浏览器中输入url: http://localhost:8080/webService/user?wsdl
可以看到有相关的wsdl描述信息输出了,说明服务已经发布了。
那么这里我又要增加注释了,请大家注意,我在最初查询资料,配置demo的时候,启动以后,发布时候总是报404,网上有很多关于什么端口冲突等说法,我试过后,根本不是那一回事,然后我无意中尝试了一下,在url地址处加入工程名,结果,问题解决了。
因此请大家注意:在测试发布服务的时候,你在浏览器中输入的url地址应该是: http://localhost:8080/ 你的工程名/user?wsdl
注:如果大家在搭建过程中遇到了注册CXFServlet的时候,一直报错,则可检查是否添加了 autoconfigure 的配置
启动服务之后,在浏览器上输入 http://localhost:8080/webService/user?wsdl 如果出现如下界面,则代表发布成功了!
服务端我们已经写好了,那么客户端如何弄呢?其实我们可以借助Idea自己生成WebServiceClient,步骤如下:
打开新建一个项目,选择WebServiceClient
输入webService服务端的地址
点击Ok即可生成WebService的客户端
通过如下方法即可调用方法,是不是很简单!
本文使用的是Apache CXF集成,因为spring boot存在的目的就是一个微服务框架,结果又搞个soap框架进去,显得特别不伦不类。正是因为有这么多老项目的重构才会有这么不伦不类的集成。综上,我就选了spring家族的spring web service能够很好的跟spring boot进行集成。
那么我会在下面的一篇文章中为大家说明如何使用spring web service!
码云: https://gitee.com/hrabbit/spring-boot-node
个人博客: www.hrabbit.xin
C. springboot 单元测试(如何使用基于web的单元测试)
spring的测试环境是我们在开发过程中必须要掌握的,测试 有的时候需要测试 cotroller ,有的时候需要测试 service 的内容,和大家分享一下如何在工作中进行测试的,立志工具人。 一起干饭!
本章主要内容
测试是软件开发的重要组成部分,一般情况下,测试的时候,我们只需要模拟请求数据,将数据填充至测试方法中,然后启动spring容器,即可。
类中的内容并不多:这个类只有一个空的测试方法。即便是空的,系统还是会执行必要的检查,确保spring应用上下文能够成功加载。
对于控制器的测试,我们平常并不是很经常用到。它与上面的测试有所不同,没有使用@SpringBootTest标记,而是添加了@WebMvcTest注解。这是Spring boot所提供的特殊测试注解,他会让这个测试在Spring MVC 应用上下文中执行。更具体来讲,它会将HomeControlelr 注册到SpringMVC中,这样的话,我们就可以向他发送请求了。
不要以为每天把功能完成了就行了,这种思想是要不得的,互勉~!
若文章对您有用,请点赞支持哦。
D. 第二章:SpringBoot与JSP间不可描述的秘密
springboot 内部对jsp的支持并不是特别理想,而 springboot 推荐的视图是 Thymeleaf ,对于 java 开发人员来说还是大多数人员喜欢使用jsp,接下来我们来讲解下 springboot 是如何支持jsp的。
整合springboot web项目支持jsp作为视图输出。
恒宇少年在博客整理出来了SpringBoot、ApiBoot、SpringCloud的文章汇总【 SpringBoot基础教程专题 】,【 SpringCloud基础教程专题 】,【 ApiBoot组件使用专题 】
我们使用IntelliJ IDEA 工具来构建项目,首先我们需要创建一个springboot项目,如下图1所示.
点击Next后输入一些项目的基本参数(包名,工程名,打包形式,maven形式构建等),如下图2所示:
点击Next后选择我们预先加入到工程的springboot内置的jar包组件,我们这里选择一个web组件。如下图3所示:
点击 Next 输入项目名称后店家 Finish 既可以完成了项目的构建。新构建的项目目录结构如下图4所示:
可以看到上图中比我们 lessonOne 项目中多出来了一个类文件, ServletInitlalizer ,打开该类我们不难发现它继承了 SpringBootServletInitializer 这个父类,而 SpringBootServletInitializer 这个类是 springboot 提供的 web 程序初始化的入口,当我们使用外部容器(后期文章讲解使用外部tomcat如何运行项目)运行项目时会自动加载并且装配。
实现了 SpringBootServletInitializer 的子类需要重写一个configure方法,方法内自动根据 LessontwoApplication .class的类型创建一个 SpringApplicationBuilder 交付给 springboot 框架来完成初始化运行配置。
我们打开pom.xml(maven配置文件)可以看到我们之前构建项目时已经添加了web模块,而springboot给我们自动添加了 spring-boot-starter-tomcat 配置引入。springboot内部集成了tomcat组件,这里我们就不需要重复引入tomcat组件。
我们先来添加jsp的maven支持,如下图4所示:
我们还需要引入jsp对servlet容器的支持,如下图5所示:
除了上面的jsp,servlet支持以外,如果你还需要在jsp页面使用jstl标签来处理界面逻辑,那么需要引入jstl maven,如下图6所示:
上面配置就是我们本章需要的全部配置,那么我们先来尝试运行下项目是否已经可以正常运行。这里项目运行也可以使用IntelliJ IDEA工具提供的组件来完成,如下图7所示,:
(注意:如果你已经开启了另外一个spring boot项目请先关闭,因为springboot内置的端口号都是8080这样会引起冲突)
点击绿色三角号即可开始运行项目,我们先来尝试下点击后看看控制台输入的日志信息。可以看到项目已经正常运行了,右上角的绿色三角号也变成了重启的按钮,如下图8所示:
项目运行如图9所示:
可以看到项目已经正常运行,但是我们现在还没有配置,创建JSP文件,我们接下来开始配置,创建JSP。
如果是使用过eclipse工具的人肯定知道jsp文件之前是在/webapp/WEB-INF/jsp目录下,那么我们也沿用eclipse的风格。
1. 在main目录下创建webapp文件夹
2. 在webapp下创建jsp文件夹如下图10所示:
3. 修改application.properties文件让springmvc支持视图的跳转目录指向为/main/webapp/jsp,配置如下图11所示:
我们在webapps/jsp目录下创建一个index.jsp用于测试我们的配置是否已经支持了jsp,新建jsp文件如下图12所示:
上面工作我们已经完成了jsp的所有配置,那么接下来我们需要配置springmvc的控制器,我们新建indexController如下图13所示:
可以看到上图我们在IndexController配置文件内添加了index()方法配置了@RequestMapping注解来描述index()方法是一个可以被springmvc管理的请求视图。我们的index()方法返回值这里是"index"。
为什么我们返回"index",还记得上述步骤中配置的application.properties文件的springmvc请求前缀以及后缀,那么当我们访问/index时springmvc就会去找/webapp/WEB-INF/jsp/index.jsp文件。
重启项目我们尝试访问 127.0.0.1:8080/index ,可以看到如下图14的效果,证明已经完成了springboot与jsp的整合:
上述便是我们本章的全部内容,本章主要是讲解了springboot集成jsp作为渲染视图,结合springmvc来转发请求。
本章内容已经上传到码云:
SpringBoot配套源码地址: https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源码地址: https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相关系列文章请访问: 目录:SpringBoot学习目录
QueryDSL相关系列文章请访问: QueryDSL通用查询框架学习目录
SpringDataJPA相关系列文章请访问: 目录:SpringDataJPA学习目录
SpringBoot相关文章请访问: 目录:SpringBoot学习目录 ,感谢阅读!
知识星球 - 恒宇少年
E. Spring boot 中 WebMvcConfigurationSupport 详解
新写了一个简单项目,里面需要提供一个接口给第三方访问,第三方要求的接口响应时间为3s,因此需要对接口进行时间的记录 以下是具体的使用。
实现HandlerInterceptor这个接口
以上两步完成,即完成拦截器的注册。该拦截器会对 /sell_record/** 请求路径进行拦截。
controller测试类
一个简单的拦截器就写完了~
其中用的比较多的是一下三个接口:
静态资源处理
非常重要的提示: Springboot 中只能有一个 WebMvcConfigurationSupport 配置类是真正起作用的,对于这个问题,其实可以通过 implements WebMvcConfigurer 来解决,多个不同的类实现这个接口后的配置都可以正常运行。
具体可参考 [ Spring Boot中只能有一个WebMvcConfigurationSupport配置类
F. SpringBoot---Web Socket(广播式、点对点)
WebSocket为浏览器和服务器提供了全双工异步通信的功能,即浏览器可以向服务段发送消息,服务端也可以向浏览器发送消息,WebSocket需要浏览器的支持,如IE10+、Chrome13+ 。。。等,同时Spring Boot为WebSocket提供了starter pom 。
广播式即服务端有消息时,会将消息发送给所有连接了当前endpoint的浏览器。
到这里,简单的WebSocket就演示完成了,如果有不懂的地方可以看源码
Demo源码
G. springboot2.1.3整合websocket和websocket-security支持跨域连接
springboot整合websocket和websocket-security支持跨域连接
项目地址: https://gitee.com/xuelingkang/spring-boot-demo
完整配置参考com.example.websocket包
所以继承了StompSubProtocolHandler,WebMvcStompEndpointRegistry,这三个类,添加websocket自定义拦截器接口,可以在拦截器中自定义websocket授权决策检查
配置类可以重写这个方法,默认该方法返回false,看方法的名字是关闭同源策略,但是只重写这个方法不能解决跨域的问题,还需要在registerStompEndpoints方法中设置允许的域名,"*"代表所有
如果有误导人的地方,欢迎大神批评指正!
H. 如何在docker中部署springboot的web应用
第一步:搭建springboot的web应用,可在CMD命令行中通过mvn install命令将应用打成jar包:如demo-0.0.1-SNAPSHOT.jar
第二步:将jar包到centos文件系统中,指定目录示例为:/usr/local/demo-0.0.1-SNAPSHOT.jar
第三步:构建docker镜像:此处以docker build方式构建
I. intellij idea 2017 gradle构建spring-boot web项目
第一步 ,选择Spring Initializr 点击 next
第二步 , Type: 选择Gradle Project
第三步 , 这里主要选择Web ,
第四步 , 项目名,目录
第五步 , 自动创建空的根目录文件夹,如果不选择,创建完的项目会没有java文件夹,所以勾选,让它自动创建吧,next
第六步 , 创建 webapp 文件夹 ,这是用来放web相关文件。 也可使用默认文件夹
第七步,点击 + 添加web模块
第八步 , 把两个路径改为我们创建的文件夹, 也可以使用默认文件夹。第一个路径是这web.xml文件的位置
第二个路径是资源路径
第九步,测试程序
RUN
J. SpringBoot+CXF 实现简单的webservice,并支持Basic验证
CXF内置了很多拦截器,大部分默认添加到拦截器链中,有些拦截器也可以手动添加,如CXF的日志拦截器。如果需要自定义拦截器,只要继承AbstractPhaseInterceptor或者AbstractPhaseInterceptor的子类(如AbstractSoapInterceptor)
如果是传统的spring+cxf 项目,拦截器的写法是一样的,只是发布和配置的方法在cxf的配置文件的xml中进行
WSDL 地址: http://localhost:8080/SpringBootDemo_eclipse/soap/ihelloService?wsdl
CXF 自动编译解析的客户端
客户端basic 认证调用