• 6. EL表达式内置对象


    EL 蛮强大的啊 可以直接输出某些东西,如果要知道底层 你自己去看编译后的源码即可。

    EL表达式内置对象

    同JSP类似,在EL表达式中也有一些内置对象,共11个:

    • pageContext
    • pageScope
    • requestScope
    • sessionScope
    • applicationScope
    • cookie
    • param
    • paramValues
    • header
    • headerValues
    • initParam

    上面红色表示的 我们已经介绍过了,也用过了:

    经过一系列查找和求知,知道了 :

    page 和 pagescope 和 pagecontext 三个区别:
    page是当前jsp页面也就是jsp转换后的servlet类实例(this)。
    pagescope即当前页面的域,也就是pagecontext对于的域
    pagecontext当前页面的上下文,可以获得隐式对象,同时可以保持获取不同域中的属性值,拥有自己的域(pageScope)

    所以呢 pagescope 和 pagecontext 这两玩意是差不多一样的 但是 pagecontext 【其实 EL 内置对象 pagecontext 等于JSP 的 pageContext 】 功能比较强大,下面讲解:

    上面除了pageContextjavax.servlet.jsp.PageContext类型,其他的都是java.util.Map类型。下面主要介绍一些其他常用的:

    pageContext

    EL表达式中的pageContext与JSP内置对象中的 pageContext 是同一个对象通过该对象,可以获取
    到 request、response、session、servletContext、servletConfig 等对象

    比如直接在el表达式用pageContext获取request对象,然后打印 :

    ${ pageContext.request }
    <%-- 结果: org.apache.catalina.connector.RequestFacade@2790a6fa  --%>

     注意:  EL 中的内置对象: pageContext  和 JSP中的内置对象是两个东西     即使是一样的!!! 但是有些名字是不一样的啊!   

    还有就是 El表达式中的 pageContext  对象只能获取到其属性 而不能调用获取到的 对象【例如 reques、session 等...】 的 方法! 这点自己去验证!!!

    例如:

    <%  out.print(pageContext.getSession().getId()); %>
    ${ pageContext.session.id }    

    第一个行是 JSP 的 pageContext  第二行是用EL表达式的内置对象打印的 都一样 但是就是不能调用用 pageContext获取的对象的方法

    其底层实际调用的是
    pageContext.getRequest()方法 其他对象则是  pageContext.getXXXX() 

    同理,也可以通过类似方式获取到其它对象。
    在这些获取的对象中,有一个是实际工程中最常用的:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@ page import="java.util.*,test.*"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <form action="${pageContext.request.contextPath}/index.jsp">
    <input type = "submit" value="提交">
    </form>
    </body>
    </html>

    看见没 其实这个可以表单提交的网址是: http://localhost:8080/JSP/index.jsp? 

    param
    在 EL 中通过${param.参数名}获取到请求中指定参数名的值。例如,提交的请求为:

    http://localhost:8080/JSP/index.jsp?user=123456&password=abcde

    在 JSP 页面中通过如下方式,可获取到 user 参数 和 password 参数的值:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@ page import="java.util.*,test.*"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    ${param.user}
    <br>
    ${param.password}
    
    </body>
    </html>

    其实你也可以POST提交然后 到某个页面然后自己获取  其次呢 它的原理就是request.getParameter();

    问题来了:  如果提交的是多个值 我怎么获取: 例如爱好有  篮球 跆拳道 和 羽毛球:

    paramValues
    若提交的请求中同一参数具有多个值则可通过 ${paramValues.参数名[索引]} 获取到指定索引号的该参数值。例如,提交的请求为:

    localhost:8080/07-04-jsp/index.jsp?hobby=basketball&hobby=football

    在JSP中获取方式如下

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@ page import="java.util.*,test.*"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    ${paramValues.hobby[0]}
    ${paramValues.hobby[1]}
    ${paramValues.hobby[2]}
    </body>
    </html>

    但是具体有多少个 这个我就不知道怎么算了 其实你自己用 request直接getParameterValues获取:

    <% 
    String[] hobby = (String[])request.getParameterValues("hobby");
    out.print(hobby.length);
    %>

    initParam
    在 EL 中通过使用 ${initParam.初始化参数名} 可以获取到初始化参数的值。 例如在 web.xml 中定义了初始化参数如下:

      <context-param>
      <param-name>name</param-name>
      <param-value>bihu</param-value>
      </context-param>

    那么,获取:

    ${ initParam.name}

    el内置对象 cookie :  可以获取指定cook的name  和 value  :

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@ page import="java.util.*,test.*"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <% Cookie c = new Cookie("user","bihu");
        response.addCookie(c);
        
    %>
    ${cookie.user.name }
    ${ cookie.user.value}
    
    </body>
    </html>

    其他对象在开发中基本不常使用,这里就不介绍了 , 其实很多都和JSP的的那些方法一样的 内置了对象 只是比较方便而已!

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14828865.html

  • 相关阅读:
    带你破解时间管理的谜题
    学点产品思维(一起拿返现)
    利用MAT玩转JVM内存分析(一)
    JVM利器:Serviceability Agent介绍
    003-005:Java平台相关的面试题
    002-如何理解Java的平台独立性
    001-为什么Java能这么流行
    Redis保证事务一致性,以及常用的数据结构
    敏感词过滤服务的实现
    或许,挂掉的点总是出人意料(hw其实蛮有好感的公司)
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14828865.html
Copyright © 2020-2023  润新知