鍍金池/ 問答/Java  Linux  HTML/ jsp的輸出表達(dá)式 <%=refName1%>和${name}有何區(qū)

jsp的輸出表達(dá)式 <%=refName1%>和${name}有何區(qū)別? 轉(zhuǎn)譯的.class有何不同呢?

最近在學(xué)習(xí)jsp,遇到了問題.

<%
    //此時(shí)相當(dāng)于往session對象中存放了一個(gè)name屬性,等價(jià)于 session.setAttribute("name","孤傲蒼狼");
    pageContext.setAttribute("name", "孤傲蒼狼", PageContext.SESSION_SCOPE);
%>
<%
    //取得session對象的屬性值,使用pageContext對象獲取
    String refName1 = (String) pageContext.getAttribute("name",
            PageContext.SESSION_SCOPE);
    //由于取得的值為Object類型,因此必須使用String強(qiáng)制向下轉(zhuǎn)型,轉(zhuǎn)換成String類型
    String refName2 = (String) session.getAttribute("name");
%>
<h1>取出存放在session對象中的屬性值:</h1>
<p>第一種做法:使用pageContext.getAttribute("attributeName",PageContext.SESSION_SCOPE);去取出session對象中值</p>
<h3>
    姓名:${name} <%--正常輸出,而用<%=name%>輸出空字符 --%>
</h3> 
    姓名:<%=refName1 %><%--正常輸出,而用${refName1},輸出為空字符 --%>
<p>第二種做法:使用session.getAttribute("attributeName");去取出session對象中值</p>
<h3>
    姓名:<%=refName2 %></h3>

${name} 轉(zhuǎn)譯后的.java代碼

out.write((java.lang.String) 
org.apache.jasper.runtime
.PageContextImpl.proprietaryEvaluate("${name}", java.lang.String.class, 
(javax.servlet.jsp.PageContext)_jspx_page_context, null, false));

<%=refName1%>轉(zhuǎn)譯后的.java代碼

out.print(refName1 );

請問這兩個(gè)到底什么區(qū)別呢?謝謝大神,第一次提問,排版可能不是很好。
這些代碼是我在這里弄來的,修改一些。

回答
編輯回答
別硬撐

${}里面的值不存在時(shí),訪問該頁面不會報(bào)錯(cuò)
<%= %>里面的值不存在時(shí),訪問該頁面會報(bào)錯(cuò)的

2018年6月14日 20:45
編輯回答
敢試

${name}request.getAttribute("name"),而<%= name %>就是頁面作用域上的name。

2017年12月10日 14:18
編輯回答
假灑脫

${}是EL表達(dá)式
<%= %>是jsp表達(dá)式
jsp表達(dá)式 更加原始吧

2017年10月2日 07:07
編輯回答
夢囈

jsp 就是 Servlet,所以<%=refName1%> 執(zhí)行的是局部變量,屬于方法內(nèi)部的變量。

${name} 有搜索范圍的,從page -> request -> session -> application.

2018年9月2日 15:39
編輯回答
萌小萌

雖然兩種方式(JSP 和 EL表達(dá)式)都可以獲取到數(shù)據(jù),然而吾輩還是更推薦 EL 表達(dá)式呢 (σ′▽‵)′▽‵)σ

2017年6月9日 17:35
編輯回答
選擇

都是輸出后臺數(shù)據(jù)的方式

${}是EL表達(dá)式的方式
<%= %>是JSP表達(dá)式的方式

2017年2月12日 12:57
編輯回答
小眼睛

都是輸出,區(qū)別在取值方式不同,一個(gè)是從上下文session等中獲取,一個(gè)是直接使用局部變量。

2017年10月20日 17:10