java如何使用Tomcat管理后端进程?
我有一个网页,用户按下按钮并在一个适当的应用程序(驻留在Tomcat中)中启动一个操作
该操作是一个长时间运行的过程,我必须查看发生了什么的唯一方法是登录到服务器并查看日志文件
我编写了一个快速Java函数,用于读取日志文件并对发生的情况提供反馈。(基本上,它只是跟踪文件并解析出我需要的东西)
我希望能够添加一个jsp,以便在不登录服务器的情况下查看输出
===
从设计的角度来看,我理解JSP应该快速返回结果,而不仅仅是继续处理
因此,我的想法是创建一个简单的web页面,查询jsp以获取更新,并将最新信息写入屏幕。等待30秒,再次轮询服务器,并附加最新更新
我正在努力掌握的是如何让JSP与后端进程通信,以及如何生成/终止后端进程
这是一个非常偶然的事情(每两周一次,从开始到完成需要一两个小时),所以我不希望守护进程一直运行。我希望能够暂时打开和关闭它
如果我从一个简单的servlet中生成一个进程,那么当我完成时,如何结束该进程? 我如何与它沟通
# 1 楼答案
您应该考虑使用诸如{a1}这样的控件来控制后台进程。
为了进行控制,前端代码可以发送启动/停止/检查流程的消息
为了进行监控,您的流程可以发布到JMS主题,以便前端代码阅读
# 2 楼答案
您可以创建一个
java.lan.Runnable
开关,读取文件内容并将其保存到缓冲区中。Runnable使用while
循环读取文件内容,因为中断条件可以从外部设置,执行Runnable的线程将在Runnable的run
方法终止时终止在JSP中,您可以创建一个
java.lang.Thread
,并将Runnable的实例传递给它。将runable的安装保存在ServletContext
中,以便您可以跨请求访问它。如果您想终止轮询,而不仅仅是从JSP设置Runnable的中断条件,rum方法将终止,因此线程也将终止您可以使用javascript
setInterval()
函数和XMLHttpRequest
刷新页面下面是一个基本实现示例(我希望它能满足您的要求):
轮询可运行
JSP开关启动轮询并继续检索数据
编辑
在
FilePollingThread
中有一个错误:如果文件中没有可用的数据,线程可能会卡在内部while循环中。应该是的此外,JSP将无法在IE上运行(在IE9上测试)。似乎写入行中响应的数据
包含洞页面的HTML。如果添加到目标分区,IE似乎无法渲染它
我用一个简单的静态HTML文件制作了另一个版本,作为一个servlet,因为它提供了对写入响应的更多控制
如果你对代码感兴趣,请告诉我