在默认情况下,当 tomcat 发现 servlet 的类文件已被修改时,它会自动重载此 servlet。在调试该 servlet 时,这是相当方便的。不过,tomcat 为了实现这一功能,必须周期性地检查每个 servlet 的修改时间。当已完成 servlet 调试,并不再改变时,这会消耗许多不必要的文件系统资源。
如果要想关闭此功能,只需在 Web 应用程序的 Context 元素中设置 reloadable 属性,并重启 tomcat 就可以了。
下面将展示如何配置 reloadable 属性,开启 Web 应用的自动重载功能。
(1)搭建一个简单的 web 应用 web1,该应用下面存在一个 MyServlet,代码如下:
package com.hxstrive.tomcat.demo; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * 自定义 Servlet * @author hxstrive.com 2022/5/31 */ public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { StringBuilder builder = new StringBuilder(); builder.append("MyServlet 1"); PrintWriter writer = resp.getWriter(); writer.print(builder.toString()); writer.flush(); writer.close(); } }
(2)在 web.xml 配置文件中,对 MyServlet 的配置如下:
<servlet> <servlet-name>myServlet</servlet-name> <servlet-class>com.hxstrive.tomcat.demo.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/myServlet</url-pattern> </servlet-mapping>
(3)修改 tomcat 为 server.xml 配置文件,通过 <Context> 元素部署 web1 应用。配置如下:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context docBase="D: mpweb1" path="/web1" reloadable="true" debug="0" /> </Host>
其中,reloadable="true" 表示自动重载 Servlet。如果将 reloadable 设置为 false,则不启用自动重载 Servlet。
(4)最后,我们访问 http://localhost:8080/web1/myServlet 地址时,输出如下图:
如果此时,我们修改 MyServlet 代码,如下:
StringBuilder builder = new StringBuilder(); builder.append("MyServlet 2");
修改代码后,重新编译,将变编译后的 class 文件拷贝到 web1 项目中。
此时,tomcat 将自动去加载,如下图:
再次访问 http://localhost:8080/web1/myServlet 地址,输出如下图: