eclipse下tomcat使用深度讲解

一、Overview的设置

双击server面板中的Tomcatv7.0 Server,出现的Tomcat v7.0 Server的Overview配置,如下图:

1、Server Locations配置有三个选项:

    1. Use workspace metadata (does not modifyTomcat installation);

    2. Use Tomcat installation (take control ofTomcat Installation);

    3. Use Custom location (does not modifyTomcat installation);

    第一个选项表示使用当前workspace的metadata路径,它会将输出文件保存至workspace目录下一个很深的路径下;

第二个表示输出文件保存至tomcat安装目录下;

第三个是自定义一个路径。

    除此之外,此选项下面还有两个参数输入框:

    1. Server path(即tomcat或者eclipse根目录)

    2. Deploy path(工程文件的发布目录,如果选择第二个选项“Use Tomcat installation”,一般为webapps。如果选择第一个选项“Use workspace metadata “一般为wtpwebapps)。默认是第一个选项,在Eclipse的Server项目中,路径特别深,所以想查看文件特别麻烦。实际使用中一般选第二项Use Tomcat installation,以方便对Tomcat的控制。如果Tomcat服务下已经有工程了,需先将Tomcat服务下的工程全部移除(remove all),右键点击 clean命令,最后才能修改此项配置。

2、Server Options配置详解:

(1)Serve modules without publishing

                     这个选项勾上后,Tomcat会直接使用Eclipse工程下WebContent下的东西,省去publish到Tomcat服务器webapps目录或Eclipseworkspace空间的wtpwebaaps目录(取决于前面ServerLocations的配置)的工作。这个功能通过修改Tomcat安装目录的/conf/server.xml中的<Context>配置实现的(之前Server Locations 选择Use Tomcat installation的情况下),可以发现<Context>的docBase指向了Eclipse工程项目的Webontent,示例如下:

不勾选Serve modules without publishing,时Server.xml:

<Context docBase="PostAndGet"path="/PostAndGet1" reloadable="true"source="org.eclipse.jst.jee.server:PostAndGet"/>

勾选Serve modules without publishing后,Server.xml:

<ContextdocBase="C:\Documents andSettings\Administrator\workspace\PostAndGet\WebContent"path="/PostAndGet1" reloadable="true"source="org.eclipse.jst.jee.server:PostAndGet">

 <ResourcesclassName="org.eclipse.jst.server.tomcat.loader.WtpDirContext"extraResourcePaths="/WEB-INF/classes|C:\Documents andSettings\Administrator\workspace\PostAndGet\build\classes"virtualClasspath="C:\Documents and Settings\Administrator\workspace\PostAndGet\build\classes"/>

 <LoaderclassName="org.eclipse.jst.server.tomcat.loader.WtpWebappLoader"useSystemClassLoaderAsParent="false"virtualClasspath="C:\Documents andSettings\Administrator\workspace\PostAndGet\build\classes"/><JarScannerscanAllDirectories="true"/>

</Context>

(2)publish module contexts to separate XML files

勾选上后会使本来配置Tomcat安装目录下的conf/server.xml里的<context>元素,separate到conf/Catalina/localhost/的目录下,专门生成一个{context_name}.xml。

(3)Modules auto reload by default

              勾先项后,每次将项目发布在Tomcat服务器上时,Tomcat会缺省(by default)自动在server.xml文件中的<Context>元素中增加reload=true,让项目自动具有reload的属性。

3、Publishing:

当我们编译好了一个项目后,如果内容产生了变化,我们一般是要手动点上图红圈中的Publish to Server,将项目内容和Tomcat服务项目的配置发布到服务器上去。当然系统可以自动完成这个工作,这三个选项就控制自动发布工作的。第一个是不自动发布,第二个是资源有变化时发布,第三个是编译时发布。如果之前在Server Options配置选择了Serve modules withoutpublishing,哪这三个选项就没有意义了,因为已经自动指向了工程的WebConten目录,无需发布。

Updatecontext paths,是更新应用的WEB访问路径。当你使用eclipse开发,右击项目选择属性,找到Web Project Settings,修改了context root的属性的话。如果你勾选了Update context paths,系统就会提示你要不要更新Tomcat配置,如果选了是,Tomcat就会在conf/servers.xml中的Context元素中将path设置为你更改了的context root值。

4、Timeouts

在启动Tomcat Server时,经常会出现启动时间过长的错误,如果启动的时间超过了Start(in seconds)设置的值,就会报错。如下图(为方便截图设为1s):

Stop(in seconds)为Tomcat Server停止的超时时间。

二、Tomcat服务使用中的各种问题。

1、Eclipse中的Tomcat服务

在Eclipse中增加了一个Tomcat服务器后,在Project Explorer中会增加一个Servers的工程,这个工程管理我们的Tomcat服务器,下面的3个xml文件对应Tomcat的conf目录下的三个文件,但不是直接把这三个文件覆盖Tomcat安装目录下的三个对应文件,如何要研究Tomcat的动作机制还是要直接去找Tomcat的conf目录下的文件。

2、开启auto reload,避免服务器重启。

(1)设置项目的Auto reloading功能

勾选了这个选项,就会在Server.xml文件中将<Context>元素中加上reload=”true“这个属性。如果在Server options中选择了Modules auto reload bydefault则每次将项目发布在Tomcat服务器上时,会默认加上reload属性。

(2)关闭当需要时重启服务器选项。

虽然设置了reload=“true“,但每次对servlet进行更改都提示要重新启动服务器,如何解决?

点击菜单栏,Window->Preferences->Server->Launching,在下图高亮的地方选择Never,就可以了。这样的话,系统就不会提示服务器重启,而是在项目发生更改保存后,在几秒内reload,控制台会打出

信息: ReloadingContext with name [/项目名] is completed

3、开启auto reload,启用Debug模式的hot swap,避免服务器reload。

虽然服务器reload比restart要方便一点,但是每次reload也麻烦,尤其是改动很频繁的时候。网上很多人误解热部署和热加载的概念,所以造成乱配置的行为,这里提示一下.

热部署:就是容器状态在运行的情况下部署或者重新部署整个项目.在这种情况下一般整个内存会清空,重新加载.简单来说就是Tomcat或者其他的web服务器会帮我们重新加载项目.这种方式可能会造成sessin丢失等情况。之前配置的reload=”true”就是这种情况。

热加载:就是容器状态在运行的情况下重新加载改变编译后的类。在这种情况下内存不会清空,sessin不会丢失,但容易造成内存溢出,或者找不到方法。因为内存无法转变成对像.。一般改变类的结构和模型就会有异常,在已经有的变量和方法中改变是不会出问题的。在Eclipse的Debug模式中就支持热加载,采用的是JVM hot swap技术。“HotSwap”是JPDA(Java Platform Debugger Architecture)中的一个特性,JDK1.4以后才有的新功能。HotSwap允许将JVM中的类定义替换为新的类定义,这就允许开发人员在debug时,将修改过的class替换JVM中旧有的class,无需重新启动服务器。不过,目前HotSwap只支持对方法body的修改,不支持对类和方法签名的修改(比如修改类名,方法名,方法参数等)。考虑这些限制,也是有理由的,替换类定义,就需要新类和旧类之间有一个关联,这里关联就是类的全名(或许还有其他信息),类名都改了,就不知道替换哪个类了。至于方法签名的修改,应该是考虑到运行时方法的调用,通过方法签名替换已有的方法调用。

为了达到这种效果,找到 “Servers” 模块(通过 Window -> Show View -> Servers打开). 双击里面的server 实例进入配置界面. 里面有两个标签页, Overview和Modules, 点击Modules, 找到相应的Project, 并点击Edit, 在“Autoreloading enabled”旁边取消勾选! 就可以通DebugAs 来运行程序了,现在Tomcat服务器就不会自己reload了。但是注意类不可以增加方法,否则会报错如下图,如果增加了方法可以重启一下服务。

4、为什么debug as 或者run as 后,内置的浏览器看到的不是最新修改的结果,要刷新一下才可以?

原因为内置的浏览器使用的是IE的内核,采用了缓存机制。需要打开IE浏览器,找到Internet选项,将检查存储的页面的较新版本,由自动改为每次访问网页时。

posted @ 2018-08-01 22:44  董永辉Bruno  阅读(723)  评论(0)    收藏  举报