浏览 3018 次
锁定老帖子 主题:关于规范,以及一个疑问
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-08-07
最后修改:2012-08-07
有了规范之后,开发人员就可以自由选择提供商实现,使用者的代码,不与具体的提供商绑定,以实现松耦合 比如说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”这种 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-08-08
规范有3种角色的参与者,规范制定者(也就是JCP),提供商(Provider),以及使用者(开发人员)
不过我就有一个疑问,规范的api.jar,到底是谁来提供的呢,又应该从哪里获取到? 我看到tomcat里,有一个servlet-api.jar,我就很好奇是谁提供的,就下载了源码跟进去看了一下 |
|
返回顶楼 | |
发表时间:2012-08-08
kevincollins 写道 规范有3种角色的参与者,规范制定者(也就是JCP),提供商(Provider),以及使用者(开发人员)
不过我就有一个疑问,规范的api.jar,到底是谁来提供的呢,又应该从哪里获取到? 我看到tomcat里,有一个servlet-api.jar,我就很好奇是谁提供的,就下载了源码跟进去看了一下 fadsfasdf |
|
返回顶楼 | |
发表时间:2012-08-08
kevincollins 写道 kevincollins 写道 规范有3种角色的参与者,规范制定者(也就是JCP),提供商(Provider),以及使用者(开发人员)
不过我就有一个疑问,规范的api.jar,到底是谁来提供的呢,又应该从哪里获取到? 我看到tomcat里,有一个servlet-api.jar,我就很好奇是谁提供的,就下载了源码跟进去看了一下 fadsfasdf vvvvvvvvvvvvvvvvvvv |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2012-08-08
谢谢你啊,有点概念了
另外,除了你说的Maven的方法外,还有一个办法。eclipse有一个orbit项目,里面提供了大部分规范对应的jar包,还附有源码。只是我不知道是咋来的 http://eclipse.org/orbit/ |
|
返回顶楼 | |
发表时间:2012-08-09
最后修改:2012-08-09
http://eclipse.org/orbit/
我下载了一个javax.el的jar,里面有about_file,按它自己的说法是从Glassfish Website提取的源码和二进制文件,Eclipse自己打包为OSGi Bundle。 |
|
返回顶楼 | |