繁体   English   中英

Tomcat上的Java Servlet是从AJAX调用的

[英]Java Servlet on Tomcat called from AJAX

我想使用Tomcat7从Java WebApp中的ajax调用Servlet。

我使用注释@WebServlet(“/ VServlet”)将其映射到WebApp中,因为Tomcat7支持Servlet 3.0。 我用jquery命令“$ .getJSON('VServlet',function(data){...})调用servlet;” 但如果我使用字符串'VServlet',它不起作用。

只有当我使用整个网址'http:// localhost:8080 / WebAppName / VServlet'时才有效,但只能在我的电脑上使用。 但是我必须将它部署在具有商业域名的服务器上,明显不同于“localhost”。

请问,是否有人可以告诉我是否有办法用相对URL来解决servlet? 因为如果我使用像' http://my.domain.it:8080/WebAppName/VServlet '这样的字符串,它就无法在服务器计算机上的Tomcat7上运行。

谢谢。

- - - - - - - - - 编辑 - - - - - - - - - - - -

我试着更好地解释我的问题。 我有一个返回json结构的Java Servlet。 servlet在javascript文件中调用,该文件必须在网页中绘制图形,构建SVG图像。 我必须在安装了Tomcat7的商业Windows服务器上部署此Web应用程序。 网络应用程序通常有效。 从用户的角度显示任何错误。 如果我使用上面编写的字符串来调用servlet,那么只是图像不会出现。 我想servlet没有响应,因为我使用了错误的地址/命名。 如果我使用绝对url,servlet会响应js调用者,但我需要一个相对字符串,所以如果服务器的域名发生变化,我也不会更改js文件的代码。

你打电话时

$.getJSON('VServlet', ... );

您正在向相对于当前URLURL发出HTTP GET请求。 也就是说,如果您在/webapp/users/user.xhtml您将向/webapp/users/VServlet发送请求,这显然与您的servlet的URL模式不匹配,而不是您正在尝试的事情实现。

您需要考虑JSF应用程序的上下文路径,该应用程序在视图中可用作#{request.contextPath}来构建正确的绝对URL

$.getJSON('#{request.contextPath}/VServlet', ... );

这将向http://localhost:8080/webapp/VServlet发送请求。

如果您需要发送请求,相对于根目录的路径,这样的请求的URL以斜杠开始, /和表示相对于根 ,无论你在哪里,现在是网址

$.getJSON('/VServlet', ... );

这将向http://localhost:8080/VServlet发送请求。

如果你的js代码在jsp页面内而不是代码

$ .getJSON('VServlet',function(data){...});

“$ .getJSON('$ {request.contextPath} / VServlet',function(data){...});

另外明智的是,如果这个代码在一个函数中的某个js文件中

function someFunction(){
     $.getJSON('VServlet', function(data){ ... });
}

你从jsp调用函数someFunction()然后你像这样添加一个参数到函数 -

function someFunction(url){
         $.getJSON('VServlet', function(data){ ... });
    }

现在从像这样的jsp调用它 -

someFunction( '$ {request.contextPath} / VServlet')

因为$ {request.contextPath} / VServlet是一个el标签,它只能在jsp页面中编译

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM