我有一个看起来像这样的功能:
@GET
@Path("/execute/{scriptId}")
public String execute(@Context HttpServletRequest req, @PathParam("scriptId") Long scriptId) {
/* ... */
engine.eval(getSrc(req.getServletContext().getRealPath("js/boot.js")));
if (scriptId == 1L)
engine.eval(getSrc(req.getServletContext().getRealPath("js/test.js")));
else
engine.eval(getSrc(req.getServletContext().getRealPath("js/test2.js")));
/* that above, its the only place i need the req */
}
我从html页面调用它......
<a href="rest/dss/execute/1">execute 1</a>
它工作正常......
现在......我做了一个计时器....在计时器中我需要调用该函数,但我不知道如何获取函数的httpservletrequest参数......
这是代码:
@Timeout
public void execute(Timer timer) {
Long scriptId = Long.parseLong(timer.getInfo().toString());
execute(/*here i need something*/, scriptId);
System.out.println("Timer Service : " + scriptId);
System.out.println("Current Time : " + new Date());
System.out.println("Next Timeout : " + timer.getNextTimeout());
System.out.println("Time Remaining : " + timer.getTimeRemaining());
System.out.println("____________________________________________");
}
所以,基本上,我需要用计时器调用该函数......
任何想法?
答案 0 :(得分:1)
如果您的函数不需要HttpServletRequest
(即它不需要调用HttpServletRequest
上的方法),那么您可以将现有代码提取到不依赖于的实现方法中HttpServletRequest
并在execute
方法中调用该实现:
@GET
@Path("/execute/{scriptId}")
public String execute(@Context HttpServletRequest req, @PathParam("scriptId") Long scriptId) {
return executeImpl(scriptId);
}
public String executeImpl(Long scriptId) {
...// your current implementation
}
然后你的计时器也可以调用该方法:
@Timeout
public void execute(Timer timer) {
Long scriptId = Long.parseLong(timer.getInfo().toString());
executeImpl(scriptId);
System.out.println("Timer Service : " + scriptId);
System.out.println("Current Time : " + new Date());
System.out.println("Next Timeout : " + timer.getNextTimeout());
System.out.println("Time Remaining : " + timer.getTimeRemaining());
System.out.println("____________________________________________");
}
答案 1 :(得分:0)
当然,它只是一个可以实现的界面。
当然,实现它来做一些有用的事情可能并不重要,这取决于你在另一种方法中对请求做了什么。
从实现JEE标准的某些第三方库中准备好实现HttpServletRequest可能有所帮助,但可能有点过分。