整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

你一定不知道IDE里的Tomcat是怎么工作的

注于Java领域优质技术号,欢迎关注

作者:Tomcat那些事儿

如果正在阅读本文的你是一名开发者,那么一定听说过EclipseIntellij IDEA这两款可以称之为神器的集成开发环境(IDE)。

Eclipse以其代码开源、插件众多、扩展方便等特点,可以通过配置支持多种开发语言,用户众多。

Intellij IDEA则是分为社区版和专业版。由于是商业公司在维护和更新,因此专业版有更丰富的功能,使用起来更便捷,但如果只使用社区版,则一大块功能不能使用。

当然,我们今天要讨论的不是两个IDE孰优孰劣,而是简要分析下Tomcat在这两个使用量巨大的IDE中是如何工作的。


  1. Eclipse
  2. 首先来看下Eclipse,通过配置将本地已经下载好的Tomcat添加到Server中。之后,在部署Web应用的时候,就可以选择已经配置好的Tomcat。此时,通过启动的Log,我们来看下其背后的原理。

仔细看上面的蓝框内,是一个类似tomcat的webapps这个应用部署目录的文件路径,而且命令也是wtp.deploy。而wtp也是Eclipse的一个插件。我们再顺着这个路径,在本地打开看下。

这个是上层目录,我们看到基本上除了Tomcat的bin目录和lib目录,剩下的差不多都在了。

其中conf下的文件有这些

可以看出和Tomcat的配置文件一个样子。

再用上一篇文章里提到的jps命令查看下具体执行时的参数,就基本理解了

上面这张图中,-D后面是JVM启动时传递的参数,其中catalina.base,是代表Tomcat具体执行时,所有这些配置文件一类的资源具体查找的路径,所有这些配置,在Tomcat启动后,都会被解析得到,所以这些独立位置的配置文件才能生效。那如果要在一个IDE里跑多个Tomcat该怎么办呢?

有了上面的分析你一定会说,so easy.只需要指定不同的catalina.base,在其对应的路径下配置不同的文化的已 可以了。

对,影响一个操作系统中是否可以同时存在多个Tomcat,或者引申开来,即多个应用程序,无非是说端口这一类的资源没有被占用即可。

而Tomcat,在本公众号第三篇文章分析具体内部组件时看过,server.xml中可以配置Http通道,AJP通道这两个是涉及到端口的,只要端口号使用不同的即可。

另外一个经常被忽略的是,Server下标签下的port,默认是8005,这个也是会冲突的。需要注意下。


有了上面的分析,我们可以大致理清头绪了。在Eclipse里,Tomcat的执行是通过指定不同的catalina.base来实现自定义不同的通道端口的配置,应用文件部署目录等,从而可以在IDE内方便的使用之。

  1. Intellij IDEA
  2. 下面再来看下Intellij IDEA。在启动Tomcat时,Log一开始就能看到类似于下面的内容:

注意蓝框中对应的内容,和在上面分析Catalina.base基本一致。为了严谨,还是要看一眼这个目录内对应的内容

可以看出,实现思路和上面的分析基本一致,我们不再多谈。

但这里和Eclipse的插件实现的区别是,这里并没有指定wtp.deploy这个类似的属性,所以在上图的webapps目录内并没有我们要运行的应用的内容。那这个时候,IDEA内部是怎么实现应用的部署的呢?



在IDEA里,向tomcat部署一个应用,启动时,其实并不会在本地的tomcat中找到该应用的目录,或者实际运行的目录下有该应用。仔细观察发现,IDEA是通过Tomcat的MBean,动态的向tomcat增加了一个Context,即一个应用。这****样直接指定了应用的路径,访问路径等

例如下面的调用链:

TCP Connection(2)-127.0.0.1@1379 daemon, prio=5, in group 'RMI Runtime', status: 'RUNNING'at org.springframework.web.context.ContextLoaderListener.<init>(ContextLoaderListener.java:98)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1585)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:463)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:413)at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)at java.lang.Thread.run(Thread.java:745)

同时还能观察到这样的调用链,因为只有tomcat启动之后,它的MBeanServer才能够被访问。所以如下是启动一个空tomcat。

main@1, prio=5, in group 'main', status: 'RUNNING'at java.net.DualStackPlainSocketImpl.accept0(DualStackPlainSocketImpl.java:-1)atjava.net.PlainSocketImpl.accept(PlainSocketImpl.java:199)atjava.net.ServerSocket.implAccept(ServerSocket.java:545)atjava.net.ServerSocket.accept(ServerSocket.java:513)atorg.apache.catalina.core.StandardServer.await(StandardServer.java:446)

at java.lang.reflect.Method.invoke(Method.java:483)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

通过上面简单的分析,IDE中Tomcat的具体执行原理,已经明了。

clipse 是一个免费、开放源代码,基于Java的 集成开发环境。它以一切皆插件的设计思想,让其核心很小。

如果要支持诸如Java、C、C++、PHP、 Android、Python等编程语言的开发,安装其对应的插件即可,如开发Python,安装PyDev插件即可。

更美的是,Java是跨平台的,Eclipse也是。

3.1 在Windows下安装

为了节约来回”跑”的时间,咱一次性把要安装的相关文件都下载下来。下载之前请自行确认个人计算机是32还是64位的。

(1) 下载安装包

到JDK官网https://java.sun.com下载: jdk-8u201-windows-x64.exe安装文件;

到Eclipse官网https://www.eclipse.org下载eclipse-jee-2019-03-R-win32-x86_64.zip压缩

包;

到https://sourceforge.net/projects/pydev下载PyDev插件的压缩包: PyDev 7.2.0.zip。

下载快慢,全凭网速,哪个先装,我偏不告诉你:Eclipse的运行,离不开JDK的支持,就从安装JDK开始。

(2) 安装JDK

双击打开安装文件后,没什么好说,好看的,直接【下一步】便可。

如果想更改安装路径,就点【更改】按钮,否则就采用默认的安装路径就好了,一直【下一步】到底。

安装完成后,可以打开命令行窗口,输入:java –version,验证一下是否正确,妥妥的。

(3) 安装Eclipse

有了JDK的大力支持后,咱就开始安装Eclipse吧。因为下载的是压缩包,找个你喜欢的文件夹(如D:\DevHome),解压缩到里面就算安装好了,简单,有趣。

(4) 安装PyDev

安装好了Eclipse,Python插件PyDev的也是随之而来。去,解压缩PyDev 7.2.0.zip文件,并解压缩后的features、plugins文件夹,拷贝到eclipse下的dropins文件夹里面。

(5) 配置环境

就那样,就这样,不知不觉,就安装好了JDK、Eclipse和PyDev了,会解压缩就是好。接着咱来配置Python的开发环境,到eclipse文件夹里面,点击eclipse.exe,启动Eclipse。选择工程目录,设置为默认,这样以后就不用再选择了。

进到欢迎界面后,勾选掉:Always show Welcome at start up,关闭Welcome窗口。

在窗口的右上角,有一个开发环境切换图标,点它。在弹出切换窗口中,选择PyDev这一项,【Open】之后,便是Python的天下。

光有华丽的IDE窗口还不够,还需点击菜单栏Windows ->Preferences,配置Python的运行环境。在弹出的对话框中,目的定位到:PyDev-> Interpreter->Python Interpreter。

大胆地点下【Choose from list】,在弹出的内容中,全选Python的所有开发包,【OK】。

在返回的窗口中,记得选择【Apply and Close】进行确定并保存相关设置。到这一步,安装和配置环境就算全部完成了。

(6) 运行Demo

新建工程,点击Eclipse菜单栏【File】-【New】-【Pydev Project】。

输入名称:OurHome,点击【Finish】。

新建文件, testimony.py (testimony的中文意思:宣言)

输入: print(‘Hello World!’),并保存(悄悄告诉你,保存的快捷键是:ctrl+s)。

点击文件名或在编辑内容里右键,选择【Run As】-【Python Run】

学编程,如果连第1行代码,都没搞明白的话,那你就要,搞到明白为止。print()方法用于打印输出,是最常用的一个函数。按下ctrl键,鼠标点击,可查看print方法的参数,解释我为你写好了。

print函数语法:print(self, *args, sep=' ', end='\n', file=None)

self – 类的实例,后期说面向对象时会介绍到。

args – 多项输出数据项,用,分隔。

sep – 数据项之间的间隔,默认是空格。

end – 设定结尾。默认是换行符 \n。

file – 指定输出数据到文件或屏幕(默认)中。

我们写3个例子深入了解一下。

第1个例子,了解args、sep和end参数的用法。

print("关注老陈", "一起学编程", sep=",", end=",")
print("还可以,讨论如何找女朋友。")

输出结果

关注老陈,一起学编程,还可以,讨论如何找女朋友。

第2个例子,将内容输出到文件里面

f = open('a.txt', 'w')
print('关注老陈,一起学编程', file=f)
f.close()

输出结果,一个a.txt文件,打开内容是

关注老陈,一起学编程

第3个例子,输出一个安装进度条,很有意思的一个例子。

import time
print("安装中", end="")
for i in range(20):
    print("◼︎", end='')
    time.sleep(0.2)
print("\n恭喜你,安装完成")

输出结果

安装中◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎
恭喜你,安装完成

好了,print函数说完了,想学好编程的你,记得多动手实战。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注:老陈说编程。我将分享Python,前端(小程序)和App方面的编程知识。关注我,没错的。

3.2 在macOS下安装

为了节约来回”跑”的时间,咱一次性把要安装的相关文件都下载下来。

到JDK官网https://java.sun.com下载: jdk-8u202-macosx-x64.dmg安装包;

到Eclipse官网https://www.eclipse.org下载: eclipse-jee-2019-03-R-macosx-cocoa-x86_64.dmg安装包;

到https://sourceforge.net/projects/pydev下载PyDev插件的压缩包: PyDev 7.2.0.zip。

众所周知,Eclipse的运行,离不开JDK的支持,我们就从安装JDK开始。

(1) 安装JDK

双击,拖动,一直【继续】到底。

稍等一会儿,就到安装成功提示窗口了。

(2) 安装Eclipse

双击Eclipse安装包,双击【Applications】打开【应用程序】目录,并把Eclipse拖过去。

进到【应用程序】大本营。

右键Eclipse图标,【显示包内容】-【Contents】-【Eclipse】。

(3) 安装PyDev

解压缩PyDev安装包,并把【features】、【plugins】里的内容分别复制,粘贴到Eclipse下的【features】、【plugins】里。

(4) 配置运行环境

打开eclipse,进到开发窗口。点击Eclipse右上角切换图标,切换为PyDev。点击Eclipse顶部菜单栏【Window】-【Show View】-【Console】显示控制台。

点击顶部菜单栏【Eclipse】-【Preferences】,打开pyDev-> Interpreter->Python Interpreter

点击【Choose from list】按钮,选择Python版本。

按下【Apply and Close】,返回主窗口,运行环境就配置好了。

(5) 来个demo

新建工程(【File】-【New】-【Pydev Project】),输入:OurHome,点击【Finish】。

新建文件testimony.py(文件名随便你取,喜欢就好), 输入: print(‘Hello World!’)并保存。

点击文件名或在编辑内容里右键,选择【Run As】-【Python Run】。

Ladies and gentlemen,糟老头们,激动人心的一刻出现了,确认无误,输出结果就是:Hello World!

学编程,如果连第1行代码,都没搞明白的话,那你就要,搞到明白为止。print()方法用于打印输出,是最常用的一个函数。按下ctrl键,鼠标点击,可查看print方法的参数,解释我为你写好了。

print函数语法:print(self, *args, sep=' ', end='\n', file=None)

self – 类的实例,后期说面向对象时会介绍到。

args – 多项输出数据项,用,分隔。

sep – 数据项之间的间隔,默认是空格。

end – 设定结尾。默认是换行符 \n。

file – 指定输出数据到文件或屏幕(默认)中。

我们写3个例子深入了解一下。

第1个例子,了解args、sep和end参数的用法。

print("关注老陈", "一起学编程", sep=",", end=",")
print("还可以,讨论如何找女朋友。")

输出结果

关注老陈,一起学编程,还可以,讨论如何找女朋友。

第2个例子,将内容输出到文件里面

f = open('a.txt', 'w')
print('关注老陈,一起学编程', file=f)
f.close()

输出结果,一个a.txt文件,打开内容是

关注老陈,一起学编程

第3个例子,输出一个安装进度条,很有意思的一个例子。

import time
print("安装中", end="")
for i in range(20):
    print("◼︎", end='')
    time.sleep(0.2)
print("\n恭喜你,安装完成")

输出结果

安装中◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎
恭喜你,安装完成

好了,print函数说完了,想学好编程的你,记得多动手实战。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注:老陈说编程。我将分享Python,前端(小程序)和App方面的编程知识。关注我,没错的。

3.3 在Ubuntu下安装

在Ubuntu下安装JDK,不用下载安装包,用命令就可以;

到Eclipse官网https://www.eclipse.org下载: eclipse-jee-2019-03-R-linux-gtk-x86_64.tar.gz安装包;

至于PyDev(http://pydev.org/updates)插件,通过在线安装就可以了。

(1) 安装JDK

打开【终端】,输入以下几个命令就开始了。

#添加JDK下载资源,按回车确认

sudo add-apt-repository ppa:webupd8team/java

#更新资源列表

sudo apt-get update

#安装JDK8

sudo apt-get install oracle-java8-installer

安装完成后,可以确认一下JDK8的相关配置信息(如默认版本)。打开【终端】,输入:java –vesion。倘若显示的是其他版本(如OpenJDK),可以运行:sudo update-java-alternatives -s java-8-oracle 命令, 将JDK8设置为默认项。

(2) 安装Eclipse

安装完JDK后,下载完成后,把文件移到主目录下,双击打开并拖动出去,系统自带的解压缩软件会开始进行解压缩。

稍等片刻,解压缩就好了。进到Eclipse文件夹里,双击eclipse图标启动软件。

更改工程存放位置,并勾选为默认(下次启动时,就不用再选择了),【Launch】。

(3) 安装PyDev

点击菜单栏【Help】-【Install New Software…】进入插件安装窗口。

在这里可以进行插件添加和管理,点击【Add..】按钮,进入添加窗口。

输入插件Name(名称):PyDev和Location(地址):http://pydev.org/updates,点击【Add】开始加载插件内容并自动返回。

勾选第一项PyDev,【Next】再【Next】,同意协议并【Finish】。安装需要一段时间,请耐心等待,等安装完成了,进行Eclipse重启。

(4) 配置环境

再次进入Eclipse,涛声依旧,窗口还是之前的那般模样。点击开发环境切换图标,切换到PyDev下。

环境准备就绪,咱来配置运行环境。点击菜单栏【Window】-【Preferences】,目标定位到PyDev-Interpreters-Python Interpreter,点击【Choose from list】。

指定Python解析器位置,选择最新版的python3.7,点击【OK】,会弹出一个新的窗口,选择开发库。

选上所有开发库,点【OK】按钮后返回到【Preferences】窗口,点【Apply and Close】,运行环境到这配置好了。

(5) 运行Demo

既然有了运行环境了,咱就编个程序试试。点击菜单栏【New】-【PyDev Project】新建一个工程HelloPython,其他的有默认值就可以了,【Finish】。

右键HelloPython工程,【New】-【File】,新建一个文件hello.py,输入内容:print(“编程的世界很奇妙。”)并回车。

在内容编辑器中或选中hello.py文件后,鼠标右键,在弹出的菜单中选择【Run As】-【Python Run】进行程序运行。

运行结果:”编程的世界很奇妙。”就在下面,如果看不清的话,你该起身运动了。生命在于运动,程序在于手动。

学编程,如果连第1行代码,都没搞明白的话,那你就要,搞到明白为止。print()方法用于打印输出,是最常用的一个函数。按下ctrl键,鼠标点击,可查看print方法的参数,解释我为你写好了。

print函数语法:print(self, *args, sep=' ', end='\n', file=None)

self – 类的实例,后期说面向对象时会介绍到。

args – 多项输出数据项,用,分隔。

sep – 数据项之间的间隔,默认是空格。

end – 设定结尾。默认是换行符 \n。

file – 指定输出数据到文件或屏幕(默认)中。

我们写3个例子深入了解一下。

第1个例子,了解args、sep和end参数的用法。

print("关注老陈", "一起学编程", sep=",", end=",")
print("还可以,讨论如何找女朋友。")

输出结果

关注老陈,一起学编程,还可以,讨论如何找女朋友。

第2个例子,将内容输出到文件里面

f = open('a.txt', 'w')
print('关注老陈,一起学编程', file=f)
f.close()

输出结果,一个a.txt文件,打开内容是

关注老陈,一起学编程

第3个例子,输出一个安装进度条,很有意思的一个例子。

import time
print("安装中", end="")
for i in range(20):
    print("◼︎", end='')
    time.sleep(0.2)
print("\n恭喜你,安装完成")

输出结果

安装中◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎
恭喜你,安装完成

好了,print函数说完了,想学好编程的你,记得多动手实战。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注:老陈说编程。我将分享Python,前端(小程序)和App方面的编程知识。关注我,没错的。


#python##Python编程从入门到实践##程序员#

为Eclipse IDE 代码自动补全插件,CodeMix解锁了VS Code的各种技术以 及为Code OSS构建的附加扩展,支持各种语言。用户可以直接从Eclipse访问VS Code本身的各种技术以及为Code OSS构建的附加扩展,能够使用Python,PHP 和TypeScript等语言的扩展和Vue,React和Angular等框架,与基于Eclipse IDE和 工具(如MyEclipse,Spring Tools Suite和JBoss Tools)兼容,因此用户可以继续 在习惯的环境中工作。

全新的UI设置

现在可通过过滤器组织到参数页面和关键字导航中,导航设置会更自然,查找需要的东西将更容易!

互动教程

odeMix视图具有全新的外观,可帮助您探索教程并开始使用一些流行的技术,如Vue,React,Angular和Node。

更新引擎和扩展

引擎现在与VS Code 1.32.1兼容,并且扩展已更新到最新版本,引入大量新功能。

改进Vue.js编码

来自Vetur扩展的大量修复使Vue开发更上一层楼,从模板插值完成到对格式化的更多控制。

优化引擎启动

您可能会注意到左下方的新引擎状态 - 为了快速启动引擎,我们还有另一种状态可以让语言服务在升级扩展等操作之前启动和运行。

CodeMining默认为OFF

经过广泛分析,我们确定CodeMining对性能产生了负面影响。 它现在默认关闭;但是,如果您选择重新打开,此版本包括性能修复程序。

导入和导出设置

想与团队成员分享设置和扩展程序吗? CodeMix现在可以轻松导出和导入。

编辑修复

编码的各种修复已经落实,包括更好的文件编码支持,避免Save All改变编辑器焦点,以及使用Go to Definition定位修复。

启动修复程序

修复了Angular,Python和Chrome Debug启动的关键修复以及向导的各种改进。

兼容性修复

CodeMix现在对Java 12以及Google的Guava插件的最新版本很友好。

CodeMix独家中文视频:Vue.js开发 5分钟快速入门,点击查看更多立即观看>>