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

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

最近在學習jsp,遇到了問題.

<%
    //此時相當于往session對象中存放了一個name屬性,等價于 session.setAttribute("name","孤傲蒼狼");
    pageContext.setAttribute("name", "孤傲蒼狼", PageContext.SESSION_SCOPE);
%>
<%
    //取得session對象的屬性值,使用pageContext對象獲取
    String refName1 = (String) pageContext.getAttribute("name",
            PageContext.SESSION_SCOPE);
    //由于取得的值為Object類型,因此必須使用String強制向下轉(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 );

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

回答
編輯回答
別硬撐

${}里面的值不存在時,訪問該頁面不會報錯
<%= %>里面的值不存在時,訪問該頁面會報錯的

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

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

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

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

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

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

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

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

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

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

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

${}是EL表達式的方式
<%= %>是JSP表達式的方式

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

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

2017年10月20日 17:10