温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JSP预编译如何加速应用

发布时间:2022-01-04 15:41:18 来源:亿速云 阅读:117 作者:柒染 栏目:大数据

今天就跟大家聊聊有关JSP预编译如何加速应用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

在Java Web应用中,由于JSP的修改实时生效等一系列特点,许多时候我们会使用JSP来做为页面来显示工具。

而本质上JSP只是一种特殊的Java文件,会在运行时生成java文件,再编译出class文件执行。

对于一个小型应用来说,可能JSP的展示时间要求不会特别高,而对于中大型的项目,涉及到大量的JSP页面时,就会在初次请求时有不少的时间消耗在生成java文件和编译class上。

所以,对于考虑Tomcat性能优化的朋友,在已经进行过JVM调优,线程池的设置、负载均衡等方式之后,可以考虑本文提到的这一项。

为了加速应用的执行,Tomcat内部提供了一项功能

JSP预编译

所谓预编译,就是在正式使用之前,已经把JSP文件经过编译过程,生成Java(Servlet)文件,再编译成class。这样后续的真实请求到来的时候,就不需要再等待这一过程。

Tomcat提供的这一功能,是一个在jasper.jar 文件中的class:

org.apache.jasper.JspC

JSP预编译如何加速应用

如果你已经在阅读了调试源码,可以直接运行该类的main方法即可。如果手边没有源代码,可以通过脚本(bat/shell)的方式,java -cp xxx.jar把依赖的jar包含进来,然后执行上面的这个class,然后你会看到如下的帮助信息。

JSP预编译如何加速应用

可以编译一个JSP文件,也可以指定应用项目路径,编译一个应用下的全部JSP。

在执行Jspc的时候,也可以指定class文件输出路径。

对于生成的内容使用方式,我们可以通过指定其生成web.xml内配置的方式,将预编译生成的class文件以servlet的方式在web.xml里声明,然后把生成的web.xml版段拷贝到应用的web.xml里,生成的class拷贝到应用的classes目录即可。

当然,也可以将生成的class拷贝到Tomcat的jsp文件生成目录(work)内,后面执行时就不需要再重新生成了。

关于JSP的执行,可以参考两篇旧文:

你了解Tomcat是怎样处理Jsp文件的吗?

修改JSP文件实时生效的秘密

除了源码执行和脚本的方式外,也可以通过Ant任务来进行JSP的预编译。

具体可以参考官方文档提供的样例:http://tomcat.apache.org/tomcat-8.5-doc/jasper-howto.html#Web_Application_Compilation

主要是编译一个Ant 的build.xml,然后在命令行里执行指定的任务。而在build.xml里声明的内容,和我们上面的内容类似,都是声明一些class路径依赖,要编译的jsp的路径,生成class的路径等。

放张图给不想跳转的朋友

JSP预编译如何加速应用

generated_web.xml就是生成的web.xml片段,拷贝到我们应用内即可。

对于使用Maven的朋友,可以在pom.xml里以插件的形式使用Jspc。

groupId和articatId类似这样

JSP预编译如何加速应用

以上是基于codehus-mojo插件的实现,原来的实现不再更新了。还有几个插件的实现,例如apache-sling。可以参考这个:

https://sling.apache.org/documentation/development/jspc.html

基本配置形式如下:

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>jspc-maven-plugin</artifactId>

<executions>

<execution>

<id>jspc</id>

<goals>

<goal>compile</goal>

</goals>

</execution>

</executions>

</plugin>

然后像Ant的执行一样,指定一个执行目标。也可以额外指定一些执行参数,例如文件生成路径等。

当然,如果以上这些方式都不想使用,也可以采用纯手工的方式,在部署之后,把可能的页面都请求一次。 &_&

而对于一些Full Profile的应用服务器,比如GlassFish,在应用部署的时候,就会包含是否进行JSP预编译的选项,如果选中则会在部署的时候进行JSP预编译,此时如果编译有问题就会导致部署失败。

JSP预编译如何加速应用

其实,其背后是将JSP编译生成的java和class文件置于其工作目录,例如GlassFish的domain_name/generated/jsp目录下,从而在初次请求前生成,减小应用访问的等待时间。

看完上述内容,你们对JSP预编译如何加速应用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jsp
AI