jsp的输出表达式 <%=refName1%>和${name}有何区别? 转译的.class有何不同呢?

发布于 2022-09-06 09:34:32 字数 1413 浏览 15 评论 0

最近在学习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强制向下转型,转换成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} 转译后的.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%>转译后的.java代码

out.print(refName1 );

请问这两个到底什么区别呢?谢谢大神,第一次提问,排版可能不是很好。
这些代码是我在这里弄来的,修改一些。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

帅气称霸 2022-09-13 09:34:32

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

瑾夏年华 2022-09-13 09:34:32

jsp 就是 Servlet,所以<%=refName1%> 执行的是局部变量,属于方法内部的变量。

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

徒留西风 2022-09-13 09:34:32

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

别挽留 2022-09-13 09:34:32

都是输出,区别在取值方式不同,一个是从上下文session等中获取,一个是直接使用局部变量。

北方的韩爷 2022-09-13 09:34:32

${}里面的值不存在时,访问该页面不会报错
<%= %>里面的值不存在时,访问该页面会报错的

薄荷→糖丶微凉 2022-09-13 09:34:32

都是输出后台数据的方式

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

攒一口袋星星 2022-09-13 09:34:32

虽然两种方式(JSP 和 EL表达式)都可以获取到数据,然而吾辈还是更推荐 EL 表达式呢 (σ′▽‵)′▽‵)σ

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文