2016-12-01 21 views
1

私はこのようになりまし機能:今Java httpServletRequestを関数に送ることは可能ですか?

...私は

<a href="rest/dss/execute/1">execute 1</a> 

... htmlページからそれを呼び出すと、それが正常に動作します

@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 */ 

} 

を...私はタイマーを作った...とタイマーで私はその関数を呼び出す必要があるが、私はどのように関数の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

確かに、実装できるインターフェースです。

もちろん、他の方法でリクエストを使って何をしているのかによって、役に立つものを実装することは簡単ではないかもしれません。

JEE標準を実装しているサードパーティのライブラリからHttpServletRequestの準備が整いましたが、助けになるかもしれませんが、やりすぎかもしれません。

+0

それを行う方法?ライブラリをダウンロードして実装するだけですか?それでは?私はまだ関数を呼び出す方法を知りません – begi

+0

私はいくつかの他のインターフェイスを実装する場合でも、私はまだそれを行う方法を知らない – begi

+0

これは簡単なものとして 'HttpServletRequest'を実装するのは良い考えではありません。私は@ Thomasの提案がより好きです。 –

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

} 
+0

しかし、3行だけで.... – begi