暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Tomcat深入研究文章之五(Tomcat之下载)

中间件技术讨论圈 2016-03-11
367

Tomcat的下载从来不引人注目,但是我觉得搞清楚下载这些jar有什么用,对大家是很有好处的,

我们来看一下Tomcat官方提供的几个下载内容,以8.0.32为例:

整体上来分为二进制包下载和源码下载。


1.源码下载

源码下载为上述所有二进制包的源码,内含有编译打包的全部配置文件,源代码文件:


bin:脚本文件,打包之后也是bin目录

conf:对应配置文件

java:tomcat的所有源代码

modules:tomcat的模块,其实就是tomcat默认自带的数据库连接池jdbc-pool的源码

res:tomcat依赖的一些工具支撑,如checkstyle,maven,eclipse-ide支撑的源码等等

test:tomcat的单元测试,这个其实大多数人都非常忽略这个,但是确实窥探tomcat源码的一个入口

webapps:对应的默认的tomcat中的web应用的源码,含有管理控制台等应用

在根目录执行ant ,就可以将对应的tomcat编译到指定的目录中。

值得注意的一说是,在编译前,需要制定tomcat编译出来的目录,见下面的指定:



2.二进制Core下载


核心下载,就是Tomcat的主文件,一共分为几种不同的下载方式,

直接可以解压的:zip格式,tar.gz格式的,直接解压,然后就可以执行

windows不同位数:对于32位和64位这种的,dll文件是不一样的,这些dll文件的作用就是让tomcat可以变成系统服务,


上述的Windows的安装版本都不一样。


3.全部文档下载


这里的全部文档指的不仅仅是 docs 这个已经部署在tomcat中的文档应用,而是比这个应用还要全,

不单单包含User guide等内容,还包括tomcat和JAVA EE的API,也就是docs 应用中不能用的在这个文档中都可以看到。


4.Deployer下载


这个Deployer工具,其实是一个ant的工程,它的作用是利用Tomcat Manager(也就是Manager应用对单机Tomcat的部署管理),

这个Tomcat Manager应用不单单在页面上提供了应用部署等一些接口,可以通过http进行部署,如:


而这个Deployer工具,正式调用这个Tomcat Manager进行部署本地的应用,只不过这里调用的实现是通过ant来做的:


在build.xml中提供了几个ant的命令:


除了应用部署,启动,停止,解部署,重部署之外,还提供了jsp的编译工具(实际也就是调用jsaper的实现,对jsp进行编译)。

执行方式是,在当前根目录中需要定义一个deployer.properties文件,在这个文件中定义下面的key,value的键值对:


这些键值对其实在ant的build.xml文件中也可以进行修改:



5.扩展功能下载


JMX Remote jar:

这个jar是Tomcat提供的JMX的远程接口,可以看看这个jar中的内容:


这个JMX是作为一个lifecycle加载到Tomcat中的,当这个服务开启以后,JMX服务就在服务端开启,

要使用的时候,首先需要加上这个lifecycle:

其次,需要在服务端加上jmx的启动参数:


然后,客户端通过jmx的url字符串,


就可以实现实时管理Tomcat了;

Web services jar:

JSR109的加入,可以让Webservice更好的融入到JAVA EE体系中来,这是一个比较有意思的规范,

从客户端的角度上来看,用户可以通过JNDI去访问发布的webservice:


对于服务器端,也可以通过原注释来引入Webservice服务:


另外,对于EJB,Servlet等原有JAVA EE的组件,这个规范定义了如何将现有的这些组件很容易就可以转变为

Webservice服务,并同步其二者的生命周期,事务等等。

有兴趣可以去 https://www.jcp.org/en/jsr/detail?id=109 看看这个规范的具体的spec。

对于tomcat来说,其提供了JSR109的API的Factory工厂,也就是基础设施,

说白了就是:


当你引入这个catalina-ws.jar包之后,你还需引入webservice的实现,才能按照JSR109规范的用法进行使用,

从jar的源码中也可以看到,其并没有提供webservice的全部实现,仅仅就是一个工厂:


JUL logger jar:

Tomcat中的日志一共可以配置成三种模式:

1.默认的JUL,也就是tomcat基于java,util.logging制作的一款默认的日志输入器

2.Servlet规范定义的日志:


也就是说,可以:


3.上述两种都是默认并且是规范固定的,如果想自定义扩展,tomcat需要提供一种机制,进行切换,


JULI的adapters是提供了一种适配器,例如想插入Log4j,需要下载这个适配器的jar,这个jar包可以自动发现log4j,从源码也可以看出来:


并且需要下载默认的jul的logger的包替换掉原有的tomcat-jul包。

这就是上述两个包的用途,在User Guide的logging中,有非常详细的描述。


6.tomcat嵌入式下载

jetty是非常轻量级的web容器,而tomcat同样可以也可以做,这个下载解压出来的这些jar包,就是一个最精简的Tomcat集合:


使用的时候,也非常简单,但是对于Tomcat的基本运行结构还是不能变的:

<Server>
  <Service>
    <Connector />
    <Engine>
      <Host>
        <Context 1/>
        <Context 2/>
        <Context n…/>
      </Host>
    </Engine>
  </Service>
</Server>

导入这些jar包,可以按照下面程序,将Tomcat嵌入进去:

在具体应用时启动嵌入式Tomcat,需要根据以下步骤(主要是参照上面的结构图):
1)创建org.apache.catalina.startup.Embedded实例,其代表嵌入式Tomcat Server的实例;
2)创建org.apache.catalina.Engine 实例,代表上面XML结构示例中的Engine,作为容器用来包含Host节点;
3)创建org.apache.catalina.Host实例,代表虚拟主机服务,把它加入到2)中产生的Engine中去;
4)创建一个或多个org.apache.catalina.Context实例,代表具体Web应用,每个Web应用都需要加入到3)产生的Host中;
5)最后创建org.apache.catalina.Connector实例,把它加入2)创建的Engine中,它用来接收客户发出的请求。

  1. import java.io.File;  

  2. import java.net.InetAddress;  

  3. import java.net.UnknownHostException;  

  4.   

  5. import org.apache.catalina.Context;  

  6. import org.apache.catalina.Engine;  

  7. import org.apache.catalina.Host;  

  8. import org.apache.catalina.startup.Embedded;  

  9.   

  10. public class TomcatService {  

  11.     private static Embedded tomcat;  

  12.   

  13.     public static void main(String[] args) {  

  14.         // set the path for tomcat embed  

  15.         String path = "F:/myDaRepository/apache-tomcat-embed";  

  16.         Embedded tc = createTomcat(path);  

  17.         try {  

  18.             tc.start();  

  19.             System.out.println("Tomcat Server start over");  

  20. //          tc.stop();  

  21.         } catch (Exception e) {  

  22.             e.printStackTrace();  

  23.         }  

  24.     }  

  25.   

  26.     private static Embedded createTomcat(String path) {  

  27.         // create Tomcat Server Instance  

  28.         tomcat = new Embedded();  

  29.         // set the tomcat home  

  30.         tomcat.setCatalinaHome(path);  

  31.         // create the Tomcat engine  

  32.         Engine engine = tomcat.createEngine();  

  33.         engine.setName("MyTestServer");  

  34.         // create the host  

  35.         Host host = tomcat.createHost("localhost", tomcat.getCatalinaHome()  

  36.                 + "/webapps");  

  37.         // put the host into engine  

  38.         engine.addChild(host);  

  39.         engine.setDefaultHost(host.getName());  

  40.   

  41.         String javayouPath = host.getAppBase() + "/CloudscapeDemo";  

  42.         if (!new File(javayouPath).exists()) {  

  43.             System.err.println("Please test if the javayou exists");  

  44.             return null;  

  45.         }  

  46.         System.out.println("javayouPath"+javayouPath);  

  47.         // create the context, and add it to the host  

  48.         Context ctxtJavayou = tomcat  

  49.                 .createContext("/CloudscapeDemo", javayouPath);  

  50.         host.addChild(ctxtJavayou);  

  51.   

  52.         tomcat.addEngine(engine);  

  53.         try {  

  54.             // put the Connector to Tomcat,listen the local visit from 127.0.0.1  

  55.             tomcat.addConnector(tomcat.createConnector(InetAddress  

  56.                     .getByName("127.0.0.1"), 8080false));  

  57.         } catch (UnknownHostException e) {  

  58.             System.err.println("can not bind tomcat Server to the localhost 127.0.0.1:8080;test the host is free");  

  59.             e.printStackTrace();  

  60.             tomcat = null;  

  61.         }  

  62.         return tomcat;  

  63.     }  

  64.   

  65.     public void shutdown() throws Exception {  

  66.         tomcat.stop();  

  67.     }  

  68. }  

这是最精简的Tomcat的代码,创建了一个/CloudscapDemo的应用,并配置了一个Connector的localhostde 8080端口

进行了舰艇,你可以直接访问 http://localhost:8080/CloudscapeDemo/xxx.jsp 就可以浏览Tomcat了。


文章转载自中间件技术讨论圈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论