Tomcat上的Java Servlet是从AJAX调用的

时间:2013-12-10 17:11:44

标签: ajax jsf servlets tomcat7 url-mapping

我想使用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上运行。

感谢。

------------------ EDIT -----------------------

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

2 个答案:

答案 0 :(得分:2)

致电时

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

您正在向相对于当前网址的网址发送HTTP GET请求。也就是说,如果你在/webapp/users/user.xhtml,你将向/webapp/users/VServlet发送一个请求,这显然与你的servlet的URL模式不匹配,而不是你想要实现的。< / p>

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

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

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

如果您需要将请求发送到相对于根的路径,则此类请求网址以斜杠/开头,并代表相对于根的网址,无论您身在何处现在:

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

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

答案 1 :(得分:0)

如果您的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页面中编译