EL表达式的疑问

classnameextendsjava 2008-04-10 12:37:12
EL表达式到底被翻译成什么
<% String str="aaa"; %>

<%=request.getRequestURI()%>
//被翻译成out.print(request.getRequestURI());

${pageContext.request.requestURI}
//被翻译成out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate
("${pageContext.request.requestURI}", java.lang.String.class, (PageContext)_jspx_page_context, null, false));

jsp:<%=str%>
//被翻译成out.print(str);

${str} //问题1 这里为什么没有输出
//被翻译成out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${str}", java.lang.String.class, (PageContext)_jspx_page_context, null, false));

//<%=${pageContext.request.requestURI}%> 问题2 EL的返回结果是什么 为什么不能这样写
...全文
174 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yami251139 的回复:]
..
[/Quote]
不知道。。什么意思
4楼的第一问答的比较明确 哈哈 你答的太模糊了
(1)${str}会在page,reuqest,session,application中搜索并输出str的值,问题是你的str是在JAVA代码里定义的变量,你有把它放到上面四个作用域中的任何一个了吗?没有。所以自然没有输出。
yami251139 2008-04-11
  • 打赏
  • 举报
回复
..
q1531 2008-04-10
  • 打赏
  • 举报
回复
EL不能到<% %>里吧。
  • 打赏
  • 举报
回复
纠正一下5楼的错误
<%=xxx %>被翻译成了out.print(xxx)
其他的被翻译成了out.write(xxx)
临远 2008-04-10
  • 打赏
  • 举报
回复
我们教程里也对el简单介绍了一点儿:
http://www.family168.com/tutorial/jsp/html/jsp-ch-13.html

其实你问这个为什么不能这么写,实在是没有什么理由,只能理解成el不支持这种语法了。他没有智能到把scriptlet和el结合起来使用,反而是taglib中既可以使用el也可以使用scriptlet。

只能说是jsp天生残疾,支持不全了,没法子哟。
  • 打赏
  • 举报
回复
<%=${pageContext.request.requestURI}%>
其实这句被翻译到servlet里是这样的
out.print(${pageContext.request.requestURI});
哈哈
  • 打赏
  • 举报
回复
${str} 这个问题了解了 发现还是看书不仔细 书上有说 但是没明说 哈哈
<%=${pageContext.request.requestURI}%>
这个还是不明白 <%= %>这里面是个表达式 为什么不能用EL表达式呢 ${pageContext.request.requestURI}如果这个返回的是一个字符串 那应该可以的啊

根据这个
${pageContext.request.requestURI}
//被翻译成out.write((java.lang.String)org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate
("${pageContext.request.requestURI}", java.lang.String.class, (PageContext)_jspx_page_context, null, false));

因为${pageContext.request.requestURI}这个是直接写在<%%>外面的 不能肯定是先把它翻译成(java.lang.String)org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate
("${pageContext.request.requestURI}", java.lang.String.class, (PageContext)_jspx_page_context, null, false)
然后再out.write()的 还是直接翻译成out.write(xxxx)的
<%%>外面的普通字符串都是被翻译成out.print()语句的 EL表达式被翻译成out.write() 所以我猜应该是直接翻译成out.write(xxxxx)的 这也能说的通为什么<%=${pageContext.request.requestURI}%> 这样不行了
但如果这样的话 我又有个疑问
<c:out value="string ${xxxx} ${xxxx} ${xxxx}"/>
那这种它是怎么翻译的呢 先把它翻译成string ${xxxx} ${xxxx} ${xxxx}然后再翻译${xxxx} 还是先翻译${xxx} 然后out.print(value)呢 我机子上没jstl 所以这个没试验
不过根据上面的推断 应该是先把string ${xxxx} ${xxxx} ${xxxx}插入到jsp代码中 然后servlet里再翻译 求证一下
lingirl 2008-04-10
  • 打赏
  • 举报
回复
(1)${str}会在page,reuqest,session,application中搜索并输出str的值,问题是你的str是在JAVA代码里定义的变量,你有把它放到上面四个作用域中的任何一个了吗?没有。所以自然没有输出。
(2)<%%>里不是写的JAVA代码吗?没见过把${}写里边的。。。
yami251139 2008-04-10
  • 打赏
  • 举报
回复
<%=${pageContext.request.requestURI}%>
pageContext是當前頁面吧。。。你怎么發?
我還真沒這樣寫過。。。
希望高手也順便幫我解惑下。。
yami251139 2008-04-10
  • 打赏
  • 举报
回复
而且你要把它連起來看的。。。不是單看著一個尖括號里面的東西。。。
yami251139 2008-04-10
  • 打赏
  • 举报
回复
${str} //问题1 这里为什么没有输出
...
你str是個字段。。。里面有value不?沒有當然不輸出

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧