我已经使用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资源?提前谢谢!
答案 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类
如果你想定位一个版本,你应该真的知道网址...如果没有,请使用Ramesh的建议。通常我们在servlet中设置一个静态属性类,它为此目的保存当前活动域的名称。或者只使用TaskQueues ......它们非常适用于此目的。