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

原文地址:https://www.cnblogs.com/bi-hu/p/14828865.html