常州建站价格一个完整的网站制作流程

web/2025/10/8 22:10:42/文章来源:
常州建站价格,一个完整的网站制作流程,珠海模板建站公司,咨询微平台WebService 1. WebService基本认识 WebService最早是微软提出了一种以XML为载体网络信息传输的规范#xff0c;现在几乎所有的语言与平台都支持#xff0c;带有状态机制#xff0c;不依赖于容器#xff0c;可以发送一个xml作为其请求内容. WebService通常是基于http的远程方…WebService 1. WebService基本认识 WebService最早是微软提出了一种以XML为载体网络信息传输的规范现在几乎所有的语言与平台都支持带有状态机制不依赖于容器可以发送一个xml作为其请求内容. WebService通常是基于http的远程方法调用(RMI)号称是可以返回远程对象一般来说客户端可以象调用本地方法一样调用WebService的方法。 在各种各样的对 WebService的解释版本中, 足够官方, 却并没有太大帮助, 在我理解, WebService 是一种应用程序组件, 提供一个接口, client端 提供参数, 通过多种方式发起请求,获取到相应的返回值, 可以通过WebService进行网络通信, 同时可以实现不同平台间的数据共享, 仅此而已. 参考链接:WebService的两种方式SOAP和REST比较 (转) 不过需要注意的一点是,WebService有两种方式: SOAP协议方式, 三要素为 SOAP, WSDL, UDDIREST方式 1.1 SOAP概述 SOAP(Simple Object Access Protocol), 简单对象访问协议. 简单对象访问协议是交换数据的一种协议规范是一种轻量的、简单的、基于XML标准通用标记语言下的一个子集的协议它被设计成在WEB上交换结构化的和固化的信息。 SOAP的概念理解: SOAP消息基本上是从发送端到接收端的单向传输但它们常常结合起来执行类似于请求 / 应答的模式。所有的 SOAP消息都使用 XML 编码。一条 SOAP消息就是一个包含有一个必需的 SOAP 的封装包一个可选的 SOAP 标头和一个必需的 SOAP 体块的 XML 文档。 具体表现如下: !-- 在SOAP的XML消息中,强制使用的 SOAP 的 Envelope 元素是 SOAP 消息的根元素。 -- !-- 且SOAP命名空间的使用中, 值始终应为xmlns:soaphttp://www.w3.org/2001/12/soap-envelope-- ?xml version1.0?!-- 下面便是SOAP封装包, 将对应的XML消息封装至 soap 命名空间 -- soap:Envelope xmlns:soaphttp://www.w3.org/2001/12/soap-envelope soap:encodingStylehttp://www.w3.org/2001/12/soap-encoding ... Message information goes here ... /soap:Envelope!--可选的SOAP头-- !--可选的 SOAP Header 元素可包含有关 SOAP 消息的应用程序专用信息比如认证、支付等。如果 Header 元素被提供则它必须是 Envelope 元素的第一个子元素。--soap:Header m:Trans xmlns:mhttp://www.w3school.com.cn/transaction/ soap:mustUnderstand1234/m:Trans /soap:Header!--必需的 SOAP Body,可包含打算传送到消息最终端点的实际 SOAP 消息。-- soap:Body m:GetPrice xmlns:mhttp://www.w3school.com.cn/pricesm:ItemApples/m:Item /m:GetPrice /soap:Body 除此之外, 还有 SOAP Fault元素,用于指示错误消息, !--实例-- !--SOAP请求-- POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soapxml; charsetutf-8 Content-Length: nnn?xml version1.0? soap:Envelope xmlns:soaphttp://www.w3.org/2001/12/soap-envelope soap:encodingStylehttp://www.w3.org/2001/12/soap-encodingsoap:Body xmlns:mhttp://www.example.org/stockm:GetStockPricem:StockNameIBM/m:StockName/m:GetStockPrice /soap:Body/soap:Envelope!--SOAP响应-- HTTP/1.1 200 OK Content-Type: application/soapxml; charsetutf-8 Content-Length: nnn?xml version1.0? soap:Envelope xmlns:soaphttp://www.w3.org/2001/12/soap-envelope soap:encodingStylehttp://www.w3.org/2001/12/soap-encodingsoap:Body xmlns:mhttp://www.example.org/stockm:GetStockPriceResponsem:Price34.5/m:Price/m:GetStockPriceResponse /soap:Body /soap:Envelope SOAP 通讯协议使用 HTTP 来发送XML 格式的信息,SOAP 把 XML 的使用代码化为请求和响应参数编码模式, 并用HTTP 作传输。 具体地讲, 一个SOAP 方法可以简单地看作遵循SOAP编码规则的HTTP请求和响应, 一个 SOAP终端则可以看作一个基于HTTP 的URL, 它用来识别方法调用的目标。 在我目前的理解中, SOAP可以概括为以下要点: SOAP消息用XML进行编码, 同时拥有相匹配的编码规则, 便于通信, 解析, 交互; 同时在HTTP上 发送SOAP的语义会被映射到HTTP语义, 且不仅限于HTTP协议, SOAP也可以绑定至TCP/UDP协议上; 通过HTTP发送 XML格式信息, 服务器端 转换解析相应的 信息, 处理并响应. HTTP XML SOAP SOAP优点 可扩展的。SOAP 无需中断已有的应用程序, SOAP 客户端、 服务器和协议自身都能发展。而且SOAP 能极好地支持中间介质和层次化的体系结构。简单的。客户端发送一个请求,调用相应的对象, 然后服务器返回结果。这些消息是XML 格式的,并且封装成符合HTTP 协议的消息。因此,它符合任何路由器、 防火墙或代理服务器的要求。完全和厂商无关。SOAP可以相对于平台、 操作系统、 目标模型和编程语言独立实现。另外,传输和语言绑定以及数据编码的参数选择都是由具体的实现决定的。与编程语言无关。SOAP 可以使用任何语言来完成只要客户端发送正确SOAP 请求( 也就是说, 传递一个合适的参数给一个实际的远端服务器)。SOAP 没有对象模型,应用程序可以捆绑在任何对象模型中。个人思考: 如果想要深入了解 SOAP, 需要了解 相应的 XML封装, 同时对 XML扩展文本标记语言有一定程度的了解. 粗浅的使用, 目前足以; 在看完了XML 和 XML schema 之后, 再对文章进行了一些补充更新, 对SOAP WSDL也有了更清晰的认知. 各种官方的语言 被转化为实际的 代码之后, 理解起来总是更简单的. 1.2 WSDL概述 WebService的另一大核心: WSDL(Web Services Description Language) 网络服务描述语言 如同字面意思所描述的那样,WSDL 是这样一个基于 XML 的语言用于描述 Web Service 及其函数、参数和返回值。因为是基于 XML 的所以 WSDL 既是机器可阅读的又是人可阅读的.(XML的自描述性) 以下是几个元素定义,有助于更直观的理解 WSDL: portType web service 执行的操作 下面截取了 WeatherWS.xml的一部分, 以便于对 WSDL 有更直观的理解 wsdl:portType nameWeatherWSSoapwsdl:operation namegetRegionDatasetwsdl:documentation xmlns:wsdlhttp://schemas.xmlsoap.org/wsdl/br /h3获得中国省份、直辖市、地区国家名称国外和与之对应的ID/h3p输入参数无返回数据DataSet。/pbr //wsdl:documentationwsdl:input messagetns:getRegionDatasetSoapIn/wsdl:output messagetns:getRegionDatasetSoapOut//wsdl:operationwsdl:operation namegetRegionProvincewsdl:documentation xmlns:wsdlhttp://schemas.xmlsoap.org/wsdl/br /h3获得中国省份、直辖市、地区和与之对应的ID/h3p输入参数无返回数据一维字符串数组。/pbr //wsdl:documentationwsdl:input messagetns:getRegionProvinceSoapIn/wsdl:output messagetns:getRegionProvinceSoapOut//wsdl:operationwsdl:operation namegetRegionCountrywsdl:documentation xmlns:wsdlhttp://schemas.xmlsoap.org/wsdl/br /h3获得国外国家名称和与之对应的ID/h3p输入参数无返回数据一维字符串数组。/pbr //wsdl:documentationwsdl:input messagetns:getRegionCountrySoapIn/wsdl:output messagetns:getRegionCountrySoapOut//wsdl:operationwsdl:operation namegetSupportCityDatasetwsdl:documentation xmlns:wsdlhttp://schemas.xmlsoap.org/wsdl/br /h3获得支持的城市/地区名称和与之对应的ID/h3p输入参数theRegionCode 省市、国家ID或名称返回数据DataSet。/pbr //wsdl:documentationwsdl:input messagetns:getSupportCityDatasetSoapIn/wsdl:output messagetns:getSupportCityDatasetSoapOut//wsdl:operationwsdl:operation namegetSupportCityStringwsdl:documentation xmlns:wsdlhttp://schemas.xmlsoap.org/wsdl/br /h3获得支持的城市/地区名称和与之对应的ID/h3p输入参数theRegionCode 省市、国家ID或名称返回数据一维字符串数组。/pbr //wsdl:documentationwsdl:input messagetns:getSupportCityStringSoapIn/wsdl:output messagetns:getSupportCityStringSoapOut//wsdl:operationwsdl:operation namegetWeatherwsdl:documentation xmlns:wsdlhttp://schemas.xmlsoap.org/wsdl/br /h3获得天气预报数据/h3p输入参数城市/地区ID或名称返回数据一维字符串数组。/pbr //wsdl:documentationwsdl:input messagetns:getWeatherSoapIn/wsdl:output messagetns:getWeatherSoapOut//wsdl:operation /wsdl:portType 它可描述一个 web service、可被执行的操作以及相关的消息。 message web service 使用的消息 types web service 使用的数据类型 binding web service 使用的通信协议 需要了解更多的话, 官方文档更为详细: WSDL 文档 1.3 UDDI概述 UDDI(Universal Description Discovery and Integration), UDDI 是一种目录服务企业可以使用它对 Web services 进行注册和搜索。 UDDI 指的是通用描述、发现与集成服务 UDDI 是一种用于存储有关 web services 的信息的目录。 UDDI 是一种由 WSDL 描述的 web services 界面的目录。 UDDI 经由 SOAP 进行通信 UDDI 被构建入了微软的 .NET 平台 总结来说: SOAP定义协议层交互, 映射, WSDL用来描述 WebService, UDDI 用来进行WebService 注册 搜索. 1.4 REST 1.4.1 Rest基本含义 在开始, 仍然是参考链接, 看过后,相信会对 Rest有一个比较全面的了解: REST简介-Amber-Garden REST(Representational State Transfer) 表现层状态转移; REST通常基于使用HTTPURI和XML 以及HTML标准通用标记语言下的一个应用这些现有的广泛流行的协议和标准。 在阅读上述博文前可以先了解这样几个概念 同时也是对Rest的一种描述 参考REST无状态的理解 首先必须清楚的是 Rest是一种软件架构风格而并非是标准;Rest中并非是向以往的java项目设计那样, 以业务逻辑/功能为考虑出发点, 而是以 资源 为出发点考虑的, 因此很重要的一个特性为 面向资源的接口设计。资源 操作实体都作为资源来看待 如在一个商城项目中 商品类别 具体的商品 物流 用户资料 等都会被看做资源你可以用一个URI统一资源定位符指向它每种资源对应一个特定的URI。要获取这个资源访问它的URI就可以因此URI就成了每一个资源的地址或独一无二的识别符。 而 Client端的操作都是对资源本身的操作。表现层: 指的是资源的表现层,它的具体表现形式应该在HTTP请求的头信息中用Accept和Content-Type字段指定这两个字段才是对表现层的描述。状态 应用状态(Application State)和资源状态(Resource State): 应用状态指的是与某一特定请求相关的状态信息资源状态则反映了某一存储在服务器端资源在某一时刻的特定状态该状态不会因为用户请求而改变任何用户在同一时刻对该资源的请求都会获得这一状态的表现Representation。当用户登录后 一般需要保存对应的 用户信息 用户信息本身就是一种资源 特定的用户 对应着用户资源的一种状态 而在服务器端取出存储在Session中的用户资源时 实际上也就意味着 服务器保存着用户资源的 状态信息 但在 Rest架构设计中 实际上是期望请求方提供的所以传递Session ID被认为是unRESTful的做法。深感自己水平有限, 知识储备不足, 因此仅仅是将REST简介-Amber-Garden博文的要点提出来: 除了上述关于资源状态的概念理解之外还有以下信息 Rest架构设计有以下几条约束: 使用客户/服务器模型。客户和服务器之间通过一个统一的接口来互相通讯。层次化的系统。在一个REST系统中客户端并不会固定地与一个服务器打交道。无状态。在一个REST系统中服务端并不会保存有关客户的任何状态。也就是说客户端自身负责用户状态的维持并在每次发送请求时都需要提供足够的信息。可缓存。REST系统需要能够恰当地缓存请求以尽量减少服务端和客户端之间的信息传输以提高性能。统一的接口。一个REST系统需要使用一个统一的接口来完成子系统之间以及服务与用户之间的交互。这使得REST系统中的各个子系统可以独自完成演化。 其中无状态 和 统一接口 又是 较为特别的约束条件 无状态 理解了状态 也就明白了什么叫无状态 在我的理解中 通俗的来讲就是 对于一个请求 请求中已经包含了足够的信息 并不需要服务器端自身保存任何资源 用以进行对请求的处理 资源的返回等。统一接口 每个资源都拥有一个资源标识。每个资源的资源标识可以用来唯一地标明该资源。消息的自描述性。在REST系统中所传递的消息需要能够提供自身如何被处理的足够信息。例如该消息所使用的MIME类型是否可以被缓存等。资源的自描述性。一个REST系统所返回的资源需要能够描述自身并提供足够的用于操作该资源的信息如如何对资源进行添加删除以及修改等操作。也就是说一个典型的REST服务不需要额外的文档对如何操作资源进行说明。HATEOAS。即客户只可以通过服务端所返回各结果中所包含的信息来得到下一步操作所需要的信息如到底是向哪个URL发送请求等。也就是说一个典型的REST服务不需要额外的文档标示通过哪些URL访问特定类型的资源而是通过服务端返回的响应来标示到底能在该资源上执行什么样的操作。一个REST服务的客户端也不需要知道任何有关哪里有什么样的资源这种信息。除了资源的状态 定位以外 则是对资源的操作 基于HTTP 则有 GET 读取某个资源。DELETE 删除某个资源POST POST动词会在目标URI之下创建一个新的子资源。PUT则是根据请求创建或修改特定位置的资源。此时向服务端发送的请求的目标URI需要包含所处理资源的ID.(对于put请求仍然不是很理解)Rest优点 优点是基于特性而来的 最大的特性便是 无状态。因为无状态原则的特性让RESTful在分布式系统中得到了广泛的应用它改善了分布式系统的可见性、可靠性以及可伸缩性同时有效的降低了Client与Server之间的交互延迟。其次无状态请求有较强的容错性和可伸缩性。如果一台服务器宕机无状态请求可以透明地交由另一台可用Server来处理而有状态的请求则会因为存储请求状态信息的Server宕机而承担状态丢失的风险。至于 Rest架构设计等其他 在博文中有说明 且对WebService 影响不大 在此就不再说明。 2. WebService 与 Java 在对WebService 及 SOAP 和 Rest有了基本的了解后, 接下来就是 WebService在Java中的简单实现. 2.1 SOAP方式 2.1.1 使用 JDK 方式开发 参考链接: https://www.cnblogs.com/xdp-gacl/p/4259481.html; 重点在这样几个地方: 在 接口类和实现类 均需要 WebService注解, 同时在接口类的方法上, 采用WebMethod接口在 main方法中, 用 EndPoint.publish(address, 实现类); 发布即可访问的时候通过 address.wsdl 即可访问发布的 WebService;打开命令行窗口切换到src目录执行wsimport -keep address?wsdl生成客户端代码.使用生成的java类创建实现类,调用对应的方法 接口.注解有以下几种: 类级别: javax.jws.WebService(targetNamespace , name ,serviceName ) targetNamespace :生成的 WSDL 中使用的名称空间.name:Web Service 的名称映射到 WSDL 文件中的 元素serviceName: Web Service 的服务名,映射到 WSDL 文件 元素。javax.jws.soap.SOAPBinding(parameterStyle javax.jws.soap.SOAPBinding.ParameterStyle.BARE) parameterStyle :确定方法参数是否表示整个消息正文或者参数是否是包装在以操作命名的顶层元素中的元素。默认值javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED方法级别 javax.jws.WebResult(name , targetNamespace , partName ) name:指定生成的 WSDL 中的操作结果的名称, 默认名称“return”。javax.jws.WebMethod(operationName) operationName: 指定方法公开的公共操作名映射到 WSDL 文件中的 元素。没有这个属性的话操作的公共名称将与方法名相同。javax.jws.WebParam(name,targetNamespace) name: 指定输入参数名,而不是该参数的Java;代码如下: WebService public interface IHelloWorld {WebMethodString hello(); }WebService public class HelloWorldImpl implements IHelloWorld {overridepublic String hello() {return helloWorld;} }public class Publish {public static void main(String[] args) {String address http://localhost:80/Server/Test;Endpoint.publish(address, new HelloWorldImpl());System.out.println(发布成功);} } //访问地址为: //http://localhost:80/Server/Test?wsdl//在命令行中,切换到 Src文件夹下 , wsimport -keep http://localhost:80/Server/Test?wsdl 即可.public class WebServiceDemo {public static void main(String[] args) {//创建一个用于产生WebServiceImpl实例的工厂WebServiceImplService类是wsimport工具生成的HelloWorldImplService factory new HelloWorldImplService();//通过工厂生成一个WebServiceImpl实例WebServiceImpl是wsimport工具生成的HelloWorldImpl wsImpl factory.getHelloWorldImplPort();//调用WebService的sayHello方法String resResult wsImpl.hello();} } 通过以上代码, 便实现了一个 WebService的发布, 而后访问对应的网址, 生成对应的Java, 调用并使用相应的方法及接口. 在天气, 电话号码,等等的已经开放的WebService服务在: http://www.webxml.com.cn/zh_cn/index.aspx 如: 访问2400多个城市天气预报Web服务 即可使用: http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl 通过 wsimport -keep url 即可; 当然在执行的时候可能会报错: 无法将名称 s:schema 解析为 element declaration 组件。 这个时候需要在浏览器中 打开相应的 链接, 右键另存到本地,将文件中所有出现 s:element refs:schema/s:any/ 的地方全部使用​ !--这句代码的意思, 是 定义 任意 子元素出现的总次数--s:any minOccurs0 maxOccursunbounded/ 替换掉。 而后使用 wsimport -keep 文件路径即可. 2.1.2 使用 cxf搭建WebService项目 在这之前首先要提到 Java 开发WebService的几种框架: 参考链接: JAVA开发Web Service几种框架介绍 Axisaxis2XfireCXF以及JWS, 其中 JWS 为 JavaWebService, 上面所说的 使用 JDK开发 WebService即为 JWS方式, 在 Java 1.6以后支持. 如果你需要把你的实现侧重JAVA并希望和Spring集成CXF就是更好的选择特别是把你的Web Service嵌入其他的程序中。 下面开始谈谈 cxf 开发WebService, 个人也是才开始了解 WebService 因此仅仅做出入门级的 使用开发案例. 官方 jar 包下载:http://cxf.apache.org/download.html 简单流程如下: 创建 JavaWeb项目在创建 接口和实现类的过程 与JWS并没有区别, 不过不需要创建对应的 main方法, 毕竟是与 Spring相结合, 需要在 Web.xml 和 applicationContext.xml中配置即可.下面是对应的代码: WebService public interface WebServiceDemo {//如果没有 WebMethod注解, 且配置属性, 则方法名为 print;void print(); }WebService public class WebServiceDemoImpl implements WebServiceDemo {Overridepublic void print() {// TODO Auto-generated method stubSystem.out.println(print);}}//applicationContext.xml ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:jaxwshttp://cxf.apache.org/jaxws xsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsdjaxws:endpoint idwebServiceDemo implementorzyx.webservice.demo.WebServiceDemoImpl address/webServiceDemo/ /beans//web.xml ?xml version1.0 encodingUTF-8? web-app xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlnshttp://java.sun.com/xml/ns/javaee xsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd version3.0 display-nameWebServiceDemo/display-name listenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class /listener servletservlet-nameCXFService/servlet-nameservlet-classorg.apache.cxf.transport.servlet.CXFServlet/servlet-class /servlet servlet-mappingservlet-nameCXFService/servlet-nameurl-pattern/webservice/*/url-pattern /servlet-mapping /web-app 项目启动后访问路径为: http://localhost/WebServiceDemo/webservice/webServiceDemo?wsdl 至此:使用 SOAP方式, 发布一个 WebService项目已经介绍完了. 2.2 Rest方式 至于Rest的优点, 我就不再赘述, 在 1.4 节的介绍已经足够进行简单的开发了. Java中 Restful 框架实在不少, 在这里我使用的是: Jersey 已经讲到这里了, 就将 Rest相关注解也讲一下, 有个大概的了解认识: 参考链接: REST 在 Java 中的使用 资源定位:正如之前提到的, 在统一接口 约束中的 子约束的第一条就是: 每个资源都要有 唯一标识 即 URI. ApplicationPath 标识应用路径用于由Path提供的所有资源uri的基本uri。当发布在一个servlet容器中它的值可以使用web.xml中的servlet-mapping进行重写。 path 标识要请求的资源类或类方法的uri路径。 PathParam 将uri中指定的路径参数绑定到资源方法参数 QueryParam 将http请求的Query参数绑定到资源方法参数资源类的字段或资源类的bean属性。 FormParam 与上述用法类似,不过是将http请求的Form表单中的参数绑定到资源方法参数 CookieParam 同上 HeaderParam 指的是 http header的值 MatrixParam(不太了解)将uri矩阵参数的值绑定到资源方法参数资源类的字段 DefaultValue 配置以上参数的默认值 //UserResource下的根路径Path(/user)public class UserResource {GET//传递参数 /user/user/zyx 则参数为 zyx;Path(/user/{userName})//访问方法的路径Produces(MediaType.APPLICATION_JSON)///user/user/zyx?password123 则password参数为123public User getUser(DefaultValue(zyx) PathParam(userName) String userName, QueryParam(password) String password) {...}} BeanParam 将请求中的bean绑定到资源方法参数资源类的字段或资源类的bean属性 //bean的配置javax.xml.bind.annotation.XmlRootElementpublic class UserBean{FormParam(userName)private String userName;FormParam(age)private int age;...}//资源方法配置Path(/user)public class UserRecource {javax.ws.rs.POSTPath(/insertUserBean)Consumes(MediaType.APPLICATION_FORM_URLENCODED)public String insertUserBean(BeanParam UserBean userBean){...}} 数据格式: Consumes 定义一个资源类的方法或MessageBodyReader能够接受的媒体类型。方法级别的Consumes会覆盖类级别的Consumes。(指定接受的 Client端媒体类型) Produces 方法级别的Produces会覆盖类级别的Produces(用于定义方法的响应实体的数据类型) Produces(application/json); 指定多个MIME类型 Produces({application/json,application/xml}); 也可以用常量值得方式指定: Produces(value {MediaType.APPLICATION_JSON}) 媒体类型的常量值在javax.ws.rs.core.MediaType中 同时可以为每种类型定义质量因素: 质量因素是取值范围从0到1的小数值。如果不定义质量因素那么该类型的质量因素默认为1, 如果同一请求路径对应不同的 处理 方法, 则根据 质量因素优先选取 参考链接: ttp://book.51cto.com/art/201701/529132.htm Encoded 不需要自动解码直接使用编码后的请求值代码如下: 在这里我使用的是 maven: pom.xml: project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd modelVersion4.0.0/modelVersion groupIdcn.com/groupId artifactIddemo02/artifactId packagingwar/packaging version0.0.1-SNAPSHOT/version namedemo02 Maven Webapp/name urlhttp://maven.apache.org/url dependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion4.3.8.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion4.3.8.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion4.3.8.RELEASE/version/dependency!-- https://mvnrepository.com/artifact/org.springframework/spring-orm --dependencygroupIdorg.springframework/groupIdartifactIdspring-orm/artifactIdversion4.3.8.RELEASE/version/dependency!-- https://mvnrepository.com/artifact/javax.ws.rs/jsr311-api --!-- 加了会报错 --!-- dependencygroupIdjavax.ws.rs/groupIdartifactIdjsr311-api/artifactIdversion1.1.1/version/dependency --!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --dependencygroupIdorg.springframework/groupIdartifactIdspring-aop/artifactIdversion4.3.8.RELEASE/version/dependency!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --dependencygroupIdorg.springframework/groupIdartifactIdspring-aspects/artifactIdversion4.3.8.RELEASE/version/dependency!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion4.3.8.RELEASE/version/dependency!--jersey --dependencygroupIdorg.glassfish.jersey.containers/groupIdartifactIdjersey-container-servlet-core/artifactIdversion2.13/version/dependency!--JAXB API --dependencygroupIdjavax.xml.ws/groupIdartifactIdjaxws-api/artifactIdversion2.1/version/dependency!-- Json支持 --dependencygroupIdorg.codehaus.jackson/groupIdartifactIdjackson-core-asl/artifactIdversion1.9.12/version/dependencydependencygroupIdorg.codehaus.jackson/groupIdartifactIdjackson-mapper-asl/artifactIdversion1.9.12/version/dependencydependencygroupIdorg.codehaus.jackson/groupIdartifactIdjackson-jaxrs/artifactIdversion1.9.12/version/dependency!-- https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat8-maven-plugin --!-- dependencygroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat8-maven-plugin/artifactIdversion3.0-r1756463/version/dependency --/dependencies web.xml ?xml version1.0 encodingUTF-8? web-app xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlnshttp://java.sun.com/xml/ns/javaeexsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsdversion3.0display-namedemo02/display-namewelcome-file-listwelcome-fileindex.html/welcome-filewelcome-fileindex.htm/welcome-filewelcome-fileindex.jsp/welcome-filewelcome-filedefault.html/welcome-filewelcome-filedefault.htm/welcome-filewelcome-filedefault.jsp/welcome-file/welcome-file-listlistenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listenercontext-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:applicationContext.xml/param-value/context-paramfilterfilter-namecharacterEncoding/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-paraminit-paramparam-nameforceEncoding/param-nameparam-valuetrue/param-value/init-param/filterfilter-mappingfilter-namecharacterEncoding/filter-nameurl-pattern/*/url-pattern/filter-mappingservletservlet-nameJerseyServlet/servlet-nameservlet-classorg.glassfish.jersey.servlet.ServletContainer/servlet-class!-- 配置自己的资源加载类去加载资源 --init-paramparam-namejavax.ws.rs.Application/param-nameparam-valuecn.com.easy.resource.ApplicationAPI/param-value/init-param!-- 配置默认的资源包路径使用默认的配置类去加载资源 --!-- init-param --!-- param-namejersey.config.server.provider.packages/param-name --!-- param-valuecom.cisdi.jersey.api/param-value --!-- /init-param --load-on-startup1/load-on-startup/servletservlet-mappingservlet-nameJerseyServlet/servlet-nameurl-pattern/restful/*/url-pattern/servlet-mapping /web-app 定义自己的资源加载器 /*** 这个类就是将各种资源加载进来暴露给client, 可以自由选择需要加载的资源, 日志等;* author Administrator**/public class ApplicationAPI extends ResourceConfig {{System.out.println(启动资源加载器);}public ApplicationAPI() {register(Demo.class);// 注册数据转换器register(JacksonJsonProvider.class);// 注册日志register(LoggingFilter.class);}} 定义对应的java类, 也即接口的访问程序 Path(/demo)public class Demo {GETPath(/demo01/{username })Produces(value {MediaType.APPLICATION_JSON})public String demo01(PathParam(username) String username) {return username;}} 再者就是 使用 Spring时的自定义配置, applicationContext.xml !-- 自动注册 --context:annotation-config /!-- 扫描对应的包 --context:component-scan base-packagecn.com.easy.restful / 以上就是整个项目的搭建. 我觉得项目的创建并不难, 也并不是在以后应该关注的店, 而在开发中更应该注意的是, Restful的设计风格, 很容易一不小心就走偏了. 需要对 Restful 的 资源, 状态, 等概念理解到位, 这也是我最大的收获. 后感: 个人感觉, SpringMvc 的项目搭建方式与 Restful 方式挺相近, 不过关注点不同, 在 SpringMvc 的核心点 是功能与业务逻辑, 而在Rest中, 更重要的是 资源本身, 甚至于 Get Post 等方式的选取也更重要, 以便于理清楚Rest的 资源逻辑 问题. 转载于:https://www.cnblogs.com/zyzdisciple/p/7868831.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/89286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪里有最新的网站源码本地app软件制作公司

科目编号:8 -6-6- 6 座位号 2017-2018学年度第二学期期末考试 建筑结构基础 试题 2018年 7 月 一、单选题(本大题共10小题,每小题4分,共计40分) (★请考生务必将答案填入到下面对应序号的答题框中★&#…

兰考县住房和城乡建设局网站外国购物网站设计风格

文章目录 1 自回归模型AR Model1.1 自回归模型 vs 多元线性回归模型1.1.1 线性回归1.1.2 AR(1)模型1.1.3 AR(p)模型 1.2 AR建模问题 2 移动平均模型 MA Model2.1 MA模型的数学表示2.1.1 MA(1)模型2.2.2 MA(q)模型 2.2 MA建模问题 ARIMA模型是AR模型(自回归模型&…

求西北地区网站建设专家 西安沉睡网络 官方网址?网站建设行业细分

1.Three.js 实现模型材质局部辉光效果 2.解决辉光效果影响场景背景图显示的问题 相关API的使用: 1. EffectComposer(渲染后处理的通用框架,用于将多个渲染通道(pass)组合在一起创建特定的视觉效果) 2. …

简单的网站建设步骤网站图片居中代码

文字排版--粗体 我们还可以使用css样式来改变文字的样式:粗体、斜体、下划线、删除线,可以使用下面代码实现设置文字以粗体样式显示出来。 p span{font-weight:bold;} 在这里大家可以看到,如果想为文字设置粗体是有单独的css样式来实现的&…

企业网站建设大概的费用清远市发布

深度优先搜索DFS搜索 DFS:从根节点出发,寻找子节点,到最深层返回到上一层继续递归搜索。 B3621 枚举元组 题目传送 题面 题目描述 n 元组是指由 n 个元素组成的序列。例如 (1,1,2) 是一个三元组、(233,254,277,123)是一个四元组。 给定…

网站设计论文答辩问题及答案品划做网站

反转字符串中的元音字符Given a string and we have to eliminate/ remove all vowels from the string using C program. 给定一个字符串,我们必须使用C程序从字符串中消除/删除所有元音。 To eliminate/remove the vowels 消除/删除元音 We will traverse (reac…

设计类的网站和简介怎么开通自己的微信公众号

本文非原创 可分为:交叉连接、内连接、外连接、自连接 1.使用交叉连接: 它是非限制连接,就是将两个表格不加任何条件的组合在一起, 即第一个表格的所有记录分别和第二个表格的每一条记录相连接 组合成新的记录,连接后结…

网站免费在线观看app大全免费软件下载安装

文章目录 问题举例问题分析解决办法问题举例 我们在使用ArcGIS时经常会碰到这样的问题:将地图文档(.mxd)保存到本地并拷贝到别的电脑上或改变一个路径时,出现数据丢失的现象,具体表现为图层前面出现一个红色的感叹号,如下图所示。 出现以上问题的根本原因是数据GSS.tif的…

帝国程序如何改网站标题单位门户网站功能

注意:本节主要讲React中的虚拟DOM,但是虚拟DOM并不是React中特有的内容。 1. React 中虚拟 DOM是什么? 虚拟DOM是对真实DOM的描述,虚拟DOM是JS对象,实际上就是 JSX 通过 babel 转换成 React.createElement()&#xff…

网站建设 网页设计 网站制作织梦猫html5高端网络服务机构网站模板

数组的创建和使用 奇数位于偶数之前冒泡排序两数之和只出现一次的数字多数元素存在连续三个奇数的数组 奇数位于偶数之前 调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。 如数组:[1,2,3,4,5,6] 调整后可能是:[1, 5, 3, 4, 2,…

西安网站开发定制制作后台网站开发文档

六大设计原则 1、单一职责原则 一个类或者模块只负责完成一个职责或者功能。 2、开放封闭原则 规定软件中的对象、类、模块和函数对扩展应该是开放的,对于修改应该是封闭的。用抽象定义结构,用具体实现扩展细节。 3、里氏替换原则 如果S是T的子类型…

帝国cms网站名称零基础网站建设教学公司

在现代前端开发中,搭建一个高效、灵活、易用的后台管理系统并不容易。然而,Vue3 的出现为我们提供了一个备受瞩目的选择。作为一个现代化的前端框架,Vue3 具有众多优点,能够帮助开发者快速搭建企业级中后台产品原型。 今天&#…

引航科技提供网站建设深圳市宝安区石岩街道

如果这篇博客对您有用的话,可以给我点个赞吗,这对我很重要,谢谢!❤️ 2.1.4 进程通信 知识总览 2.1.4.1 什么是进程通信 顾名思义,进程通信就是指进程之间的信息交换。 进程是分配系统资源的单位(包括内…

艺术网站源码设计制作一个保温杯教学反思

真正的有钱人对金钱持非常严肃的态度,即便是拿来投机也要小心睿智,物尽其用。这里的投机并不是指非理性的赌博,而是指为了追求更高收益而采取的市场投资行为。卡西研究所资深分析师Louis James总结了富豪们投机成功的9个秘诀。 秘诀1&#…

thinkphp开发的网站wordpress 提问模板

Linux系统操作命令 一、文件管理 ls:列出当前目录下的文件和文件夹。 ls -l:以详细列表的形式显示文件的权限、所有者和大小等信息。 cd:切换当前目录。 cd ..:返回上一级目录。cd /:返回根目录。 pwd:显示…

moodle网站建设工厂采购信息网

文件描述符 fd是一个>0 的整数 每打开一个文件,就创建一个文件描述符,通过文件描述符来操作文件 预定义的文件描述符: 0:标准输入,对应于已打开的标准输入设备(键盘) 1:标准输出,对应于已打开的标准输出设备(控制台) 2.标准错误…

网站首页建设网从seo角度谈网站建设

目录 文章目录 以从备份恢复forest_resources库为例一、备份数据库二、需要还原的数据库准备1 删除掉远程的库。2 重新创建一个空的库。可以使用sql3 找到数据库存放的路径,并将备份文件上传到对应的路径下 三、 进入docker容器内部,执行数据库恢复附录…

大连网站建设详细流程中国建设教育网官方网站

堆是将一组数据按照完全二叉树的存储顺序,将数据存储在一个一维数组中的结构。 大顶堆:任意节点的值均大于等于它的左右孩子,并且最大的值位于堆顶,即根节点处。 小顶堆:任意节点的值均小于等于它的左右孩子&#xff0…

网站强制使用极速模式做彩票生意要登陆哪个网站

给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束…

怎么用qq邮箱做网站无经验能做sem专员

主线程 任务1,任务2 微队列微队列任务1, 微队列任务2延时队列延时队列任务1, 延时队列任务2交互队列.... 事件循环的工作原理 主线程执行同步任务: 主线程首先执行所有同步任务(即栈中的任务)。这些任务会…