1

我已经用 Jersey实现了一些 RESTful 资源 URL,例如http://myapp.appspot.com/temperature/get 。我还有一个 servlet 在我想调用资源 url 的同一个 AppEngine 实例上运行。我的问题是我不知道如何引用 servlet 所在的正在运行的 Appengine 实例。换句话说,我想使用相当于 127.0.0.1 或 $SERVER_HOME 的 AppEngine。

我最初的方法是在 servlet 中做这样的事情:

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 的建议。通常,我们在 servlet 中设置一个静态属性类,用于保存当前活动域的名称。或者只是使用 TaskQueues ......它们非常适合这个目的。

于 2012-06-04T16:28:09.553 回答