精华内容
下载资源
问答
  • Java Web系统常用的第三方接口

    万次阅读 2010-12-27 10:35:00
    1、Web Service接口 1.1 接口方式说明和优点 1.2 重要概念 1.3 开发Web Service接口和调用测试 1.4 开发实例 2、js接口 2.1 接口方式说明和优缺点 2.2 开发实例 3、http接口 3.1 接口方式说明和优...

    1.    Web Service 接口

    1.1 接口方式说明和优点

    在笔者的开发生涯中,当作为接口提供商给第三方提供接口时,以及作为客户端去调用第三方提供的接口时,大部分时候都是使用 Web  Service接口, Web Service作为接口使用广泛的原因,与它的特点息息相关。

    Web Service的主要目标是跨平台的可互操作性,为了实现这一目标, Web Service 完全基于 XML(可扩展标记语言)、 XSD XML Schema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。因此使用 Web Service有许多优点:

    1.1.1 跨防火墙的通信

    如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器。要调用 Web Service,可以直接使用 SOAP客户端,然后把它和应用程序连接起来。不仅缩短了开发周期,还减少了代码复杂度,并能够增强应用程序的可维护性。
       
    1.1.2 跨程序语言的应用程序集成

    在企业的各种应用系统中,很多系统不是使用相同的语言编写的,例如有的使用 Java,有的使用 php C# asp。当各种系统之间需要交互时,可使用各种语言都通用的 WSDL定义接口,对外将需要的接口暴露给指定的客户。

    XML Web services 提供了在松耦合环境中使用标准协议( HTTP XML SOAP WSDL)交换消息的能力。消息可以是结构化的、带类型的,也可以是松散定义的。
           1.1.3 软件和数据重用

    Web Service在允许重用代码的同时,可以重用代码背后的数据。使用 Web Service,再也不必像以前那样,要先从第三方购买、安装软件组件,再从应用程序中调用这些组件;只需要直接调用远端的 Web Service就可以了。

    另一种软件重用的情况是,把好几个应用程序的功能集成起来,通过 Web Service “暴露出来,就可以非常容易地把所有这些功能都集成到你的门户站点中,为用户提供一个统一的、友好的界面。

    可以在应用程序中使用第三方的 Web Service 提供的功能,也可以把自己的应用程序功能通过 Web Service 提供给别人。两种情况下,都可以重用代码和代码背后的数据。

    1.2 重要概念

     1.2.1 何为Web Service
            Web Service是构建互联网分布式系统的基本部件,它是一个应用程序,它向外界暴露出一个能够通过 Web 进行调用的 API 。这就是说,别人能够用编程的方法通过 Web 来调用这个应用程序。

    它通过标准通信协议,在互联网上以服务的方式发布有用的程序模块,目前大部分是用 SOAP作为通信协议。

     它提供一份详细的接口说明书,来帮助用户构建应用程序,这个接口说明书叫 WSDL Web服务描述语言, Web Service Description Language)。

    通常已发布的 Web Service要注册到管理服务器,便于使用者查询和使用。这个是通过 UDDI 统一描述、发现和集成, Universal Discovery Description and Integration)来完成的。  
           1.2.2 何为 SOAP 协议?

    SOAP定义 SOAP消息的 XML格式( XML格式),如果你用一对 SOAP标记( SOAP Elements)把 XML文档括起来,那么这个就是一个 SOAP消息。  

    SOAP规范还定义了怎样用 XML来描述程序数据,怎样执行 RPC 远程过程调用, Remote Procedure Call)。大多数 SOAP解决方案都支持 RPC-style应用程序,因为很多程序员已对 DCOM CORBA熟悉。 它还支持 Document-style应用程序( SOAP消息只包含 XML文本信息)。 Document-style应用程序有很好的灵活性,所以很多用 RPC很难构建的 Web Service用这种方式构建。  

    最后 SOAP规范还定义了 HTTP消息是怎样传输 SOAP消息的。这并不代表 SOAP只能用 HTTP来作为传输协议, MSMQ SMTP TCP/IP都可以做 SOAP的传输协议。

    安全性对于应用程序来说是很重要的。那么 SOAP的安全性如何呢?对于把 HTTP作为传输协议的 SOAP来说是没有问题的,因为 HTTP协议已经有很好的安全构架。那么用其他传输协议会出现安全问题吗?这方面也已经有相关规范

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/ws-security.asp )。
         1.2.3 何为 WSDL

    WSDL是一种 XML文档,它定义 SOAP消息和这些消息是怎样交换的。 IDL Interface Description Language,接口描述语言)是用于 COM CORBA的, WSDL是用于 SOAP的。 WSDL是一种 XML文档,所以可以阅读和编辑,但很多时候是用工具来创建、由程序阅读。

    举个实例,当读者需要使用第三方的 Web Service构建应用程序。你可以向接口提供商索取使用 WSDL文档,在该文档中详细的说明了各个方法的方法名、参数和参数类型等信息。在 Java等编程语言的 IDE(例如 My Eclipse)中,可以根据 Web Servie生成对应的测试代码,稍微修改一下即可。
       
    1.2.4 何为 UDDI

    UDDI可以比喻成电话本,电话本里记录的是电话信息,而 UDDI记录的是 Web Service信息。可以不把 Web Service注册到 UDDI。但如果要让全球的人知道这个 Web Service,最好还是注册到 UDDI  

    UDDI目录说明文件也是一个 XML文档,它包括三个部分。“白页( White Paper)”说明提供 Web Service的公司(人)信息,比如说名称、地址和联系方式等等。“黄页( Yellow Paper)”说明 UDDI目录的分类,比如说金融、服务和印刷等等。“绿页( green Paper)”说明接口( Web Service 提供的)的详细信息。  UDDI提供多种查询方式,来帮助你找到需要的 Web Service。如果你查询与财务有关的 Web Service,那么 UDDI会提供详细的信息。
       1
    .2.5 何为 XML

    XML Extensible Markup Language)即可扩展标记语言,它与 HTML一样,都是 SGML(Standard Generalized Markup Language,标准通用标记语言 )。在 Web Service接口中, WSDL UDDI目录文件都是一种 XML文档, XML解决了数据表示的问题。
       
    1.2.6 何为 XSD

    XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整型数到底代表什么? 16位, 32位,还是 64位?

    W3C制定的 XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。 Web Service就是用 XSD来作为其数据类型系统的。

    1.3 开发 Web Service 接口和调用测试

    Java IDE环境中开发 Web Service接口,以及如何调用第三方的 WSDL文档如何进行接口测试的参考文章详见:

    1)《 使用XFire+Spring 构建 Web Service (一) ——helloWorld 》:

    http://www.blogjava.net/amigoxie/archive/2007/09/26/148207.html

    2)《 使用XFire+Spring 构建 Web Service (二) 》:

          http://www.blogjava.net/amigoxie/archive/2007/09/28/149074.html

    3)《 根据wsdl 生成对应的 Java 代码进行接口测试(一) 》:

          http://www.blogjava.net/amigoxie/archive/2009/11/20/303038.html

    1.4 开发举例

    1.4.1 作为提供商提供hello world的接口
       参见:《
    使用XFire+Spring 构建 Web Service (一) ——helloWorld 》:

    http://www.blogjava.net/amigoxie/archive/2007/09/26/148207.html
       1.4.2
    作为提供商提供用户信息查询接口

       参见:《 使用XFire+Spring 构建 Web Service (二) 》:

       http://www.blogjava.net/amigoxie/archive/2007/09/28/149074.html

    2.    js 接口

    2.1 接口方式说明和优缺点

    在开发的过程中,也遇到过需要调用第三方接口的情况,例如笔者在完成的一个股票查询的小 demo中,就需要调用新浪提供的股票查询的 js接口。另外有一次,在系统中使用了第三方的 GIS系统,调用的也是 js接口。 因为调用 js接口的门槛很低,所以有的接口供应商会提供多种调用接口的方式,例如 Web Servivce接口和 js接口等。
       对于浏览器来说, script标签的 src属性所指向资源就跟 img标签的 src属性所指向的资源一样,都是一个静态资源,浏览器会在适当的时候自动去加 载这些资源,而不会出现所谓的跨域问题。这样我们就可以通过该属性将要访问的数据对象引用进当前页面而绕过 js跨域问题。当然,前提是接口必须是返回一段 js脚本,如一个 json对象数组定义的脚本:

    modlist = [
    {"modname": "mod1", "usernum": 200, "url": "/widget/info/1"},
    {"modname": "mod2", "usernum": 300, "url" : "/widget/info/2"},

    ];

    script标签也有一定的局限性,并不能解决所有 js跨域问题。 script标签的 src属性值不能动态改变以满足在不同条件下获取不同数据的需求, 更重要的是,不能通过这种方式正确访问以 xml内容方式组织的数据。

    2.2 开发举例

       2.2.1  新浪股票查询的js接口
      功能说明
    stockDetail.jsp根据传入的 stockId参数,调用新浪股票查询提供的 js接口返回股票结果信息,并解析返回结果,将股票信息在页面展示出来。

    stockDetail.jsp代码参考如下:

    <% @ page language = " java "  contentType = " text/html; charset=UTF-8 "  pageEncoding = " UTF-8 " %>
    <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
    <%
    String  stockId  =  request.getParameter( " stockId " );
    if  (stockId  ==   null ) {
        stockId 
    =   " 000001 " ;
    }
    %>
    < html >
      
    < head >
        
    < meta  http-equiv ="Content-Type"  content ="text/html; charset=UTF-8"   />
        
    < title > 股票查询结果 </ title >
        
    < link  href ="<%=request.getContextPath() %>/css/style.css"  type ="text/css"  rel ="stylesheet" >
        
    < script  type ="text/javascript"  src ="http://hq.sinajs.cn/list=s_sh<%=stockId %>"  charset ="gb2312" ></ script >
            
    < meta  http-equiv ="pragma"  content ="no-cache" >
            
    < meta  http-equiv ="cache-control"  content ="no-cache" >
            
    < meta  http-equiv ="expires"  content ="0" >
      
    </ head >
        
    < body  onload ="" >
            
    < div  class ="bodyDiv" >
                
    < table >
                    
    < tr >
                        
    < td  colspan ="2"  valign ="bottom"  align ="left"  
                            style
    ="width:176px; background: url(<%=request.getContextPath() %>/images/line2_bg.gif) repeat-x;border-bottom: 1px solid #b0bec7;"
                            height
    ="19" >
                            
    < span  class ="titleFont" >
                        
    < font  class ="newTitleFont" >< b > 股票查询结果 </ b ></ font >
                            
    </ span >
                        
    </ td >
                    
    </ tr >
                    
    < tr >
                        
    < td > 指数名称:  </ td >
                        
    < td >< span  id ="stockName" > &nbsp; </ span ></ td >
                    
    </ tr >
                    
    < tr >
                        
    < td > 当前点数:  </ td >
                        
    < td >< span  id ="currentPoint" > &nbsp; </ span ></ td >
                    
    </ tr >
                    
    < tr >
                        
    < td > 当前价格:  </ td >
                        
    < td >< span  id ="currentPrice" > &nbsp; </ span ></ td >
                    
    </ tr >
                    
    < tr >
                        
    < td > 涨跌率:  </ td >
                        
    < td >< span  id ="ratio" > &nbsp; </ span ></ td >
                    
    </ tr >
                    
    < tr >
                        
    < td > 成交额(w):  </ td >
                        
    < td >< span  id =turnVolume > &nbsp; </ span ></ td >
                    
    </ tr >
                    
    < tr >
                        
    < td  colspan ="2"  valign ="bottom"  align ="right"  
                            style
    ="width:176px; background: url(<%=request.getContextPath() %>/images/line2_bg.gif) repeat-x;border-bottom: 1px solid #b0bec7;"
                            height
    ="19" >
                            
    < span  class ="titleFont" >
                                
    < font  class ="newTitleFont" >< b > 1日K线 &nbsp;&nbsp;&nbsp; 0返回 </ b ></ font >
                            
    </ span >
                        
    </ td >
                    
    </ tr >
                
    </ table >
            
    </ div >
            
    < script  language ="javascript" >
            
    <!--
            
    //  查询结果的格式为:指数名称,当前点数,当前价格,涨跌率,成交量(手),成交额(万元)
             //  解析字符串
             var  stockValue  =  hq_str_s_sh <%= stockId  %> ;
            
    var  stockArray  =  stockValue.split( " , " );
            document.getElementById(
    " stockName " ).innerText  =  stockArray[ 0 ];
            document.getElementById(
    " currentPoint " ).innerText  =  stockArray[ 1 ];
            document.getElementById(
    " currentPrice " ).innerText  =  stockArray[ 2 ];
            document.getElementById(
    " ratio " ).innerText  =  stockArray[ 3 ];
            document.getElementById(
    " turnVolume " ).innerText  =  stockArray[ 5 ];
            
    -->
            
    </ script >
      
    </ body >
    </ html >

    带上 6 stockId参数(例如:值为 000002),实时的 A股(代号为 s_sh000002)查询结果如下图所示:
      

       在文件头部可看到如下一句引入了新浪提供的 js

    < script  type ="text/javascript"  src ="http://hq.sinajs.cn/list=s_sh<%=stockId %>"  charset ="gb2312" ></ script >

       用如下语句获得通过接口查询到的数据:

    var stockValue = hq_str_s_sh <% = stockId  %> ;

       2.2.2 对外提供js接口

     

    对外提供js接口只需要通过<script src="..." type="..."/>请求的地址返回的是JSON字符串即可。
       在本实例中,用到了笔者一篇
    JSON文章的实例(《 JSON知识总结入门篇》: http://www.blogjava.net/amigoxie/archive/2010/09/25/332832.html ),在上面进行了小幅修改,简便起见,没有创建任何的Java类,提供的对外的js接口是直接通过json.txt,通过该文件返回一个JSON字符串,在实际的应用情况中,可以是一个Ation等。
       json.txt定义了 JSON格式的字符串,并定义放在 json这个变量中, jsInterface.html文件请求远端的一个路径,而后解析返回的 JSON串,并打印出来。 json.txt在远端的一个服务器上,例如该文件访问地址为: http://test.com/json.txt ,文件的内容如下:

    var json={
     "programmers": [
        { "firstName": "阿蜜果", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
        { "firstName": "范范", "lastName":"Hunter", "email": "jason@servlets.com" },
        { "firstName": "高子", "lastName":"Harold", "email": "elharo@macfaq.com" }
       ],
     "authors": [
        { "firstName": "安安", "lastName": "Asimov", "genre": "science fiction" },
    { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
    { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
       ],
     "musicians": [
        { "firstName": "茂茂", "lastName": "Clapton", "instrument": "guitar" },
    { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
       ]
    }

    在本地创建一个 jsInterface.html网页,使用 <script type="text/javascript" src=”…”/>请求返回 json字符串的路径信息,接着进行打印,该文件代码如下:

    < html >
        
    < head >
            
    < title > JS Interface Test </ title >
            
    < meta  http-equiv ="Content-Type"  content ="text/html; charset=UTF-8" >
            
    < script  type ="text/javascript"  src ="http://test.com/json.txt" ></ script >
            
    < script  type ="text/javascript" >
                alert(json.programmers[
    0 ].firstName  +  ','  +  json.programmers[ 0 ].lastName  +  ','  +  json.programmers[ 0 ].email);
                alert(json.programmers[
    1 ].firstName  +  ','  +  json.programmers[ 1 ].lastName  +  ','  +  json.programmers[ 1 ].email);
                alert(json.programmers[
    2 ].firstName  +  ','  +  json.programmers[ 2 ].lastName  +  ','  +  json.programmers[ 2 ].email);
                
                alert(json.authors[
    0 ].firstName  +  ','  +  json.authors[ 0 ].lastName  +  ','  +  json.authors[ 0 ].genre);
                alert(json.authors[
    1 ].firstName  +  ','  +  json.authors[ 1 ].lastName  +  ','  +  json.authors[ 1 ].genre);
                alert(json.authors[
    2 ].firstName  +  ','  +  json.authors[ 2 ].lastName  +  ','  +  json.authors[ 2 ].genre);
                
                alert(json.musicians[
    0 ].firstName  +  ','  +  json.musicians[ 0 ].lastName  +  ','  +  json.musicians[ 0 ].instrument);
                alert(json.musicians[
    1 ].firstName  +  ','  +  json.musicians[ 1 ].lastName  +  ','  +  json.musicians[ 1 ].instrument);
            
    </ script >
        
    </ head >
        
    < body >
        
    </ body >
    </ html >

             运行后可看到运行结果与《 JSON 知识总结入门篇》第一个实例的运行结果一致。

    3.    http 接口

    3.1 接口方式说明和优缺点

    需要为第三方提供一个接口,本来打算继续使用 Web Service接口,结果那边的开发人员说,他们没有使用过 Web Service接口(是做 IPTV的一个公司),希望我们能够提供 http方式的接口。

    另外我们一般在提供 Web Sservice接口的同时,也对外提供 http接口。

    3.2 开发实例

    3.2.1 向http接口发送消息的使用小程序
       本实例对自己提供请求信息为xml格式的http接口,将xml格式的请求信息发给http接口的地址后,将调用接口的返回消息简单的显示在页面,为了简便起见,笔者没有对js代码进行包装。
       该html文件代码如下:

    <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
    < html >
      
    < head >
          
    < meta  http-equiv ="Content-Type"  content ="text/html; charset=GB2312" >
          
    < title > http interface test </ title >
            
    < meta  http-equiv ="pragma"  content ="no-cache" >
            
    < meta  http-equiv ="cache-control"  content ="no-cache" >
            
    < meta  http-equiv ="expires"  content ="0" >
            
    < script >
            
    //  XMLHttpRequest
             var  http_request  =   false ;
            
    function  send_request(method, url, content, responseType, callback)  {
                http_request 
    =   false ;
                
    //  XMLHttpRequest
                 if (window.XMLHttpRequest)  {
                    
    // Mozilla
                    http_request  =   new  XMLHttpRequest();
                    
    if (http_request.overrideMimeType)  {
                        
    // MIME
                        http_request.overrideMimeType( " text/xml " );
                    }

                }
      else   if (window.ActiveXObject)  {
                    
    // IE
                     try   {
                        http_request 
    =   new  ActiveXObject( " Msxml2.XMLHTTP " );
                    }
      catch  (e)  {
                        
    try   {
                            http_request 
    =   new  ActiveXObject( " Microsoft.XMLHTTP " );
                        }

                        
    catch  (e) {}
                    }

                }

                
    if ( ! http_request)  {
                    window.alert(
    " XMLHttpRequest create Error. " );
                    
    return   false ;
                }

                
    if (responseType.toLowerCase()  ==   " text "   ||  responseType.toLowerCase()  ==   " xml " {
                    http_request.onreadystatechange 
    =  callback;
                }
       else   {
                    window.alert(
    " error responseType. " );
                    
    return   false ;
                }


                
    if (method.toLowerCase()  ==   " get " {
                    http_request.open(method, url, 
    true );
                }
      else   if (method.toLowerCase()  ==   " post " {
                    http_request.open(method, url, 
    true );
                    http_request.setRequestHeader(
    " Content-Type " " text/xml " );
                }
      else   {
                    window.alert(
    " http method error. " );
                    
    return   false ;
                }

                http_request.send(content);
            }

            
            
    function  submitInfo()
            
    {
                
    var  form  =  document.httpTestForm;
                
    var  pathInfo  =  form.pathInfo.value;
                
    var  xmlInfo  =  form.xmlInfo.value;
                form.returnInfo.value 
    =   " wait " ;
                send_request(
    " POST " , pathInfo, xmlInfo,  " xml " , showHttpTestBack);
                
            }

            
    function  showHttpTestBack()  {
                
    if (http_request.readyState  ==   4
                
    {
                    
    if (http_request.status  ==   200
                    
    {
                        
    var  responseInfo  =  http_request.responseText;
                        
    var  form  =  document.httpTestForm;
                        form.returnInfo.value 
    =  responseInfo;
                    }

                }

            }

            
    </ script >
      
    </ head >

      
    < body >
          
    < form  name ="httpTestForm"  action =""  method ="post" >
              
    < table  width ="100%"  border ="1" >
                  
    < tr >
                      
    < td  colspan ="2"  align ="center" >
                          
    < b > http interface Test </ b >
                      
    </ td >
                  
    </ tr >
                  
    < tr >
                      
    < td > xmlInfo: </ td >
                      
    < td >
                          
    < textarea  id ="xmlInfo"  name ="xmlInfo"  cols ="100"  rows ="5" ></ textarea >
                      
    </ td >
                  
    </ tr >
                  
    < tr >
                      
    < td > pathInfo: </ td >
                      
    < td >
                          
    < input  type ="text"  name ="pathInfo"  value ="http://192.168.2.154:16000/Mbd/http/video"  size ="100"   />
                      
    </ td >
                  
    </ tr >
                  
    < tr >
                      
    < td > returnInfo: </ td >
                      
    < td >
                         
    < textarea  name ="returnInfo"  id ="returnInfo"  cols ="100"  rows ="5" ></ textarea >
                      
    </ td >
                  
    </ tr >
                  
    < tr >
                      
    < td  colspan ="2"  align ="center" >
                          
    < input  type ="button"  name ="submitButton1"  value ="Submit"  onclick ="javascript:submitInfo()"   />
                      
    </ td >
                  
    </ tr >
                  
              
    </ table >
          
    </ form >
      
    </ body >
    </ html >

    访问该页,页面很简单,输入正确的 xml请求消息,和正确的路径信息,点击“ Submit”按钮,通过 ajax调用 http端口,并在成功取得信息后将返回结果显示在最后一个文本框:

       3.2.2 作为提供商提供http接口

    在这个实例中,服务器提供了一个 http接口,在这里是一个 jsp页面的访问地址,实际应用过程中,可以是 Servlet Action的访问地址,在这个实例中,客户端发送 http get发送请求,带上了 hotel(宾馆信息)和 name(顾客姓名), http接口程序拿到参数信息后,根据一定算法检查分配空闲房间号,这里为了简便起见,只是随机的生成一个数字返回给客户端。 http接口的简单程序 httpInterface.jsp如下所示:

    <% @ page language = " java "  contentType = " text/html; charset=UTF-8 "  pageEncoding = " UTF-8 " %>
    <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
    <%
    Double  room  =   500   *  Math.random();
    out.write(
    " hotel= "   +  request.getParameter( " hotel " )
                
    +   " ;name= "   +  request.getParameter( " name " )
                
    +   " ;room= "   +  room.intValue());
    out.close();
    %>
    < html >
          
    < head >
            
    < meta  http-equiv ="Content-Type"  content ="text/html; charset=UTF-8"   />
            
    < title > http Interface </ title >
            
    < meta  http-equiv ="pragma"  content ="no-cache" >
            
    < meta  http-equiv ="cache-control"  content ="no-cache" >
            
    < meta  http-equiv ="expires"  content ="0" >
          
    </ head >
        
    < body >
          
    </ body >
    </ html >

    可在 IE 上带上参数访问这个地址,可看到参考的结果信息,例如访问 http://IP:端口 / 应用名称 /httpInterface.jsp?hotel=motel&name=amigo ,参考返回结果如下:

    hotel=motel;name=amigo;room=407

    4.    参考文章

    1)《 Web Service入门》: http://tech.it168.com/j/2007-09-09/200709092111735.shtml

    2)《 Web Service简介特点 ,优点 ,缺点》:

    http://hi.baidu.com/linjk03/blog/item/4ee93b03a5d29a8dd43f7cd5.html

    3)《 Web Service百度百科》:

    http://baike.baidu.com/view/67105.htm

    4)《如何解决 js跨域问题》:

    http://www.yaronspace.cn/blog/index.php/archives/542

    展开全文
  • web项目管理系统的设计

    千次阅读 2020-02-12 15:25:42
    某某管理系统(员工信息,学生成绩,办事流程等等)应该是很多web开发者最先接触到的项目之一,也是许多非科技企业主要维护的项目,可以说是学习web项目最佳练手工具,虽然很老旧,但依旧充当着很重要的角色。...

    简介

    某某管理系统(员工信息,学生成绩,办事流程等等)应该是很多web开发者最先接触到的项目之一,也是许多非科技企业主要维护的项目,可以说是学习web项目最佳练手工具,虽然很老旧,但依旧充当着很重要的角色。

    本人也开发过某某管理系统(大作业项目),因此来分享类似的web项目的开发流程和知识点。

    关系模式设计(ER)

    根据要设计的管理系统,我们需要对其涉及的实体以及关系进行抽象。也就是要设计出经典的ER图。以影院管理系统为例,实体主要包括:电影院,电影,排片等等,关系主要包括:影院——电影,顾客——订单,电影——排片等等。其实也不困难,这些在设计表结构的时候需要多注意,我们要注意到哪些属性受到哪些属性制约的,分清楚强实体集和弱实体集。

    能画清楚ER图,就很好设计sql了,这些不搞清楚,后面增删改查的时候,问题就大了。打个比方,订单信息是弱实体集,同时也是复合实体,它与排片之间有联系,与顾客之间也有联系。所以这个表必须用REFERENCES(外键)设计好。不然你改了影片名,顾客名,这订单却一点没变化,数据就不一致了。而且你可以会加上修改订单的功能,如果没设计好依赖关系,表是错的,操作到后面数据全乱了也有可能发生。

    开发框架敲定

    总得拿个工具来开发是吧!所以要想好用什么来开发。

    如果是团队项目,最好是前后端分离,不然一人挑大梁,其他人就反馈bug,比较难合作,要合作也只能分配不同的板块进行设计,不高效。

    如果是个人项目,最好也是前后端分离,毕竟是主流,这样可以学很多东西。当然,要学php,学jsp,就没必要分了,页面效果和数据都在自己操作之下,说实话开发起来还更快。

    • 前端:三大框架最值得学习的(Vue/Angular/React),其中最推荐Vue,因为最简单,接着是React,大厂用得多,Angular语法想较前两者可能复杂点。

    • 前端UI:写界面还是很难的,当然,想认真学通css的自己写比较合适,不然就乖乖用UI,UI和前端框架一般是相契合的,根据你选的前端框架查一下。

    • 后端:1. 主要学前端的可以考虑 express,超级简单,而且可以熟悉nodejs,或者考虑flask,python好用且易学,我们就不用纠结各类配置。2. 主要学后端的,首先是推荐java,学习资料多,而且企业用的也多,难点在于环境配置,各种依赖烦得很。其次是推荐golang,这是一门有活力的语言,竞争压力比java小很多。

    下面我就以 vue + element-ui + express 为例子,谈谈接下来的开发。

    前端设计

    前端以vue为开发框架,采用element ui作为ui框架进行开发,核心是应用vue的组件化开发思想。也就是开发时,构思好你想看到的界面和想用到的功能,一个一个击破,最后再联系在一起。

    组件管理与设计

    前端三大框架都有组件的思想,由于采用了element-ui,很多组件不需要我们写(比如菜单栏目,布局,表格,页码等等)。但是一些大的组件(一般单独放在page/view文件夹里)还是要分出来的,比如:影院信息管理页面组件,顾客信息管理页面组件,订单管理页面组件等等。

    另外,组件自然是抽离得越细越规范,比如你可以把一个简单的信息展示(几个

    标签或者几个

  • 标签就能解决的)也抽出来。但是没必要,最后管理起来很麻烦。所有这种抽离的小组件应当放在common或者特定的文件夹下,与主视图组件区分开来。
  • 组件访问逻辑

    你可以用导航栏+a标签进行跳转,当然,还是前端路由更为推荐。

    前端路由用的是hash或history,可以做到页面不刷新。我们只要吧导航栏和前端路由表结合在一起,就可以轻松的做到点击导航栏跳转到对应的视图组件。

    https://blog.csdn.net/CSDN_Yong/article/details/104186851

    前端路由可以参考上面链接的文章

    组件代码的编写

    这个是基本功,像vue只要用好@和:这两个就能写出很多东西了,不知道怎么写可以考虑去github多搬运代码就会了。

    cookies的使用

    import cookies from 'vue-cookies'
    Vue.use(cookies);
    

    登陆控制一般是要用到的,而且你要阻止用户企图未登陆就通过修改url的方式访问到对应的组件。这时候只要比对cookies是否存在就可以判断先前有没有登陆。具体怎么用可以查阅其他文章。

    后端实现

    这一块不同的框架细节不太一样。但简单来说,就是根据前端的要求提供出一系列的api并对数据库进行各种操作。

    基本构造(express)

    //app.js
    var createError = require('http-errors');
    var express = require('express');
    var path = require('path');
    var cookieParser = require('cookie-parser');
    var logger = require('morgan');
    var session = require('express-session');
    var indexRouter = require('./routes/index');
    var app = express();
    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');
    //托管静态文件
    app.use(express.static('public'));
    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));
    app.use('/', indexRouter);
    app.listen(3000);
    module.exports = app;
    

    express脚手架基本就自带了上面的东西。use那里主要看开发要用到什么,要到的就用npm搞进去就行。

    跨域错误避免

    app.all("*", function(req, res, next) {
     if (!req.get("Origin")) return next();
     // use "*" here to accept any origin
     res.set("Access-Control-Allow-Origin","*");
     res.set("Access-Control-Allow-Methods", "GET");
     res.set("Access-Control-Allow-Headers", "X-Requested-With,Origin,Content-
    Type,Accept");
     // res.set('Access-Control-Allow-Max-Age', 3600);
     if ("OPTIONS" === req.method) return res.sendStatus(200);
     next();
    

    静态资源存储

    一般不同后端框架存储文件夹不太一样,不过可以肯定的一点,必须在代码中指定出来(也可能可以在IDEA中标出来,反正肯定不是直接放)。设置好之后,这个文件夹一般就放图片文件。

    API接口设计

    与前端协商好,需要请求或上传哪些数据,然后制定相应的url就可以了。

    API接口实现

    都是要导入依赖项的,也要提前配置好依赖(比如javaweb有单独的依赖配置文件),导入后,我们可以调用sql接口。以express为例子。

    const mysql = require('mysql');
    const conn = mysql.createConnection({
     host:'localhost',   //数据库地址
     user:'root', //用户名
     password:'123456', //密码
     database:'mysql' //数据库名
    });
    conn.connect();
    module.exports = conn;
    

    配置数据库,这个最好单独做成一个文件。

    conn.query(sqlStr,[name,password],(error,result,field)=>{
    	\\dosomething
    })
    

    然后我们就可以通过这个东西查询数据库了。

    学好ajax,又知道怎么查数据库了,其他不是很大的问题。当然,大的项目后台是要考虑并发,代理什么的,这里不考虑。

    前后端联合开发

    在不分前后端时,比如传统的jsp+java+servlet可能不太好区分。在分离的情况下,一般采用下面的套路(当然是限于小型项目,那些企业级的大有手段协调开发)

    开发时

    在前后端分离的情况下,后台维护API,数据库,前端维护界面就行。一般就是后台跑在某个服务器上,给出端口和基础的url,前端根据基础的url和端口拼接对应的请求url发给服务器以获取数据。最后前端要跑在另一个服务器上,用户访问的时候是访问前端这个服务器的。关系差不多如下:
    在这里插入图片描述
    这样做的好处就是两个服务器都可以启动热部署,开发效率比疯狂打包快得多得多,每一次更新都能立马进行调试。

    发布时

    当然是要打包了,首先打包前端,比如vue,就是 npm run build,获取dist文件夹,把这个dist文件夹塞到后端的静态文件那里去,然后制定index.html作为后端服务器启动入口,就大功告成啦!就想下图一样:
    在这里插入图片描述

    总结

    这类管理项目侧重点在于前端,作为练手项目,我们基本是不可能遇到后端开发真正的难点的(协调,并发,分布式等)。所以想好好练后台开发的,尽早实习,看看实际业务代码会有很大帮助。前端还是布局和组件化思想比较重要,我这篇文章可能有很多地方是不对的,很多话也是不对,但是应该能对想做一个练手项目的你有点帮助。

    展开全文
  • 基于WEB信息管理系统测试时应考虑的因素有哪些? 功能测试:链接测试(1.测试所有连接是否按指示的那样确实连接到了该连接的页面,2.测试所连接的也面是否存在,3.保证WEB应用系统上没有孤立的页面....
    基于WEB信息管理系统测试时应考虑的因素有哪些?
    
    • 功能测试:链接测试(1.测试所有连接是否按指示的那样确实连接到了该连接的页面,2.测试所连接的也面是否存在,3.保证WEB应用系统上没有孤立的页面.只能在集成测试阶段完成.);表单测试(用户给信息系统管理员提交信息时,要测试提交操作的完整性,以校验提交给服务器的信息的正确性.);COOKIES测试(Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息.如果Web应用系统使用了Cookies,就必须检查Cookies是否能正常工作。测试的内容可包括Cookies是否起作用,是否按预定的时间进行保存,刷新对Cookies有什么影响.)设计语言测试(使用哪种版本的HTML).数据库测试(数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理。在使用了数据库的Web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试)
    • 性能测试:1连接速度测试2负载测试3压力测试(     web性能测试的步骤:
            第一,分析产品结构,明确性能测试的需求,包括并发、极限、配置和指标等方面的性能要求,必要时基于LOAD测试的相同测略需同时考虑稳定性测试的需求。
            第一,分析应用场景和用户数据,细分用户行为和相关的数据流,确定测试点或测试接口,列示系统接口的可能瓶颈,一般是先主干接口再支线接口,并完成初步的测试用例设计。
            第三,依据性能测试需求和确定的测试点进行测试组网设计,并明确不同组网方案的重要程度或优先级作为取舍评估的依据,必要时在前期产品设计中提出支持性能测试的可测试性设计方案和对测试工具的需求。
            第四,完成性能测试用例设计、分类选择和依据用户行为分析设计测试规程,并准备好测试用例将用到的测试数据。
           第五,确定采用的测试工具。
           第六,进行初验测试,以主干接口的可用性为主,根据测试结果分析性能瓶颈,通过迭代保证基本的指标等测试的环境。
           第七,迭代进行全面的性能测试,完成计划中的性能测试用例的执行。
           第八,完成性能测试评估报告。
            在进行性能测试的时候,我们需要知道一些有效的性能指标,下面我们来列出一些主要的性能指标:
            一是,通用指标(指Web应用服务器、数据库服务器必需测试项):
           *ProcessorTime:指服务器CPU占用率,一般平均达到70%时,服务就接近饱和;
           *Memory Available Mbyte:可用内存数,如果测试时发现内存有变化情况也要注意,如果是内存泄露则比较严重;
           *Physicsdisk Time :物理磁盘读写时间情况。
           二是,Web服务器指标:
           *Avg Rps:平均每秒钟响应次数=总请求时间/秒数;
           *Avg time to last byte per terstion(mstes):平均每秒业务角本的迭代次数;*Successful Rounds:成功的请求;
           *Failed Rounds:失败的请求;
           *Successful Hits:成功的点击次数;
           *Failed Hits:失败的点击次数;
           *Hits Per Second:每秒点击次数;
           *Successful Hits Per Second:每秒成功的点击次数;
           *Failed Hits Per Second:每秒失败的点击次数;
           *Attempted Connections:尝试链接数。
           三是,数据库服务器指标:
           *User 0 Connections :用户连接数,也就是数据库的连接数量;
           *Number of deadlocks:数据库死锁;
           *Butter Cache hit:数据库Cache的命中情况)。   
    • 可用性测试:1导航测试(Web应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。)2图形测试3内容测试3整体界面测试4客户端兼容性测试(1平台测试2浏览器测试)5安全性测试(测试重点:(1)现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等。(2)Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。(3)为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。(4)当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。(5)服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。 )

    举例来说一下网站测试
    首先:得到相关文档(需求文档和设计文档),理解需求和设计设计思想后,想好测试策略(测试计划简单点就OK了),考虑到测试环境,测试用例,测试时间等问题。
    第二步:设计测试用例,测试策略是:把网站部分的功能点测试完,然后在进行系统测试(另外个模块呢有另一个测试人员负责,可以进行联调测试),网站模块的测试基本是功能测试和界面测试(用户并发的可能性很小,所以不考虑):这次的网站的输入数据呢是使用数据库中的某张表记录,如果表中某一数据记录中新加进来的(还没有被处理的,有个标志位),网站启动后会立刻去刷那张表,得到多条数据,然后在进行处理。处理过程中,会经历3个步骤,网站才算完成了它的任务。有3个步骤呢,就可以分别对这3个步骤进行测试用例的设计,尽量覆盖到各种输入情况(包括数据库中的数据,用户的输入等),得出了差不多50个用例。界面测试,也就是用户看的到的地方,包括发送的邮件和用户填写资料的页面展示。
    第三步:搭建测试环境(为什么这个时候考虑测试环境呢?因为我对网站环境已经很熟了,只有有机器能空于下来做该功能测试就可以做了),因为网站本身的环境搭建和其他的系统有点不同,它需要的测试环境比较麻烦,需要web服务器(Apache,tomcat),不过这次需求呢,网站部分只用到了tomcat,所以只要有tomcat即可\u001Dc _"}\u0013第四步:执行测试

       
    展开全文
  • 功能测试: 1.链接测试: ...用户给信息系统管理员提交信息时,要测试提交操作的完整性,以校验提交给服务器的信息的正确性 3.Cookies测试: Cookies通常用来存储用户信息和用户在某应用系统

    功能测试:
    1.链接测试:
    1.测试所有连接是否按指示的那样确实连接到了该连接的页面,
    2.测试所连接的也面是否存在,
    3.保证WEB应用系统上没有孤立的页面.只能在集成测试阶段完成
    2.表单测试:
    用户给信息系统管理员提交信息时,要测试提交操作的完整性,以校验提交给服务器的信息的正确性
    3.Cookies测试:
    Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息.如果Web应用系统使用了Cookies,就必须检查Cookies是否能正常工作。测试的内容可包括Cookies是否起作用,是否按预定的时间进行保存,刷新对Cookies有什么影响
    4.设计语言测试:
    使用哪种版本的HTML
    5.数据库测试:
    数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理。在使用了数据库的Web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试

    性能测试:
    1连接速度测试
    用户连接到Web应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长(例如超过5秒钟),用户就会因没有耐心等待而离开。另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面
    2负载测试
    负载测试是为了测量Web系统在某一负载级别上的性能,以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数量,也可以是在线数据处理的数量。例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web应用系统能否处理大量用户对同一个页面的请求?
    3压力测试
    负载测试应该安排在Web系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个Web系统能同时处理的请求数量将远远超出这个限度,所以,只有放在Internet上,接受负载测试,其结果才是正确可信的。进行压力测试是指实际破坏一个Web应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。压力测试的区域包括表单、登陆和其他信息传输页面等
    web性能测试的步骤:
      1.分析产品结构,明确性能测试的需求,包括并发、极限、配置和指标等方面的性能要求,必要时基于LOAD测试的相同测略需同时考虑稳定性测试的需求
      2.分析应用场景和用户数据,细分用户行为和相关的数据流,确定测试点或测试接口,列示系统接口的可能瓶颈,一般是先主干接口再支线接口,并完成初步的测试用例设计
      3.依据性能测试需求和确定的测试点进行测试组网设计,并明确不同组网方案的重要程度或优先级作为取舍评估的依据,必要时在前期产品设计中提出支持性能测试的可测试性设计方案和对测试工具的需求
      4.完成性能测试用例设计、分类选择和依据用户行为分析设计测试规程,并准备好测试用例将用到的测试数据
    5.确定采用的测试工具
    6.进行初验测试,以主干接口的可用性为主,根据测试结果分析性能瓶颈,通过迭代保证基本的指标等测试的环境
    7.迭代进行全面的性能测试,完成计划中的性能测试用例的执行
    8.完成性能测试评估报告

    在进行性能测试的时候,我们需要知道一些有效的性能指标,下面我们来列出一些主要的性能指标:
    1.通用指标:
    指Web应用服务器、数据库服务器必需测试项
    *ProcessorTime:
    指服务器CPU占用率,一般平均达到70%时,服务就接近饱和
    *Memory Available Mbyte:
    可用内存数,如果测试时发现内存有变化情况也要注意,如果是内存泄露则比较严重
    *Physicsdisk Time :
    物理磁盘读写时间情况
    2.Web服务器指标:
    *Avg Rps:平均每秒钟响应次数=总请求时间/秒数
    *Avg time to last byte per terstion(mstes):平均每秒业务角本的迭代次数
    *Successful Rounds:成功的请求
    *Failed Rounds:失败的请求
    *Successful Hits:成功的点击次数
    *Failed Hits:失败的点击次数
    *Hits Per Second:每秒点击次数
    *Successful Hits Per Second:每秒成功的点击次数
    *Failed Hits Per Second:每秒失败的点击次数
    *Attempted Connections:尝试链接数
    3.数据库服务器指标:
    *User 0 Connections :用户连接数,也就是数据库的连接数量
    *Number of deadlocks:数据库死锁
    *Butter Cache hit:数据库Cache的命中情况

    可用性测试:
    1导航测试:
    Web应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显
    2图形测试
    在Web应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等
    3整体界面测试
    内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。信息的正确性是指信息是可靠的还是误传的。例如,在商品价格列表中,错误的价格可能引起财政问题甚至导致法律纠纷;信息的准确性是指是否有语法或拼写错误
    4客户端兼容性测试
    1)平台测试
    2)浏览器测试
    5安全性测试
    测试重点:
    (1)现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等
    (2)Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用
    (3)为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪
    (4)当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性
    (5)服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题

    六、总结 
        本文从功能、性能、可用性、客户端兼容性、安全性等方面讨论了基于Web的系统测试方法。基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战。基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试

    展开全文
  • java web开发(二) 接口开发

    万次阅读 多人点赞 2016-06-03 16:50:34
    java web开发(一) 环境搭建讲解了如何搭建一个Java Web项目,... 假设要做一个简单的学生信息管理系统,数据库名为students_manage,并且先设计一张学生表,表名为student。 1.打开Sqlyong工具,如果还没创建连接...
  • IDEA+Java+JSP+Mysql+Tomcat实现Web图书管理系统

    千次阅读 多人点赞 2020-06-01 21:54:18
    实现图书管理系统 Operating System:Windows10 IDEA:2018.2 Java:1.8 Mysql:8.0.13 一、系统介绍 该图书管理系统实现了用户注册与登录功能,实现了实现了图书列表展示,购物车简单的功能。后台表只有三张,一张...
  • 基于java web的酒店管理系统

    万次阅读 多人点赞 2017-10-29 10:44:06
    本网站以windows xp为Web平台,JSP+Servlet+JavaBean为网站实现技术,建立基于SQL server数据库系统的核心动态网页,实现酒店管理系统网站前台及后台管理等功能模块 本系统采用MVC模式,主要有如下几个分层。 1. ...
  • 本文主要讲述图书管理系统设计,附带完成源码,可以作为毕业设计,课程设计,使用:Java+Jsp+Servlet+mysql等技术 图书管理:根据图书编号、图书名称查询图书基本信息,添加、修改、删除图书。 图书分类管理:根据...
  • BIM开发会用到哪些技术

    千次阅读 2019-08-29 13:33:15
    1. 编程语言 ...除了可以进行高效的桌面程序开发,C#还被多数应用软件和开发平台作为首选开发语言进行支持,如Autodesk公司的Autocad,Revit二次开发接口,open design Alliance的teigha.NET,t...
  • Java Web项目常用的第三方接口

    千次阅读 2017-11-09 11:36:03
    感谢作者 ...1. Web Service接口 ...1.1 接口方式说明和优点 ...在笔者的开发生涯中,当作为接口提供商给第三方提供接口时,以及作为客户端去调用第三方提供的接口时,大部分时候都是使用Web Service接口,We
  • Web Service 接口

    千次阅读 2016-05-31 16:36:14
    1. Web Service 接口 1.1 接口方式说明和优点 在笔者的开发生涯中,当作为接口提供商给第三方提供接口时,以及作为客户端去调用第三方提供的接口时,大部分时候都是使用 Web Service接口, Web Service...
  • 本文章要实现的功能如下: ... ... 4.主页搜索栏输入要搜索...一、要实现这些功能所需要的接口及实现类 BookDao: boolean add(Book book); boolean delete(String name); boolean update(Book book); Book SearchByName
  • 安卓和ios,这两大操作技术,因此这两者是主要的,其他都是次要,那首先本文是针对开发小白用户对资管APP开发做一个简单的介绍,首先要了解资管App都有哪些类型,不同的类型适用于哪些需求,用户可以根据自己的需求...
  • 钉钉开放了很多接口供企业同步内部系统数据到钉钉,同时也支持钉钉上信息变动回调企业内部系统,将信息变动回写企业内部系统:官方文档地址 官方文档中的C#回调demo是ashx文件实现,我这里是应用到个人公司内部企业...
  • ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试 1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+EasyUI 后台管理...
  • javaweb三大框架构建用户管理系统

    千次阅读 2016-12-15 14:38:57
     (2)根据web.xml配置,该请求被FilterDispatcher接收(需在web.xm设置核心Filter来拦截用户请求,使Struts2接入web应用)。  (3)根据struts.xml配置,找到需要调用的Action类和方法,经过一系列的拦截器...
  • 后台管理系统 – 权限管理

    万次阅读 多人点赞 2018-11-21 14:23:35
    不管是开发手机APP,网站还是小程序等项目,基本上都需要一个后台管理系统的支撑。而每个后台管理系统都有一个通用的功能就是用户权限管理。最近基于Antd+React.js做了一个后台管理系统
  • 基于SNMP/Web的园区网络管理系统中配置模块的实现方法一、概述1.网络管理模式 随着因特网的发展,网络系统变得越来,越来越复杂,日益多样化,对网络系统的管理提出了更高的要求。为此,Internet的核心机构IAB...
  • 在做web开发的时候需要用到的jar包

    千次阅读 2010-01-13 13:27:00
    访问配置文件、创建和管理 bean 以及进行 Inversion of Control / Dependency Injection ( IoC/DI )操作相关的所有类 spring-context.jar 可以找到使用 Spring ApplicationContext 特性时所需的全部类, JDNI ...
  • 提到Api接口,一般想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过WebAPI用起来更简单,更轻量级,更流行。构建一个优秀的API依赖于伟大的框架,今天我们的主角当然是微软的跨平台轻...
  • 后台管理系统开发 功能模块:用户登录、权限管理(用户管理、菜单管理、角色管理) 技术应用:SSM框架+Mysql5.7+jsp+前端layui和EasyUI框架 项目工具:Maven+tomcat9.0+jdk1.8+GIT 开发工具:IDEA 测试环境:window7+...
  • Python3 接口自动化测试项目实战一(WEB项目)

    千次阅读 热门讨论 2019-01-13 21:58:32
    1.1.1 教育局招生管理系统部署 教育局招生管理系统是基于java+mysql,下面介绍它的部署过程。 1.从我的网盘下载部署文件。   2.安装jdk以及配置环境变量。 点击文件进行安装。   下一步下一步直接安装。 ...
  • web API接口设计经验总结

    千次阅读 2018-10-12 13:54:15
    由于我们整个Web API平台是基于MVC的基础上进行的API开发,因此整个Web API的接口,在定义的时候,一般需要显示来声明接口是[HttpGet]或者[HttpPost],虽然有些接口也可以不用声明,但是避免出现类似下面的错误信息...
  • Web API接口设计经验总结

    千次阅读 2016-06-04 18:26:20
    Web API接口的开发过程中,我们可能碰到各种各样的问题,我在前面两篇随笔《Web API应用架构在Winform混合框架中的应用(1)》、《Web API应用架构在Winform混合框架中的应用(2)--自定义异常结果的处理》也...
  • 基于Servlet的学生管理系统

    万次阅读 多人点赞 2018-10-21 10:43:26
    一、缘起 ...四个月前,我曾经写过一个基于JSP的学生管理系统《基于JSP的学生管理系统》,这一次我又带来了一个基于Servlet的学生管理系统,在原有的基础上新增了其他功能,介系你没有van过的船新版本 ...
  • 理解 Web 3 —— 用户控制的互联网

    千次阅读 2019-05-14 09:47:46
    本文包括三个部分,分别介绍了万维网步入 3.0 时代(Web 3.0)的缘由、含义和方式。第一部分解释了如今网络存在的缺陷和 Web 3.0 的进步之处;第二部分主要介绍了什么是 Web 3.0 堆栈;第三部分重点讲述了开发者的...
  • wxpython实现简单图书管理系统

    万次阅读 多人点赞 2017-06-03 15:24:40
    用wxpython实现的简单图书管理系统,可以实现增加图书,删除图书,修改图书,查看图书。后台数据库为mysql数据库,采用的pymysql连接数据库。系统界面如下:代码如下:1.书本类代码#author = liuwei date = 2017-06-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,574
精华内容 45,429
关键字:

web用户管理系统会用到哪些接口