2010-01-25 417 views

回答

1

是的,您可以使用JSP生成JavaScript以發送到瀏覽器。只需將<script>標記指向一個導致JSP頁面的URL,該頁面將響應的MIME類型設置爲「text/javascript」。

不,您不能在瀏覽器的JavaScript中使用JSP標籤。 JSP是服務器端技術,這意味着處理必須在服務器上完成。

5

JSP是一種視圖技術,運行在服務器端,您可以使用它來編寫HTML/CSS/JS之類的模板文本。您可以使用JSP taglibs和EL來控制頁面流並使用Java代碼動態輸出。這也涉及JavaScript內容/輸出。一旦JSP運行,它基本上會生成一個HTML頁面並將其發送到客戶端。您可以使用JSP動態輸出後端數據,就好像它是JavaScript變量一樣。例如:

<script> 
    var foo = '${someBean.someProperty}'; 
</script> 

一旦HTML頁面(與CSS/JS裏面)已經到達客戶端(右擊頁面,查看源代碼,你不會看到的Java/JSP的任何一行代碼),那麼HTML將開始被解釋,CSS將開始被應用並且JS將開始被執行。客戶端無法使用Java/JSP代碼。如果您查看客戶端生成的源,上面的例子,現在看起來像:

<script> 
    var foo = 'somePropertyValue'; 
</script> 

這樣JavaScript有服務器端的變量只是即時訪問。

現在相反;讓JavaScript訪問/調用Java/JSP代碼的唯一方法是實際上向服務器端發送HTTP請求。這可以通過幾種方法完成:執行window.location來執行同步GET請求,或者執行form.submit()來執行同步GET或POST請求,或者執行XMLHttpRequest#send()來執行異步請求(也稱爲Ajax)。

或者,您也可以讓JavaScript設置表單的一個(隱藏)輸入字段,以便每當用戶提交表單時「自動」獲取表單提交。無論哪種方式,服務器端的Java/JSP代碼都可以通過常用的請求參數方式訪問JavaScript控制的值。

要了解有關Java/JSP和JavaScript之間的隔離牆的更多信息,您可能會發現this article有用。

2

當我在會話或上下文中想要暴露在客戶端時,我對此有所瞭解。我創建了一個包含全局變量值的javascript mime類型的jsp文件。然後將其包含在我的頁面頂部,並在必要時重新使用這些值。

爲如:

**globalVar.jsp** 

var ctxPath = "<%=request.getContextPath()%>"; 

**script.js** 

ajaxURL = ctxPath + "/path/to/call?param=value"; 

,你甚至可以命名空間此爲outlined here

0

您可以輕鬆地使用Java標籤分配給稍後的JavaScript代碼中調用Java變量。

<% String name="Peter" %>

,然後在JavaScript ..

<script type="text/javascript"> 

VAR _name = <%=名稱%>

1

@BalusC答案解釋的清楚什麼是服務器端和客戶端編程。但是我想強調一點,如果你真的想你javascript內得到運行jsp,那麼你可以給它的文件擴展名.jsp而不是.js因爲什麼決定文件是否是一個javascript文件或者也不是什麼MIME媒體類型。您可以使用JSP設置MIME:

<%@ page contentType="text/javascript" %> 

,現在你可以使用內的jspjavascript

var someMessage = "${someMessage}" 
var anotherMessage = "${anotherMessage}"/>" 

現在,您可以直接鏈接到它:

<script type="text/javascript" src="/script.jsp"></script> 
相關問題