`

关于规范,以及一个疑问

阅读更多
规范(Specification),有时也叫做“标准”,一般称为JSR-xxx,我的理解是:为了解决特定范围的问题,而设计的一系列接口和机制的集合

有了规范之后,开发人员就可以自由选择提供商实现,使用者的代码,不与具体的提供商绑定,以实现松耦合

比如说JSR315,也就是Servlet3.0规范,定义了Filter、Servlet、ServletRequest、ServletResponse等一系列接口,并规定了这些接口应该提供哪些功能,然后tomcat、jboss、WAS等servlet容器,就实现了这个规范。

开发人员开发的web应用,如果是仅仅依赖于servlet-api,不依赖某个厂商的特定实现类,那么这个web应用,应该是无论在哪个servlet容器中,都能部署的

单个或者几个接口,还不足以成为规范。比如spring框架中定义了一组接口ApplicationContext、BeanFactory、BeanDefinitionReader等。spring自己提供了实现,开发人员也可以对spring框架进行扩展。但是这还不能称为一种规范。

如果高度上升一点,比如称为JSR-xxx,Java Dependence Injection,然后规定一系列的接口,由不同的框架提供商来实现,大概就可以称为一种规范了

规范有3种角色的参与者,规范制定者(也就是JCP),提供商(Provider),以及使用者(开发人员)

不过我就有一个疑问,规范的api.jar,到底是谁来提供的呢,又应该从哪里获取到?

我看到tomcat里,有一个servlet-api.jar,我就很好奇是谁提供的,就下载了源码跟进去看了一下
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package javax.servlet;

import java.io.IOException;

/**
 * Defines methods that all servlets must implement.
 * 
 * <p>
 * A servlet is a small Java program that runs within a Web server. Servlets
 * receive and respond to requests from Web clients, usually across HTTP, the
 * HyperText Transfer Protocol.
 * 
 * <p>
 * To implement this interface, you can write a generic servlet that extends
 * <code>javax.servlet.GenericServlet</code> or an HTTP servlet that extends
 * <code>javax.servlet.http.HttpServlet</code>.
 * 
 * <p>
 * This interface defines methods to initialize a servlet, to service requests,
 * and to remove a servlet from the server. These are known as life-cycle
 * methods and are called in the following sequence:
 * <ol>
 * <li>The servlet is constructed, then initialized with the <code>init</code>
 * method.
 * <li>Any calls from clients to the <code>service</code> method are handled.
 * <li>The servlet is taken out of service, then destroyed with the
 * <code>destroy</code> method, then garbage collected and finalized.
 * </ol>
 * 
 * <p>
 * In addition to the life-cycle methods, this interface provides the
 * <code>getServletConfig</code> method, which the servlet can use to get any
 * startup information, and the <code>getServletInfo</code> method, which allows
 * the servlet to return basic information about itself, such as author,
 * version, and copyright.
 * 
 * @version $Version$
 * 
 * @see GenericServlet
 * @see javax.servlet.http.HttpServlet
 */
public interface Servlet

可以看到,JSR315的API是由Apache基金会提供的,这里就觉得比较奇怪,为什么不是由JCP来提供这个规范的api.jar包?毕竟规范是由JCP制定的

难道规范的api.jar也是由各实现提供商自行提供吗?虽然理论上来说也是可以的,因为如果各实现都严格遵循规范的话,那么提供的接口也应该是一致的。但是还是觉得这个jar包,应该是由“官方”提供,比较合乎逻辑一点。像rfc2616这样的协议,不都是由官方提供的吗,只不过不需要提供二进制发布包而已

然后像今天想研究一下jms1.1,规范文档倒是很容易可以下载到,但是就找不到一个api.jar,下载了ActiveMQ,倒是找到了geronimo-jms_1.1_spec-1.1.1.jar,不过就感觉不对劲,看名字就觉得好像是跟实现绑定的

知道这2个问题的朋友请解答一下:

规范对应的jar包是由官方提供的,还是由实现提供商提供的?

作为开发者,怎么获取规范对应的jar包?比如说“jms-api-1.1.jar”这种
分享到:
评论
3 楼 kyfxbl 2012-08-08  
原来是这样,感谢啊!
2 楼 vvvpig 2012-08-08  
可以参考
http://stackoverflow.com/questions/3622773/java-net-maven-repo-jms-artifact-missing
1 楼 vvvpig 2012-08-08  
其实你用过maven有时候会遇到sun的依赖,但是由于这些依赖在sun的java.net私有网站上不能公开下载,所以别的组织会提供自己的api实现包,由于Oracle的收购同时关掉了很多项目,一些老的项目都可以在java.net的网站上下载到,包括规范和api参考实现,但是那个网站特别难用

相关推荐

    《建筑抗震设计规范》GB 50011-2001疑问解答

    王亚勇、戴国莹两位专家在深入研究和解答这些问题的基础上编写了《建筑抗震设计规范疑问解答》一书,该书系统地回答了231个与抗震设计相关的问题,并将其分为多个章节进行阐述,旨在帮助建筑设计、审图、科研人员...

    Servlet3.1规范中文版

    Servlet3.1规范是Java Servlet技术的一个版本,它在Java EE平台中扮演着重要的角色。Java EE(Java Platform, Enterprise Edition)是一个为开发企业级应用提供的平台,而Servlet是Java EE技术中用于处理Web请求的...

    GUI规范 界面规范 GUI测试

    - 下拉框中应显示一个默认值,列表框中高亮度显示一个默认值。 - 对输入信息类型有限制的文本框应在输入非法值后给予提示。 ##### 3.5 快捷键 - 在同一系统中,同样的操作最好使用一致的快捷键。 - 常用的快捷键...

    USB 2.0 协会规范

    2.0版的规范旨在用于产品设计,它着重于提供一个一致性和可实施性强的标准。在修订过程中,每一步都力求确保规范的完整性与一致性,以便于产品的实际开发。 #### 四、技术细节 USB 2.0规范在原有的USB 1.x基础上...

    cpci规范 3.0版

    - **IPMB_SDA针脚**:这是一个I2C数据总线,连接后平面中的所有插槽。 - **IPMB_SCL针脚**:与上述数据线相关的时钟信号。 - **IPMB_PWR针脚**:为IPMB节点供电的电源针脚。 - 在最初审议并通过的草案中,这些...

    微软软件设计规范书撰写技巧

    微软软件设计规范书撰写技巧是IT行业中的一个重要知识点,它涉及到软件工程中关于软件设计、文档编制和项目管理的核心原则。下面将详细阐述这一主题,包括软件设计规范书的重要性和撰写技巧。 ### 软件设计规范书的...

    设计规范疑问消防及给排水.docx

    例如,一个包含丙类厂房和办公楼的厂区,其消防水量应按厂房和办公楼要求计算,然后根据市政供水情况选择合适的消防给水方案。 - 方案A、B、C分别对应市政供水不同条件下的设计方案,涉及室内外消防系统分离、高位...

    CSS 2 规范中文版(目前网络上最规范最标准的速查手册)

    css规范和属性速查手册,网上有很多版本,但是我建议大家到真正的原翻译者的网站,Taylor Ren,W3C的CSS2多语言翻译计划中文组的成员,这个资源就是他最新翻译的CSS2规范中文版。规范是最严谨、标准的手册,一切答案都...

    Servlet3.1规范(最终版)

    Java Servlet 3.1规范是Java Servlet API标准的一个版本,它为Java Servlets提供了一个完整和清晰的解释。该规范的目的是定义Java Servlets的API,包括其中的类、接口和方法签名,并提供相关文档。此版本的Servlet...

    临建各种规范(包括防火)

    在建筑行业中,临建(临时建设)的规范性是一个重要的方面,它不仅涉及建筑物的安全性,还包括了防火等方面的规定。根据所提供的文件信息,我们可以提炼出以下几个重要的知识点: 1. 临建规范的重要性:临建作为...

    新版消防规范执行过程中的疑问探讨正式.docx

    在新版消防规范执行过程中,涉及多个关键知识点,主要包括消防控制室的设置要求、儿童活动场所的定义、高层公共建筑的火灾报警系统配置、机械排烟系统与其他消防设施的联动、住宅建筑内火灾探测器的设置、消防用电...

    专题资料(2021-2022年)《建筑防腐蚀工程施工及验收规范》.docx

    第一章总则中强调了规范制定的目的,适用范围,原材料的质量控制,配合比的确定以及遵循其他相关标准的规定。其中,原材料必须符合规范,且存在疑问时需进行复验,配合比不得随意更改。 第二章基层处理及要求详细...

    中国移动彩信业务规范

    同时,还设有客户服务热线,解答用户关于彩信使用过程中的疑问和问题。 6. **安全与隐私**:中国移动对用户的个人信息和通信内容进行保护,遵循相关法律法规,确保用户数据的安全和隐私不被侵犯。 7. **兼容性**:...

    建设部标准定额研究所关于《建设工程工程量清单计价规范》有关问题释疑可用.pdf

    《建设工程工程量清单计价规范》是指导建设工程招投标和工程计价的重要文件,它规定了工程量清单的编制原则、计价方式以及处理各种工程变更的一般性规则。以下是该规范涉及的一些关键知识点: 1. **项目特征描述的...

    蓝牙协议规范core_v4.2

    文档中还提及了蓝牙技术规范的版权及相关的知识产权使用规定,这是关于如何合理使用规范文档以及与规范相关的专利、版权和商标等方面的重要信息。规范文档的使用受到蓝牙技术促进者成员之间以及蓝牙SIG与其接纳成员...

    3GPP中文规范

    **研究报告的编写方式**:本研究报告基于预研报告,对预研报告中的每一个需要解释和说明的部分进行了注解和详细阐述,同时对未明确或不适用的内容提出了疑问,以便进一步讨论和解决。 **参考标准**:报告引用了一...

Global site tag (gtag.js) - Google Analytics