0

パラメータを受け取るHttpServletを登録しようとしています(POSTまたはGETのどちらを経由するかは気にしないでください。ただし、POSTを使用することをお勧めします)。ここに描かれているものを拡張するだけです:

http://www.javaworld.com/javaworld/jw-06-2008/jw-06-osgi3.html?page=3

そしてここ:

http://www.peterfriese.de/osgi-servlets-a-happy-marriage/

私はまだ宣言型登録を使用していません。最初にそれが機能することを確認したいので、次に他のことを行います。

次の電話をかけると疑問が生じます。

httpService.registerServlet("/helloworld", new RestServlet(), null, null);

サーバーがパラメータを受け入れることをHttpServiceに伝える方法がわかりません。さらに、サーブレットが登録されるたびにnew()を使用してHttpServletを作成する必要がありますか、それとも別のエイリアスで同じものを再利用できますか?エイリアス引数でワイルドカードを使用してから、HttpServletオブジェクトにHttpRequestに含まれるものをすべて処理させることができるかもしれないので、私は尋ねています...?

どんな助け/提案/考えも大歓迎です!

よろしく、アレックス

4

2 に答える 2

2
  • サーブレットの初期化を無視すると、同じサーブレットに複数回登録できます。
  • すべてを見たい場合は、登録するだけです/
  • ホワイトボードははるかに簡単で、はるかに優れたアプローチです。

Httpサービスは最長のパスを見つけて、そのサーブレットを呼び出します。つまり、/はフォールバックです。

ホワイトボードのないhelloworldサーブレットの例:

@Component
public class Hello extends HttpServlet {
  public void doGet(HttpServletRequest rq, HttpServletResponse rsp) throws IOException {
    rsp.getWriter().write( ("Hello World " + rq.getParameter("name")).getBytes());
  }

  @Reference
  void setHttp(HttpService http) { http.registerService("/hello", null, null); }
}

例、ホワイトボードを使用:

@Component(provide=Servlet.class, properties="alias=/hello")
public class Hello extends HttpServlet {
  public void doGet(HttpServletRequest rq, HttpServletResponse rsp) throws IOException {
    rsp.getWriter().write( ("Hello World " + rq.getParameter("name")).getBytes());
  }

}

この種のものは、bndtoolsで非常に簡単に操作できます。DSを使用して小さなプロジェクトを作成してから、Webコンソールを使用してbndrunファイルを作成します。後悔しません。

于 2013-02-12T18:21:40.773 に答える
0

私はOSGIについてあまり知りませんが、私にはもっと純粋なサーブレットの問題のようです。私はあなたが提供したリンクを調べました、そして私があなたを助けることができることを願っています。

HttpServiceまず、パラメータを受け入れることを伝える必要はないと思います。サーブレットを使用する場合は、リクエストパラメータを簡単に抽出できます。

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException {
    req.getParameter(paramName); // get a request parameter
}

次に、同じサーブレットを複数の「エイリアス」に使用できると思います。これは、私には一種のサーブレットマッピングのように思えます。1つの同じサーブレットに対して複数のマッピング(など)を/helloworld使用できます。/helloxyz

于 2013-02-12T17:30:09.013 に答える