如何从servlet调用在同一个AppEngine实例上运行的资源URL

时间:2012-06-04 07:35:13

标签: java google-app-engine servlets

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

我最初的方法是在servlet中执行类似的操作:

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

,但getContextPath()返回一个空字符串(因为我没有将应用程序名称放在url中。

如何获取应用程序基本位置的引用,以便我可以引用其中运行的URL资源?提前谢谢!

2 个答案:

答案 0 :(得分: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);

}

答案 1 :(得分:0)

相同的实例或相同版本的代码?您无法定位同一个实例。没有办法做到这一点。您可以定位相同的版本(yourdomain.appspot.com或latest.yourdomain.appspot.com)。如果您想知道您的应用程序是否在开发服务器中运行,您可以使用SystemProperty类

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

如果你想定位一个版本,你应该真的知道网址...如果没有,请使用Ramesh的建议。通常我们在servlet中设置一个静态属性类,它为此目的保存当前活动域的名称。或者只使用TaskQueues ......它们非常适用于此目的。