论坛首页 Java企业应用论坛

关于规范,以及一个疑问

浏览 3018 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-07   最后修改:2012-08-07
规范(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”这种
   发表时间:2012-08-08  
规范有3种角色的参与者,规范制定者(也就是JCP),提供商(Provider),以及使用者(开发人员)

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

我看到tomcat里,有一个servlet-api.jar,我就很好奇是谁提供的,就下载了源码跟进去看了一下
0 请登录后投票
   发表时间:2012-08-08  
kevincollins 写道
规范有3种角色的参与者,规范制定者(也就是JCP),提供商(Provider),以及使用者(开发人员)

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

我看到tomcat里,有一个servlet-api.jar,我就很好奇是谁提供的,就下载了源码跟进去看了一下


fadsfasdf
0 请登录后投票
   发表时间:2012-08-08  
kevincollins 写道
kevincollins 写道
规范有3种角色的参与者,规范制定者(也就是JCP),提供商(Provider),以及使用者(开发人员)

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

我看到tomcat里,有一个servlet-api.jar,我就很好奇是谁提供的,就下载了源码跟进去看了一下


fadsfasdf

vvvvvvvvvvvvvvvvvvv
0 请登录后投票
   发表时间:2012-08-08   最后修改:2012-08-08
原来看过Maven的教程上提到过:“Hibernate是一个例子,Hibernate依赖于 Sun JTA API JAR,它不能用于中央Maven库,因为它不能免费再分发。幸运的是, Apache Geronimo项目已经创建这个库的一个依赖实现,它可以被免费再分发。”

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

规范的api.jar通过认证就行。

引用
作为开发者,怎么获取规范对应的jar包?比如说“jms-api-1.1.jar”这种

通过Maven
http://mvnrepository.com/
https://github.com/apache/geronimo-specs
0 请登录后投票
   发表时间:2012-08-08  
谢谢你啊,有点概念了

另外,除了你说的Maven的方法外,还有一个办法。eclipse有一个orbit项目,里面提供了大部分规范对应的jar包,还附有源码。只是我不知道是咋来的

http://eclipse.org/orbit/
0 请登录后投票
   发表时间:2012-08-09   最后修改:2012-08-09
http://eclipse.org/orbit/
我下载了一个javax.el的jar,里面有about_file,按它自己的说法是从Glassfish Website提取的源码和二进制文件,Eclipse自己打包为OSGi Bundle。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics