2013-12-10 121 views
0

我想使用Tomcat7從Java WebApp中的ajax調用Servlet。Tomcat上的Java Servlet從AJAX調用

由於Tomcat7支持Servlet 3.0,我使用註釋@WebServlet(「/ VServlet」)將其映射到WebApp中。我使用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文件的代碼。

+0

這是一個建議,不是答案。你有沒有聽說過DWR? URL:http://directwebremoting.org/dwr/index.html – Ascension

回答

2

當你調用

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

你是一個HTTP GET請求,相對於當前URL的URL。也就是說,如果你在/webapp/users/user.xhtml,你會發送一個請求到/webapp/users/VServlet,這顯然不符合你的servlet的URL模式,而不是你想要實現的東西。

你需要考慮到JSF應用程序,鑑於是可作爲#{request.contextPath}建立一個適當絕對URL的上下文路徑:

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

這將請求發送到http://localhost:8080/webapp/VServlet

如果您需要發送請求,相對於根目錄的路徑,例如請求的網址開頭爲一個斜線,/並表示相對於根網址,不管你現在:

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

這將發送一個請求http://localhost:8080/VServlet

+0

這會發送一個請求到'http:// localhost:8080/VServlet',而不是'http:// localhost:8080/WebAppName/VServlet'作爲OP intented。 – BalusC

+0

'/ VServlet'仍然不起作用:-( – user2042895

+0

@ user2042895查看答案更新。正如BalusC在他對這個問題的評論中正確地指出的那樣,在答案中,我忘記了考慮到您的Web應用程序的上下文。 – skuntsel

0

如果你的js代碼是JSP頁面,而不是代碼

$ .getJSON( 'VServlet',函數(數據){裏面...});

「$ .getJSON( '$ {} request.contextPath/VServlet',函數(數據){...});

其他明智的,如果這個代碼是在一些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頁面編譯