Java是否可以向函数发送httpServletRequest?

时间:2016-12-01 12:53:58

标签: java function timer

我有一个看起来像这样的功能:

@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("____________________________________________");

}

所以,基本上,我需要用计时器调用该函数......

任何想法?

2 个答案:

答案 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可能有所帮助,但可能有点过分。