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的返回结果是什么 为什么不能这样写
<% 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的返回结果是什么 为什么不能这样写
...
你str是個字段里面有value不?沒有當然不輸出
pageContext是當前頁面吧你怎么發?
我還真沒這樣寫過
希望高手也順便幫我解惑下。。
(2)<%%>里不是写的JAVA代码吗?没见过把${}写里边的
<%=${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里再翻译 求证一下
其实这句被翻译到servlet里是这样的
out.print(${pageContext.request.requestURI});
哈哈
http://www.family168.com/tutorial/jsp/html/jsp-ch-13.html其实你问这个为什么不能这么写,实在是没有什么理由,只能理解成el不支持这种语法了。他没有智能到把scriptlet和el结合起来使用,反而是taglib中既可以使用el也可以使用scriptlet。只能说是jsp天生残疾,支持不全了,没法子哟。
<%=xxx %>被翻译成了out.print(xxx)
其他的被翻译成了out.write(xxx)
4楼的第一问答的比较明确 哈哈 你答的太模糊了
(1)${str}会在page,reuqest,session,application中搜索并输出str的值,问题是你的str是在JAVA代码里定义的变量,你有把它放到上面四个作用域中的任何一个了吗?没有。所以自然没有输出。