Tomcat运行完一个servlet后停止的解决

本文记录了一次在Tomcat上部署项目时遇到的自动关闭问题,最终发现是由于HBaseadmin对象未正确关闭导致的内存泄露。文中分享了解决方案,并强调了良好的资源管理习惯对于避免此类问题的重要性。

        在Tomcat中运行一个servlet,结果运行完成后Tomcat自动关闭,不管是myeclipse中自带的还是自己安装的,都是一个样,只能说明代码有问题,结果问题是代码中的错误,虽然只是一两句代码的问题,但是却折腾了好几天,在成功部署了项目之后,最后通过查看Tomcat的log,发现问题还是蛮严重的:内存泄露。就说试了一遍又一遍还是不行,结果在这等我呢,好吧,幸好我以前看到过是哪里的问题,结果我就乐了,知道问题在哪里才能对准下药了,原因在于使用HBase中的HBaseadmin的对象创建了一个表,结果这个对象没有关闭,导致了内存泄露。

     直接解决方案,try加上,finally加上,再来一个admin.close(),好了,这下我开心了,毕业设计完成了。

    又解决了一个问题,吃一堑长一智,Tomcat自动关闭说明是自己的问题,不要怪Tomcat,它还给我指出错误了。

使用IntelliJ IDEA和Tomcat运行Servlet生命周期,可按以下步骤操作: ### 1. 在IntelliJ IDEA中新建Web工程并整合Tomcat服务器 在IntelliJ IDEA中新建Web工程,由于整合服务器细节较多,可参考单独的博客文章总结。成IntelliJ IDEA与Tomcat服务器的整合 [^2]。 ### 2. 创建Servlet类 在工程的`src`目录下创建一个Java类,并实现`Servlet`接口,重写其中的`service()`方法,添加控制台输出语句方便观察执行效果。例如: ```java import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.io.IOException; public class MyServlet implements Servlet { @Override public void init(javax.servlet.ServletConfig servletConfig) throws ServletException { System.out.println("Servlet初始化"); } @Override public javax.servlet.ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("Servlet提供服务"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("Servlet销毁"); } } ``` ### 3. 在`web.xml`中配置Servlet 在`web.xml`文件中添加Servlet的配置信息,示例如下: ```xml <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myServlet</url-pattern> </servlet-mapping> ``` ### 4. 添加首页文件 添加一个首页文件,如`index.jsp`。 ### 5. 启动Tomcat服务器 点击IntelliJ IDEA中的小三角启动Tomcat服务器。 ### 6. 访问Servlet 打开浏览器,在地址栏输入`http://localhost:8080/项目名/配置的url-pattern的值`,例如`http://localhost:8080/DJCKING/myServlet`。 ### Servlet生命周期的体现 - **加载和创建实例**:当Tomcat服务器收到客户端对该Servlet的访问请求后,首先检查是否已经装载并创建了该Servlet的实例对象。如果没有,则装载并创建该Servlet一个实例对象 [^3]。 - **初始化**:调用Servlet实例对象的`init()`方法进行初始化 [^1][^3]。 - **提供服务**:创建用于封装HTTP请求消息的`HttpServletRequest`对象和代表HTTP响应消息的`HttpServletResponse`对象,然后调用Servlet的`service()`方法并将请求和响应对象作为参数传递进去,提供服务 [^1][^3]。 - **销毁**:当WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的`destroy()`方法 [^1][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值