【发布时间】:2023-03-15 07:19:02
【问题描述】:
当我将它与调度程序一起使用时,HttpServletResponse 没有返回任何值。在下面的代码中,直到“返回”它在控制台中打印。但是下一行 out.println(previousLastLine) 没有返回。任何建议将不胜感激。提前致谢。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(value="/notifyController")
public class NotificationController extends HttpServlet{
int rep = 0;
String previousTime = null;
String previousLastLine = null;
String lastText = null;
int count = 0;
boolean changeFlag = false;
final long timeInterval = 1000;
HttpServletResponse response = null;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
response = resp;
if(rep == 0){
Runnable runnable = new Runnable() {
public void run() {
while (true) {
changeFlag = scheduleTask();
if(changeFlag == true){
try {
System.out.println("RETURNED");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(previousLastLine);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
rep++;
}
}
public boolean scheduleTask(){
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader("D:/messagedetails.txt"));
while ((sCurrentLine = br.readLine()) != null) {
if(lastText != sCurrentLine){
lastText = sCurrentLine;
}
}
if(count == 1 && !previousLastLine.equalsIgnoreCase(lastText)){
previousLastLine = lastText;
return true;
}
previousLastLine = lastText;
count = 1;
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return false;
}
}
【问题讨论】:
-
日志中有异常吗?
-
您是否尝试实现长轮询?如果是这样,您的 @WebServlet 注释中缺少 asyn 属性。检查这个stackoverflow.com/questions/8081895/…