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的返回结果是什么 为什么不能这样写

解决方案 »

  1.   

    ${str} //问题1 这里为什么没有输出 
    ...
    你str是個字段里面有value不?沒有當然不輸出
      

  2.   

    <%=${pageContext.request.requestURI}%>
    pageContext是當前頁面吧你怎么發?
    我還真沒這樣寫過
    希望高手也順便幫我解惑下。。
      

  3.   

    (1)${str}会在page,reuqest,session,application中搜索并输出str的值,问题是你的str是在JAVA代码里定义的变量,你有把它放到上面四个作用域中的任何一个了吗?没有。所以自然没有输出。
    (2)<%%>里不是写的JAVA代码吗?没见过把${}写里边的 
      

  4.   

    ${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里再翻译 求证一下
      

  5.   

    <%=${pageContext.request.requestURI}%> 
    其实这句被翻译到servlet里是这样的
    out.print(${pageContext.request.requestURI});
    哈哈
      

  6.   

    我们教程里也对el简单介绍了一点儿:
    http://www.family168.com/tutorial/jsp/html/jsp-ch-13.html其实你问这个为什么不能这么写,实在是没有什么理由,只能理解成el不支持这种语法了。他没有智能到把scriptlet和el结合起来使用,反而是taglib中既可以使用el也可以使用scriptlet。只能说是jsp天生残疾,支持不全了,没法子哟。
      

  7.   

    纠正一下5楼的错误
    <%=xxx %>被翻译成了out.print(xxx)
    其他的被翻译成了out.write(xxx)
      

  8.   

    不知道。。什么意思 
    4楼的第一问答的比较明确 哈哈 你答的太模糊了
    (1)${str}会在page,reuqest,session,application中搜索并输出str的值,问题是你的str是在JAVA代码里定义的变量,你有把它放到上面四个作用域中的任何一个了吗?没有。所以自然没有输出。