2011-05-27 53 views
5

背景:發送已動態生成JavaScript文件

我有一個servlet,其中我動態生成JavaScript和投入的可變script。然後,我設置的響應內容類型爲text/javascript並通過腳本發送到客戶端:

resp.setContentType("text/javascript"); 
resp.getWriter().println(script); 

問題:

瀏覽器就下載JavaScript文件,但不承認裏面的功能文件。如果我創建一個靜態JavaScript文件並使用它,它可以正常工作。

問:

應該做些什麼,使瀏覽器從servlet把響應作爲正常的JavaScript文件?

謝謝你的幫助。

+1

它應該工作的罰款。你究竟如何包括它?如果通過在瀏覽器地址欄中輸入servlet的URL直接請求,響應看起來是否正常? – BalusC 2011-05-27 18:23:31

+0

聽起來你的問題可能在客戶端,你如何包含腳本? – 2011-05-27 18:29:53

+0

響應是否爲有效的JavaScript?檢查你的瀏覽器錯誤日誌;我傾向於使用單元測試來解析生成的Rhino腳本,只是作爲一個完整性檢查。 Content-Type頭是否被客戶接收?我曾遇到資源經理/ VIP /反向代理人會重寫我精心製作的頭文件並在其中注入各種基於規則的垃圾文件的情況。如果是這樣,嘗試用'.js'結束servlet映射。提到瀏覽器,servlet容器等可能會有所幫助。 – McDowell 2011-05-27 18:32:38

回答

5

它應該可以正常工作。我懷疑你只是以錯誤的方式包含它,或者過早調用函數或者響應內容格式錯誤。

我只是做了一個快速測試:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>SO question 6156155</title> 
     <script src="javaScriptServlet"></script> 
     <script>test()</script> 
    </head> 
    <body> 
    </body> 
</html> 

@WebServlet(urlPatterns={"/javaScriptServlet"}) 
public class JavaScriptServlet extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/javascript"); 
     response.getWriter().write("function test() { alert('peek-a-boo'); }"); 
    } 

} 

,我得到

enter image description here

+0

再次感謝@BalusC! – craftsman 2011-05-28 09:10:40

+0

當我使用一個簡單的警報,因爲它是工作,但是當我寫大的JavaScript代碼,那麼它不起作用。請幫幫我。 – snj 2015-07-11 15:23:49

+0

@snj:如果您有新問題,只需按右上方的提問問題按鈕即可。 – BalusC 2015-07-11 15:43:12

0

您可以隨時將腳本'內嵌'寫入網頁。

1

你怎麼從你的瀏覽器是指這個servlet?

如果您希望將其包含在HTML頁面(現有的)中,您應該從頁面的標記中引用它。

Ex。

<html> 
<head> 
<script type='text/javascript' src='URL_TO_YOUR_SERVLET'></script> 
</head> 
</html> 

或者,如果您希望它作爲Ajax調用的一部分執行,只需將響應傳遞給eval函數即可。

或者,如果您只想發送輸出並在瀏覽器中執行它,則還需要發送HTML段。然後把你的JS與body標籤一起作爲腳本標籤。

ex。您的servlet使用內容類型「text/html」發送以下內容:

<html> 
<body> 
<script type='text/javascript'> 
    <!-- write your generated JS here --> 
</script> 
</body> 
</html> 
1

我認爲這種方式更好。在JSP

<%@ page language="java" contentType="text/javascript; charset=UTF-8" pageEncoding="UTF-8"%> 
alert('Pure JavaScript right here!'); 

集內容類型:

contentType="text/javascript; charset=UTF-8"