我正在使用GWT并创建HTTP请求但是我在从生产版本访问该文件时遇到问题,即使它在开发中工作正常。我的主程序在客户端有以下请求。
static final String dataURL = GWT.getModuleBaseURL() + "interpretData";
public void onModuleLoad() {
requestData(dataURL, new AsyncCallback<String>() {
public void onFailure(Throwable caught) {
RootPanel.get(holderId).add(new Label(error + ": Asynchronous call failed - " + caught.getLocalizedMessage()));
return;
}
public void onSuccess(String JSON){
try{
// code executed on success
} catch (Exception e) {
RootPanel.get(holderId).add(new Label(error + ": " + e.getMessage()));
return;
}
}
});
}
public static void requestData(final String url, final AsyncCallback<String> callback) {
// create a request for the xml data on the server
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
builder.setCallback(new RequestCallback() {
public void onError(Request request, Throwable exception) {
callback.onFailure(exception);
}
public void onResponseReceived(Request request, Response response) {
try {
final int responseCode = response.getStatusCode() / 100;
if (url.startsWith("file:/") || (responseCode == 2) || (responseCode == 0)){
callback.onSuccess(response.getText());
} else {
callback.onFailure(new IllegalStateException(" Http Error: #" + response.getStatusCode() + " - " + response.getStatusText()));
}
} catch (Throwable e) {
callback.onFailure(e);
}
}
});
在服务器端,我有:
public class interpretData extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.setContentType("application/json");
// code to return a String
}
最后,我的XML文件中包含以下内容:
<servlet>
<servlet-name>interpretData</servlet-name>
<servlet-class>com.gmod.caeli.server.interpretData</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>interpretData</servlet-name>
<url-pattern>/caeli/interpretData</url-pattern>
</servlet-mapping>
最后,我可以从http://127.0.0.1:8888/caeli/interpretData访问该文件,因此开发版本完全正常,但我不知道如何让它在生产中工作(我要求生产的URL是file:///~ / workspace / Caeli / war / caeli / interpretData)我搜索了一些例子,但是我没有找到任何关于我做错的线索。我尝试使用tomcat进行设置,我也遇到了404错误。我觉得我错过了一些小东西,所以希望这足以让人注意到一些错误。
答案 0 :(得分:1)
根据我的经验和研究,Web浏览器无法通过Ajax调用,锚标记,javascript等请求您在生产中尝试请求的URL(文件:/// ...)。它可能是一个由于您可以手动将该URL输入浏览器并获得预期结果,因此很容易引起混淆/误导,但浏览器不允许使用此本地资源请求。