如下代码所示,severlet中加入定时功能,想把response和request参数传递到doWhat方法中执行业务逻辑,这样貌似可行,实际上response和request不能传递到run()函数中,现高分请教。
public class MyServlet extends Servlet {
doPost(HttpServletRequest request, HttpServletResponse response) {
……
Timer timer = new Timer();
timer.schedule(new Task(request,response), date);
……
}
}
class Task extends TimerTask
{
private HttpServletRequest request;
private HttpServletResponse response;
public Task(HttpServletRequest request,HttpServletResponse response){
this.request = request;
this.response = response;
}
public void run() {
try {
doWhat(request,response);
} catch (IOException e) {
System.err.println(e);
}
}
……
}
public class MyServlet extends Servlet {
doPost(HttpServletRequest request, HttpServletResponse response) {
……
Timer timer = new Timer();
timer.schedule(new Task(request,response), date);
……
}
}
class Task extends TimerTask
{
private HttpServletRequest request;
private HttpServletResponse response;
public Task(HttpServletRequest request,HttpServletResponse response){
this.request = request;
this.response = response;
}
public void run() {
try {
doWhat(request,response);
} catch (IOException e) {
System.err.println(e);
}
}
……
}
另外如果你需要request里面的值可以先把它放到缓存中,定时启动时从缓存中取值就可以了
假设你想在晚上12点时,传递两个值给服务端name="123"、time="time is up!"。可以在客户端这边启动一个小线程,监听时间,其实逻辑很简单:
public void run() {
while(Flag){
// 获取系统时间
// if(是否到了晚上12点)
// {
// new一个继承了HttpServlet的Java类,该类在doPost方法中,跳转到你想要的
// 页面(forward或redirect),将你想传递的参数传过去。
// new完对象,直接调用doPost方法吧!
// 事情完成了,要么return,要么将Flag设为false,关闭这个线程吧!
// } // 没进if,就休息一下,Thread.sleep(***);
}
}没有经过调试,仅仅是一个想法。楼主应该有更多想法吧!
呵呵。
但是要启动一下Servlet,然后该线程要wait。启动一个Timer。向该Thread notify消息即可。
public class MyServlet extends Servlet {
doPost(HttpServletRequest request, HttpServletResponse response) {
……
Timer timer = new Timer();
timer.schedule(new Task(request,response), date);
……
}
}
在这里不要定时,在这里只要把request,response传出来,
其他的都好实现!