规范(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”这种
分享到:
相关推荐
王亚勇、戴国莹两位专家在深入研究和解答这些问题的基础上编写了《建筑抗震设计规范疑问解答》一书,该书系统地回答了231个与抗震设计相关的问题,并将其分为多个章节进行阐述,旨在帮助建筑设计、审图、科研人员...
Servlet3.1规范是Java Servlet技术的一个版本,它在Java EE平台中扮演着重要的角色。Java EE(Java Platform, Enterprise Edition)是一个为开发企业级应用提供的平台,而Servlet是Java EE技术中用于处理Web请求的...
- 下拉框中应显示一个默认值,列表框中高亮度显示一个默认值。 - 对输入信息类型有限制的文本框应在输入非法值后给予提示。 ##### 3.5 快捷键 - 在同一系统中,同样的操作最好使用一致的快捷键。 - 常用的快捷键...
2.0版的规范旨在用于产品设计,它着重于提供一个一致性和可实施性强的标准。在修订过程中,每一步都力求确保规范的完整性与一致性,以便于产品的实际开发。 #### 四、技术细节 USB 2.0规范在原有的USB 1.x基础上...
- **IPMB_SDA针脚**:这是一个I2C数据总线,连接后平面中的所有插槽。 - **IPMB_SCL针脚**:与上述数据线相关的时钟信号。 - **IPMB_PWR针脚**:为IPMB节点供电的电源针脚。 - 在最初审议并通过的草案中,这些...
微软软件设计规范书撰写技巧是IT行业中的一个重要知识点,它涉及到软件工程中关于软件设计、文档编制和项目管理的核心原则。下面将详细阐述这一主题,包括软件设计规范书的重要性和撰写技巧。 ### 软件设计规范书的...
例如,一个包含丙类厂房和办公楼的厂区,其消防水量应按厂房和办公楼要求计算,然后根据市政供水情况选择合适的消防给水方案。 - 方案A、B、C分别对应市政供水不同条件下的设计方案,涉及室内外消防系统分离、高位...
机械排烟系统与其他消防设施的联动也是一个重要知识点。新版规范要求,设置有机械排烟、防烟系统的场所,应当与火灾自动报警系统实现联锁。这包括那些设有防火卷帘、防火门的建筑。联动设计的目的是为了确保在火灾...
css规范和属性速查手册,网上有很多版本,但是我建议大家到真正的原翻译者的网站,Taylor Ren,W3C的CSS2多语言翻译计划中文组的成员,这个资源就是他最新翻译的CSS2规范中文版。规范是最严谨、标准的手册,一切答案都...
Java Servlet 3.1规范是Java Servlet API标准的一个版本,它为Java Servlets提供了一个完整和清晰的解释。该规范的目的是定义Java Servlets的API,包括其中的类、接口和方法签名,并提供相关文档。此版本的Servlet...
在建筑行业中,临建(临时建设)的规范性是一个重要的方面,它不仅涉及建筑物的安全性,还包括了防火等方面的规定。根据所提供的文件信息,我们可以提炼出以下几个重要的知识点: 1. 临建规范的重要性:临建作为...
同时,还设有客户服务热线,解答用户关于彩信使用过程中的疑问和问题。 6. **安全与隐私**:中国移动对用户的个人信息和通信内容进行保护,遵循相关法律法规,确保用户数据的安全和隐私不被侵犯。 7. **兼容性**:...
《建设工程工程量清单计价规范》是指导建设工程招投标和工程计价的重要文件,它规定了工程量清单的编制原则、计价方式以及处理各种工程变更的一般性规则。以下是该规范涉及的一些关键知识点: 1. **项目特征描述的...
文档中还提及了蓝牙技术规范的版权及相关的知识产权使用规定,这是关于如何合理使用规范文档以及与规范相关的专利、版权和商标等方面的重要信息。规范文档的使用受到蓝牙技术促进者成员之间以及蓝牙SIG与其接纳成员...
**研究报告的编写方式**:本研究报告基于预研报告,对预研报告中的每一个需要解释和说明的部分进行了注解和详细阐述,同时对未明确或不适用的内容提出了疑问,以便进一步讨论和解决。 **参考标准**:报告引用了一...
无论项目的贡献者有多少,代码的风格应保持一致,就如同它们是由一个人编写的一样。这意味着要严格执行统一的风格,当存在疑问时,应遵循现有的、广泛接受的模式。 ### 空格 在CSS代码中,空格的使用对于代码的...