1

http://myapp.appspot.com/temperature/getなどの RESTful リソース URLを Jersey で実装しました。また、リソース URL を呼び出したい同じ AppEngine インスタンスでサーブレットを実行しています。私の問題は、サーブレットが含まれる実行中の Appengine インスタンスを参照する方法がわからないことです。つまり、127.0.0.1 または $SERVER_HOME に相当する AppEngine を使用したいと考えています。

私の最初のアプローチは、サーブレットで次のようなことをすることでした:

URL url = new URL(getServletContext().getContextPath());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

、しかし getContextPath() は空の文字列を返します (アプリケーション名を URL に配置していないため、そうあるべきです)。

アプリのベース ロケーションへの参照を取得して、アプリ内で実行されている URL リソースを参照するにはどうすればよいですか? 前もって感謝します!

4

2 に答える 2

1

URL が同じサーバー マシンに存在するかどうかを確認するには、次のようにします。

String host = remoteHost;
int port = remotePort;
String remoteContext = //the application root you want to access;
String remtoePath =  // the servlet or path you want to access;
if((host.equals(request.getServerName()) || host.equals("localhost")) 
      && port == request.getServerPort(){
   ....
  ServletContext context = servletContext.get(remoteContext);
  RequestDispatcher dispatcher = context.getRequestDispatcher(remotePath);
     //if you want to forward
  //dispatcher.forward(request, response);
     //if you want to include
  //dispatcher.include(request, response);

}
于 2012-06-04T08:01:11.380 に答える
0

コードの同じインスタンスまたは同じバージョンですか? 同じインスタンスをターゲットにすることはできません。それを行う方法はありません。同じバージョン (yourdomain.appspot.com または latest.yourdomain.appspot.com) をターゲットにすることができます。アプリが開発サーバーで実行されているかどうかを知りたい場合は、 SystemProperty クラスを使用できます

https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/utils/SystemProperty

バージョンをターゲットにしたい場合は、本当にURLを知っている必要があります...そうでない場合は、Rameshの提案を使用してください。通常、この目的のために、現在アクティブなドメインの名前を保持する静的プロパティ クラスをサーブレットに設定します。または、TaskQueues を使用するだけです。この目的には最適です。

于 2012-06-04T16:28:09.553 に答える