`

关于规范,以及一个疑问

阅读更多
规范(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个与抗震设计相关的问题,并将其分为多个章节进行阐述,旨在帮助建筑设计、审图、科研人员...

    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规范中文版。规范是最严谨、标准的手册,一切答案都...

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

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

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

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

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

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

    中国移动彩信业务规范

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

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

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

    蓝牙协议规范core_v4.2

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

Global site tag (gtag.js) - Google Analytics