EL全名Expression Language.EL提供了在JSP腳本編制元素范圍外使用運行時表達式的功能。
腳本編制元素是指頁面中能夠用於在JSP文件中嵌入java代碼的元素。
JSP標准標記庫(jsp staandard tag library,jstl)是一個實現web應用程序常用功能的定制標記庫集。有c標簽。fmt標簽,sql標簽,xml標簽,fn標簽等.
EL表達式與jstl有何不同?
El表達式的出現主要是為了使jsp的使用更簡單,減少java的代碼,一般與jstl配合使用,但有時會出現一些疑問。
簡單的說,EL是用來顯示數據的,功能跟<%=表達式%> 一樣,EL是不需要引入什么東西的,而jstl通常用一些邏輯控制,核心標簽庫常用的是if和forEach。
例如,有一個對象,User,User有個屬性userName,
${sessionScope.user.userName},相當於
<%
User user=(User) session.getAttribute("user");
out.print(usre.userName);
%>
上面是嵌套在jsp中的java代碼。
有時候,我們需要跟js交互數據,
可以在js中這樣寫:
方法一:
var userName= "${user.userName}";//注意要有雙引號
同時,我們要明白 jstl的標簽會轉化為服務器端的代碼執行,而js代碼則在客戶端執行。
如果js代碼在jsp文件中,這樣寫是可以的 ,但如果是放在引入的js文件,這樣是不起作用的,因為EL表達式是在服務端執行的,服務端執行完成后再傳給客戶端的,js是在客戶端執行的,el在js前就被執行了。
方法二:
有時候我們把需要引用的全局變量寫在一個jsp中,使用java代碼
把引入的外部js改為jsp文件,然后在jsp頁面中引入<script src="myjs.jsp"></script>
然后在jsp頁面中引入myjs.jsp,
<script src="myjs.jsp" type="text/javascript"></script>
<%
String url = "http://" + request.getServerName(); //服務器地址
}
%>
<script type="text/javascript">
var url='<%=url%>';
</script>
或者
<c:set var="webRoot" value="<%=url%>" />
方法三:隱藏域
這個簡單,<input type="hidden" id="text1" value="${user.userName}">
然后在js中直接獲取id為text1的值就可以了。
方法四,ajax訪問后台方法,request.getSession.getAttribute("user");
返回業務給js邏輯處理。