`

(转)WebService之WSDL和SOAP实例(基于JAVA)

    博客分类:
  • java
 
阅读更多

开发环境:jdk1.6 + Tomcat 6.0.18 + MyEclipse6.0 

首先是使用WSDL协议实现:这里使用XFire 
XFire一个免费、开源的SOAP框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,其原理是以接口反射机制自动取得远程方法的 
WSDL是一个用来描述Web服务和说明如何与Web服务通信的XML语言 

准备:开发之前请先到官网(http://xfire.codehaus.org/Download)下载xfire-distribution-1.2.6.zip并解压缩 

(1)、新建一个Web项目(服务端),名称为XFireWebService,其目的是为了测试WebService服务端 
为工程添加XFire支持的类库,把xfire-1.2.6里lib所有jar和xfire-all-1.2.6.jar拷贝到工程lib里 

(2)、把XFire加载到系统中来,增加web.xml的配置信息 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     
  3.   
  4. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  5.   <servlet>  
  6.     <servlet-name>XFireServlet</servlet-name>  
  7.     <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>  
  8.     <load-on-startup>0</load-on-startup>  
  9.   </servlet>  
  10.   <servlet-mapping>  
  11.     <servlet-name>XFireServlet</servlet-name>  
  12.     <url-pattern>/servlet/XFireServlet/*</url-pattern>  
  13.   </servlet-mapping>  
  14.   <servlet-mapping>  
  15.     <servlet-name>XFireServlet</servlet-name>  
  16.     <url-pattern>/services/*</url-pattern>  
  17.   </servlet-mapping>  
  18.   <welcome-file-list>  
  19.     <welcome-file>index.jsp</welcome-file>  
  20.   </welcome-file-list>  
  21. </web-app>  



(3)、创建Web服务接口,声明该Web服务对外暴露的接口 

Java代码  收藏代码
  1. package com.test.ws;  
  2. import java.util.List;  
  3. /** 
  4.  * <p>Title: IHelloService</p> 
  5.  * <p>Description: 定义接口</p> 
  6.  */  
  7. public interface IHelloService {      
  8.     public String getTestString(String str);      
  9.     public ExceedVO getTestObject(EnterVO vo);    
  10.     public List getTestList(List list);  
  11. }  



(4)、创建Web服务实现类,为Web服务接口提供实现 

Java代码  收藏代码
  1. package com.test.ws;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. /** 
  5.  * <p>Title: HelloServiceImpl</p> 
  6.  * <p>Description: 接口实现</p> 
  7.  */  
  8. public class HelloServiceImpl implements IHelloService {  
  9.       
  10.     @Override  
  11.     public String getTestString(String str) {  
  12.         return "Hello" + str;  
  13.     }  
  14.       
  15.     @Override  
  16.     public ExceedVO getTestObject(EnterVO vo) {  
  17.         ExceedVO revo = new ExceedVO();  
  18.         revo.setDescStr("名称:"+vo.getName()+"年龄:"+vo.getAge());  
  19.         return revo;  
  20.     }  
  21.       
  22.     @Override  
  23.     public List getTestList(List list) {      
  24.         List<EnterVO> users = new ArrayList<EnterVO>();       
  25.         for(int i=0; i<9; i++){  
  26.             EnterVO user = new EnterVO("姓名"+i, i);  
  27.             users.add(user);  
  28.         }  
  29.         return users;  
  30.     }  
  31. }  



(5)、这两个类是具体的业务实现类,对业务方法的具体实现放在里面 

Java代码  收藏代码
  1. package com.test.ws;  
  2. import java.io.Serializable;  
  3. /** 
  4.  * <p>Title: EnterVO</p> 
  5.  * <p>Description: 入参对象</p> 
  6.  */  
  7. public class EnterVO implements Serializable {  
  8.     private static final long serialVersionUID = 1L;      
  9.     private String name;      
  10.         private int age;     
  11.     public String getName() {  
  12.         return name;  
  13.     }     
  14.     public void setName(String name) {  
  15.         this.name = name;  
  16.     }     
  17.     public int getAge() {  
  18.         return age;  
  19.     }     
  20.     public void setAge(int age) {  
  21.         this.age = age;  
  22.     }     
  23.     public EnterVO(String name, int age) {  
  24.         this.name = name;  
  25.         this.age = age;  
  26.     }     
  27.     public EnterVO() { }  
  28. }  
  29.   
  30. package com.test.ws;  
  31. import java.io.Serializable;  
  32. /** 
  33.  * <p>Title: ExceedVO</p> 
  34.  * <p>Description: 出参对象</p> 
  35.  */  
  36. public class ExceedVO implements Serializable {  
  37.     private static final long serialVersionUID = 1L;      
  38.     private String descStr;  
  39.     public String getDescStr() {  
  40.         return descStr;  
  41.     }  
  42.     public void setDescStr(String descStr) {  
  43.         this.descStr = descStr;  
  44.     }  
  45. }  



(6)、在src目录下新建一个META-INF文件夹里包含xfire/service.xml该文件是XFire框架的服务发布文件 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!-- 服务发布文件 -->  
  3. <beans xmlns="http://xfire.codehaus.org/config/1.0">  
  4.     <service> <!-- service标签和它所包含的xml内容为发布成Web服务的POJO提供完整的描述 -->  
  5.         <name>HelloService</name> <!-- Web服务被发布时所采用的唯一名称 -->  
  6.         <namespace>http://test/HelloService</namespace> <!-- Web服务发布时所使用的命名空间 -->  
  7.         <serviceClass>com.test.ws.IHelloService</serviceClass> <!-- Web服务接口类的全名 -->  
  8.         <implementationClass>com.test.ws.HelloServiceImpl</implementationClass> <!-- Web服务实现类的全名 -->  
  9.         <!-- 不需要接口时,把业务写在serviceClass标签中 -->  
  10.     </service>  
  11. </beans>  



(7)、注意:当用到List等集合类型时,需要定义Mapping关系 
必须与接口同名后缀.aegis.xml,而且要与接口同一位置 

Java代码  收藏代码
  1. <mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.   xsi:schemaLocation="http://xfire.codehaus.org/schemas/1.0/mapping.xsd">  
  3.     <!-- XFire可以支持基本类型,但针对集合类型时需要特殊配置 -->  
  4.     <mapping>  
  5.          <method name="getTestList"> <!-- 需要配置的方法名 -->  
  6.             <!-- index="0"代表方法的参数的序号0即第一个参数,componentType属性代表集合参数内包含的类型 -->  
  7.             <parameter index="0" componentType="java.lang.String" />   
  8.             <!-- 配置返回类型,componentType属性代表返回的集合中所包含的类 -->  
  9.             <return-type componentType="com.test.ws.EnterVO" />   
  10.         </method>          
  11.    </mapping>     
  12. </mappings>  

    
web.xml和service.xml都可以通过IDE自动生成,也可以手写 

(8)、到这步webService服务端就基本完成 
部署项目,启动Tomcat,测试一下wsdl,访问http://localhost:8080/XFireWebService/services/HelloService?wsdl 
如果能正确显示wsdl文件,说明刚才的部署成功了!!! 

(9)、再建一个Web项目(客户端),名称为XFireWebClient,其目的是用来调用一个webService服务 
将XFire的库文件拷贝到Web项目的WEB-INF\lib目录下,同时需要将服务器端发布的服务打包发布给客户端,发布给客户端的代码只需要打包接口和参数类即可,实现类不必打包到客户端 
这里发布的jar包名称为IHelloService.jar,里面包含IHelloService、EnterVO、ExceedVO这三个类 

(10)、在这个Web项目里面新建一个Servlet作为测试的Servlet,名称为ClientTestServlet.java 
在web.xml里面配置好这个Servlet后,就可以在Servlet里面写webService调用的代码了 

Java代码  收藏代码
  1. package com.test.ws;  
  2. import java.io.IOException;  
  3. import java.net.MalformedURLException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10. import org.codehaus.xfire.XFire;  
  11. import org.codehaus.xfire.XFireFactory;  
  12. import org.codehaus.xfire.client.XFireProxyFactory;  
  13. import org.codehaus.xfire.service.Service;  
  14. import org.codehaus.xfire.service.binding.ObjectServiceFactory;  
  15. /** 
  16.  * <p>Title: ClientTestServlet</p> 
  17.  * <p>Description: 测试Servlet</p> 
  18.  */  
  19. public class ClientTestServlet extends HttpServlet {  
  20.   
  21.     private static final long serialVersionUID = 1L;  
  22.   
  23.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  24.             throws ServletException, IOException {  
  25.           
  26.         request.setCharacterEncoding("UTF-8");    
  27.         Service serviceModel = new ObjectServiceFactory().create(IHelloService.class);         
  28.         XFire xfire = XFireFactory.newInstance().getXFire();  
  29.         XFireProxyFactory factory = new XFireProxyFactory(xfire);       
  30.         String serviceUrl = "http://localhost:8080/XFireWebService/services/HelloService";  
  31.         IHelloService client = null;  
  32.         try {  
  33.             client = (IHelloService) factory.create(serviceModel, serviceUrl);  
  34.         } catch (MalformedURLException e) {  
  35.             e.printStackTrace();  
  36.         }      
  37.           
  38.         String str = client.getTestString("Beijing");  
  39.         request.setAttribute("str", str);  
  40.           
  41.         EnterVO enterVO = new EnterVO();  
  42.         enterVO.setName("Yaodi");  
  43.         enterVO.setAge(26);  
  44.         ExceedVO vo = client.getTestObject(enterVO);  
  45.         request.setAttribute("vo", vo);  
  46.           
  47.         List<String> al = new ArrayList<String>();   
  48.         al.add("111");   
  49.         al.add("222");  
  50.         al.add("333");  
  51.         List list = client.getTestList(al);  
  52.         request.setAttribute("list", list);       
  53.           
  54.         request.getRequestDispatcher("/result.jsp").forward(request, response);  
  55.     }  
  56.   
  57.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  58.             throws ServletException, IOException {  
  59.         doGet(request,response);  
  60.     }  
  61.       
  62. }  



客户端的web.xml如下所示: 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <servlet>  
  8.     <servlet-name>ClientTestServlet</servlet-name>  
  9.     <servlet-class>com.test.ws.ClientTestServlet</servlet-class>  
  10.   </servlet>  
  11.   <servlet-mapping>  
  12.     <servlet-name>ClientTestServlet</servlet-name>  
  13.     <url-pattern>/ClientTest.do</url-pattern>  
  14.   </servlet-mapping>  
  15.   <welcome-file-list>  
  16.     <welcome-file>ClientTest.do</welcome-file>  
  17.   </welcome-file-list>  
  18. </web-app>  



(11)、注意:XFireWebService项目里的IHelloService.aegis.xml文件,也要放到XFireWebClient项目中来,位置与ClientTestServlet.java同级 

(12)、Servlet返回的结果页面:result.jsp 

Java代码  收藏代码
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  3. <%@ page isELIgnored="false"%>  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  5. <html>  
  6.   <head>  
  7.     <title>测试客户端</title>  
  8.   </head>    
  9.   <body>  
  10.     测试客户端!!!<br>  
  11.     String:${str} <br>  
  12.     Object:${vo.descStr} <br>  
  13.     List:<br>  
  14.     <c:forEach items="${list}" var="list">  
  15.         ${list.name} --- ${list.age} <br>  
  16.     </c:forEach>  
  17.   </body>  
  18. </html>  



(13)、同样将这个Web项目发布,同时启动XFireWebService和XFireWebClient这两个应用,然后在地址栏里面输入http://localhost:8080/XFireWebClient/ 
此时会调用客户端的Servlet,然后调用其doGet方法,如果正常的话,可以看到页面输出结果了(*^__^*) 


问题:在项目中使用XFire发布服务,在本地测试一切正常,但是传到服务器上,发现List的第一个元素是没有内容的,后面的元素内容显示正常, 
通过调试服务端没有问题,是往客户端之间传输时丢失的,目前的解决办法比较2,是在List前面加了一条垃圾数据,故意把List的第一个元素挤下来。 
希望有人能帮我解答!!!谢谢 


 其次是使用SOAP协议实现:有时需要其它语言做服务端,java做客户端,就要用到SOAP获取WebService了
SOAP简单对象访问协议是一种轻量的、简单的、基于 XML 的协议,它被设计成在WEB上交换结构化的和固化的信息 

这里演示的例子服务端和客户端都是java 

首先从网站http://xml.apache.org/soap/index.html下载soap,解压得到soap.war 
把soap.war放到Tomcat\webapps\目录下 

(1)、新建一个Web项目(服务端)名为SoapService 

(2)、编写服务端代码HelloWorldService.java 

Java代码  收藏代码
  1. package HelloWorld;  
  2. /** 
  3.  * <p>Title: HelloWorldService</p> 
  4.  * <p>Description: 服务端</p> 
  5.  */  
  6. public class HelloWorldService {  
  7.     public String getMessage(){  
  8.         return "Hello World!!!";  
  9.     }     
  10.     public String getMessage(String str1, String str2) {   
  11.         return "Hello World! " + str1 + "&" + str2;   
  12.     }   
  13. }  


编写完成后,将HelloWorldService发布jar到Tomcat\lib\目录中 

(3)、SOAP服务的发布 
启动Tomcat自动将soap.war解压,访问http://localhost:8080/soap/admin/,会出现soap的管理页面 
注意:这里会出现错误是因为在Tomcat\lib\目录下缺少sun的mail.jar 
进入Deploy,填写如下信息: 
ID: hello 
Scope: Request 
Methods getMessage 
Provider Type: Java 
Java Provider Provider Class: HelloWorld.HelloWorldService 
Java Provider Static: NO 
确认发布,可以点List查看已发布服务! 

(4)、再建一个Web项目(客户端)名为SoapClient 
为工程增加4个jar文件:xerces、soap、activation、mail 

(5)、在这个Web项目里面新建一个Servlet作为测试的Servlet,名称为HelloWorldClientServlet.java 
在web.xml里面配置好这个Servlet后,就可以在Servlet里面写webService调用的代码了 

Java代码  收藏代码
  1. package HelloWorld;  
  2. import java.io.IOException;  
  3. import java.net.URL;  
  4. import java.util.Vector;  
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServlet;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9. import org.apache.soap.Constants;  
  10. import org.apache.soap.Fault;  
  11. import org.apache.soap.SOAPException;  
  12. import org.apache.soap.rpc.Call;  
  13. import org.apache.soap.rpc.Parameter;  
  14. import org.apache.soap.rpc.Response;  
  15. /** 
  16.  * <p>Title: HelloWorldClientServlet</p> 
  17.  * <p>Description: 测试Servlet</p> 
  18.  */  
  19. public class HelloWorldClientServlet extends HttpServlet {  
  20.     private static final long serialVersionUID = 1L;  
  21.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  22.             throws ServletException, IOException {  
  23.         request.setCharacterEncoding("UTF-8");            
  24.         String endPoint = "http://localhost:8080/soap/servlet/rpcrouter"; //url是固定的,带参数绑定  
  25.         Call call = new Call(); //创建一个RPC Call  
  26.         call.setTargetObjectURI("hello"); //远程的服务名  
  27.         call.setMethodName("getMessage"); //访问方法  
  28.         call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); //设置编码风格         
  29.         //发布带参数的服务  
  30.         Vector params = new Vector();  
  31.         Parameter p1 = new Parameter("name", String.class, "关羽", null);   
  32.         Parameter p2 = new Parameter("name2", String.class, "张飞", null);   
  33.         params.addElement(p1);  
  34.         params.addElement(p2);   
  35.         call.setParams(params);       
  36.         URL url = new URL(endPoint); //SOAP服务的网址,开始发送RPC请求,并返回服务端的应答  
  37.         Response resp = null;  
  38.         try { //检查应答报中文是否有错(有错就打印出错信息,没错就打印返回信息)  
  39.             resp = call.invoke(url, "");  
  40.         } catch (SOAPException e) {  
  41.             e.printStackTrace();  
  42.         }   
  43.         if(resp.generatedFault()){  
  44.             Fault fault = resp.getFault();  
  45.             System.out.println("The Following Error Occured:");  
  46.             System.out.println("Fault Code=" + fault.getFaultCode());  
  47.             System.out.println("Fault String=" + fault.getFaultString());  
  48.         } else {  
  49.             Parameter result = resp.getReturnValue();  
  50.             System.out.println(result.getValue());  
  51.             request.setAttribute("str", result.getValue());  
  52.         }         
  53.         request.getRequestDispatcher("/result.jsp").forward(request, response);       
  54.     }     
  55.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  56.             throws ServletException, IOException {  
  57.         doGet(request,response);  
  58.     }  
  59. }  


客户端的web.xml如下所示: 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <servlet>  
  8.     <servlet-name>HelloWorldClientServlet</servlet-name>  
  9.     <servlet-class>HelloWorld.HelloWorldClientServlet</servlet-class>  
  10.   </servlet>  
  11.   <servlet-mapping>  
  12.     <servlet-name>HelloWorldClientServlet</servlet-name>  
  13.     <url-pattern>/HelloWorldClientServlet.do</url-pattern>  
  14.   </servlet-mapping>  
  15.   <welcome-file-list>  
  16.     <welcome-file>HelloWorldClientServlet.do</welcome-file>  
  17.   </welcome-file-list>  
  18. </web-app>  



(6)、Servlet返回的结果页面:result.jsp 

Java代码  收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  3. <%@ page isELIgnored="false"%>  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  5. <html>  
  6.   <head>  
  7.     <title>SOAP测试客户端</title>  
  8.   </head>  
  9.     
  10.   <body>  
  11.     SOAP测试客户端!!!<br>  
  12.     String:${str} <br>  
  13.   </body>  
  14. </html>  



(7)、运行客户端,测试是否通过 
同时启动SoapService和SoapClient这两个应用,访问http://localhost:8080/SoapClient/ 
应该可以看到返回的内容,则证明配置和测试成功,以后就可以发布自己的SOAP服务了!

分享到:
评论

相关推荐

    神经网络与量子计算的交叉研究.pptx

    神经网络与量子计算的交叉研究.pptx

    非线性端口 MEMS 麦克风的 Simscape 模型.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    用于超声成像和仿真的 MATLAB 工具箱.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    HFI高频注入仿真—matlab.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    北京工商大学上网登陆版源码.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    攻击离开优化器 (ALO)matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    Ruby基于Ruby的MKS rebase脚本 Ruby语言基础

    【Ruby】基于Ruby的MKS rebase脚本 Ruby语言基础 将MKS网盘中其他工程路径下的工程文件批量rebase到目标工程路径。 【Ruby】基于Ruby的MKS rebase脚本 Ruby语言基础

    18.CSGO赛事管理系统的设计与实现-Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档

    18.CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码(含数据库脚本)+开发文档+lw(高分毕设项目) 详细介绍链接:http://t.csdnimg.cn/CDBjW 内容概要: 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

    46.书籍学习平台的设计与实现-Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)论坛

    46.书籍学习平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)论坛,公告,付费专区,免费专区,销售,会员办理,书籍分类 详细设计文档链接:http://t.csdnimg.cn/GSeDN 内容概要: 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

    基于OpenCV+Tensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip

    【资源说明】 基于OpenCVTensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip基于OpenCVTensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip基于OpenCVTensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    AI快速生成原创音乐的平台.txt

    AI快速生成原创音乐的平台.txt

    决斗者算法是一种元启发式优化算法matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    xiuno模板知乎蓝魔改版源码附多个插件.zip

    xiuno模板知乎蓝魔改版源码附多个插件

    学习 C语言 编程语言 中的实敲代码仓库,提升自我的编程思维,编程能力 坚持下去.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    FS-S01059_STEP_01A.zip

    FS-S01059_STEP_01A.zip

    监听自身被卸载.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    基于遗传算法的公交排班系统分析matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于深度强化学习的住宅区电动汽车充电策略

    基于深度强化学习的住宅区电动汽车充电策略是一种用于优化住宅区电动汽车充电行为的算法。面对日益增长的电动汽车数量和有限的充电资源,该算法结合了深度学习和强化学习方法,旨在实现住宅区电动汽车充电的智能调度和管理。

    第5章 s7200编程语言及指令系统.ppt

    第5章 s7200编程语言及指令系统.ppt

    基于遗传算法将电子卡车和电子三轮车路由到街道街区的客户matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics