`

tomcat部署jsp不生效的问题 ---- 20161117

 
阅读更多

遇到的问题

对jsp页面进行了一些修改,部署到服务器的jsp页面不起作用。发现并不管用,而且文件的修改时间一直没变。 甚是奇怪。后面touch一下文件就好了。后面就了解了下tomcat的热部署。如下:

 

我们知道在开发工程的时候jsp文件是即修改即生效的,由于比较好奇就研究了一下tomcat对于jsp热部署的实现原理,总结沉淀一下吧。Tomcat  jsp热部署的实现原理大体是这样的,每个JSP页面从上次访问到下次访问总是有默认几秒的缓存时间的,也就说并不是严格的即修改即生效,tocmat7默认是有4秒的缓存延迟的。这个默认的缓存延迟是在类EmbeddedServletOptions的private intmodificationTestInterval = 4;这个属性定义的。如果过了4秒缓存时间即失效,这个时候tomcat就会读取jsp的modified时间戳和work目录下编译好的class文件的modified的时间戳作对比。如果相等则class文件没有过期,则不会重新编译jsp文件,如果过期了则重新将jsp编译成java,并进一步编译成class。同时调用JasperLoader来重新加载这个有jsp编译好的class文件。下面具体分析一下这个过程:

Tomcat中jsp热部署实现原理

大体的类通信时序图是这样的:

其中上文说的时间戳的校验逻辑主要封装在JDTCompiler的isOutDated方法里面,这个方法的主要源代码如下:

Tomcat中jsp热部署实现原理

其中第一个红框就是涉及到的N秒缓存逻辑,如果缓存没有失效,则不会重新加载,这个ctxt.getOptions()获取到的其实是EmbeddedServletOptions类,这个类默认定义的时间间隔是:

Tomcat中jsp热部署实现原理

在实验的时候我比较好奇就收到把这个值改为了40,果然jsp并没有及时生效,而是过了40秒之后才生效。第二个红框检测的是获取work目录下的class文件的对象。第三个红框就是比较class文件的时间戳和JSP文件的时间戳,如果不相等则重新编译加载(上面时序图的流程)。这个就是jsp的热部署流程!

(原文链接:http://www.linuxidc.com/Linux/2013-05/83816.htm

 

一下是涉及到tomcat work目录的另一篇文章。

jsp,tomcat的工作原理是当浏览器访问某个jsp页面时,tomcat会在work目录里把这个jsp页面转换成.java文件,比如将index.jsp转换为index_jsp.java文件,而后编译为index_jsp.class文件,最后tomcat容器通过ClassLoader类把这个index_jsp.class类装载入内存,进行响应客户端的工作。

 

  tomcat会定时稍描容器内的jsp文件,读取每个文件的属性,当发现某个jsp文件发生改变时(文件的最后修改时间与上次稍描时不相同时),tomcat会重新转换、编译这个jsp文件。但是tomcat的稍描是定时的不是实时的,这也正是为什么jsp文件修改后需要几分钟的时间来等修改过的jsp生效。当然为了即刻生效,很多老前辈都会建议在修改jsp页面后立即清除work目录里的文件。

 

  另外,tomcat容器中,对转换后的java文件(比如:index_jsp.java)的编译最大只支持64k,所以在其他容器中的jsp移植到tomcat容器中时会遇到大jsp文件会发生无法编译的情况,所以建议把jsp中的业务逻辑写入单独的类,在jsp中通过调用这个类的静态方法来执行,并将jsp页面中的js提取出来放到单独的js文件内。

(原文链接:https://my.oschina.net/u/1051372/blog/277732)

分享到:
评论

相关推荐

    apache-tomcat-8.5.12-直接热部署版本

    Apache Tomcat 8.5.12 是一个广泛使用的开源软件,它是一个实现了Java Servlet、JavaServer Pages(JSP)和Java EE的部分规范的Web应用服务器。这个版本是特别为热部署设计的,这意味着开发者可以在应用程序运行时...

    jsp(Tomcat)中errorPage不能使用的原因解决方法,Jsp技术文章,JSP系列教程,Jsp.htm.rar

    本篇文章将深入探讨`errorPage`在Tomcat环境中不能使用的问题,并提供解决方案。 首先,我们要理解`errorPage`的工作原理。在JSP中,`<error-page>`元素在`web.xml`部署描述符文件中定义,它允许我们将特定的HTTP...

    最新版linux apache-tomcat-10.0.13.tar.gz

    Apache Tomcat 是一个开源的 Java 应用服务器,主要用于部署和运行Servlet和JavaServer Pages(JSP)应用程序。在这个最新的版本10.0.13中,开发者引入了新的特性和改进,以提供更稳定、安全和高性能的服务。在Linux...

    tomcat部署项目常见问题

    ### Tomcat部署项目常见问题及ExtJS包说明 #### 一、Tomcat部署项目的注意事项 在使用Tomcat部署项目时,有一些重要的事项需要注意: 1. **确保项目与Tomcat版本兼容**:首先需要确保项目的JDK版本与Tomcat版本相...

    Myeclipse中修改类及jsp文件后不用重启tomcat的方法

    完成以上配置后,当你在MyEclipse中修改类文件或JSP文件并保存时,MyEclipse应该能自动触发Tomcat的热部署,从而使更改立即生效,无需手动重启服务器。然而,需要注意的是,虽然这种方法可以提高开发效率,但在生产...

    Linux版本tomcat8-8.5.35.tar.gz

    Tomcat 8.5.35版本修复了一些已知的安全漏洞和性能问题,提升了稳定性和兼容性。对于开发者来说,它支持最新的Java EE 8规范,包括WebSocket、JSP 2.3、EL 3.0等特性。 在部署Web应用时,可以将WAR文件直接放在`...

    linux 服务器部署 apache-tomcat-8.0.36.tar.gz

    Apache Tomcat是一款广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用程序部分,包括Servlet和JavaServer Pages(JSP)。本教程将详细讲解如何在Linux服务器上部署`apache-tomcat-8.0.36.tar.gz`。 首先...

    apache-tomcat-5.5.36.tar.gz

    Apache Tomcat是一款开源的Java应用服务器,主要用于运行Servlet和JSP应用。在Linux系统中配置Apache Tomcat 5.5.36版本可以为开发者提供一个稳定且灵活的平台来部署Web应用程序。以下是对这个版本的Tomcat在Linux...

    最新版linux apache-tomcat-8.5.66.tar.gz

    Apache Tomcat是一款开源的Java Servlet容器,主要用于部署和运行Java Web应用程序,包括JSP和Servlet。它是Apache软件基金会的一部分,并且在Java EE Web Profile的实现中扮演着核心角色。在这个最新版的“apache-...

    tomcat8.5在linux系统中的具体应用.docx

    Apache Tomcat 是一个免费开源的轻量级 Web 服务器 / 应用容器,主要用于运行 Java Servlet 和 JavaServer Pages (JSP) 技术的应用程序。根据描述中的内容,我们可以得知: - **版本说明**:Apache 官方网站提供了...

    apache-tomcat-7.0.100.tar.gz

    Apache Tomcat是一个开源的Java Servlet容器,主要用于实现Java Web应用程序的部署。在这个"apache-tomcat-7.0.100.tar.gz"压缩包中,我们拥有的是Tomcat的7.0.100版本,这是一个适用于Linux操作系统的发布版。这个...

    Tomcat 9.0安装包

    Apache Tomcat 是一款开源的、免费的Java Servlet容器,它实现了Java EE中的Web应用程序规范,尤其是Servlet和JSP。Tomcat 9.0版本是其最新的稳定版,提供了对Java EE 8标准的支持。在本文中,我们将详细介绍如何在...

    最新版linux apache-tomcat-8.5.57.tar.gz

    Apache Tomcat是一款开源的Java应用服务器,主要用于运行Java Servlet和JavaServer Pages(JSP)应用程序。在Linux系统中,它是部署Web服务的重要组件。我们正在讨论的是最新版本的Apache Tomcat,即8.5.57,适用于...

    在RedHat_AS5.0下搭建Apache+MySQL+PHP+Tomcat+JSP平台

    在Red Hat AS5.0操作系统下搭建Apache+MySQL+PHP+Tomcat+JSP平台是一项常见的Web服务配置任务,这个组合常被称为LAMP(Linux + Apache + MySQL + PHP)加上JSP支持,提供了强大的Web应用环境。以下是详细的搭建步骤...

    Tomcat部署使用手册

    ### Tomcat部署使用手册知识点详解 #### 一、Tomcat介绍与工作原理 **1.1 Tomcat简介** - **背景介绍:** - Tomcat是Apache软件基金会Jakarta项目中的一个核心项目,由Apache、Sun以及其他一些公司和个人共同...

    tomcat配置包,apache-tomcat-8.5.78.tar.gz jdk-linux-x64.tar.gz

    Apache Tomcat是一个开源的Java Servlet容器,主要用于实现JavaServer Pages (JSP)、Servlet以及Java EE的Web应用程序。在这个配置包中,我们有两个主要的组件:`apache-tomcat-8.5.78.tar.gz` 和 `jdk-linux-x64....

    apache-tomcat-9.0.17-windows-x64 - 副本.tar.gz

    Apache Tomcat是一个开源的软件应用服务器,主要用于运行Java Servlets和JavaServer Pages(JSP)。在本场景中,我们讨论的是适用于Windows x64平台的Tomcat 9.0.17版本,不过该文件的扩展名为`.tar.gz`,这通常意味...

    apache-tomcat-7.0.77.zip

    Apache Tomcat 7.0.77 是一个广泛使用的开源软件,主要用于部署和运行Java Servlets和JavaServer Pages (JSP)。这个版本是专为Linux操作系统设计的,因此我们来详细探讨一下Tomcat 7在Linux环境下的安装、配置、管理...

    最新版linux apache-tomcat-8.5.63.tar.gz

    Apache Tomcat是一款开源的Java Servlet容器,主要用于部署和运行Java Web应用程序,包括JSP和Servlet。它是Apache软件基金会的一部分,且在Linux系统上运行广泛。最新版的Apache Tomcat 8.5.63是在其8.x系列中的一...

    apache-tomcat-8.0.47.tar.gz 【Tomcat服务器,Tomcat8 Linux版】

    Apache Tomcat是一个开源的Java Servlet容器,主要用于实现JavaServer Pages (JSP)、Servlet和Java EE的Web应用程序。Tomcat是轻量级的,相对其他Java应用服务器来说,它的配置和管理都较为简单,这也是其广受欢迎的...

Global site tag (gtag.js) - Google Analytics