表达式语言--内置对象
在表达式语言中存在很多内置对象,
pageContext, pageScope,requestScope,sessionScope,applicationScope,param,paramValues,header,headerValues,cookie,initParam
<%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head> <body> <% pageContext.setAttribute("info","page属性范围") ; request.setAttribute("info","request属性范围") ; session.setAttribute("info","session属性范围") ; application.setAttribute("info","application属性范围") ; %> <h3>${info}</h3> </body> </html>
上述在不同的属性范围,保存了同名的属性的话,那么EL的查找范围是page->request->session->application
此时,要想准确定位,就可以依靠内置对象帮忙:pageScope,requestScope,sessionScope,applicationScope
上述代码可以改成:
<%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head> <body> <% pageContext.setAttribute("info","page属性范围") ; request.setAttribute("info","request属性范围") ; session.setAttribute("info","session属性范围") ; application.setAttribute("info","application属性范围") ; %> <h3>PAGE属性内容:${pageScope.info}</h3> <h3>REQUEST属性内容:${requestScope.info}</h3> <h3>SESSION属性内容:${sessionScope.info}</h3> <h3>APPLICATION属性内容:${applicationScope.info}</h3> </body> </html>
通过EL的内置对象也可以发现pageContext,之前讲解内置对象的时候强调,pageContext可以取得request,session,application等对象,现在就可以通过EL直接完成内置对象的方法调用:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<h3>IP地址:${pageContext.request.remoteAddr}</h3>
<h3>SESSION ID:${pageContext.session.id}</h3>
<h3>是否是新session:${pageContext.session.new}</h3>
</body>
</html>
上述的命名和操作都是为了依靠反射机制完成,is,get都自动转换。
还可以接收参数,通过URL重写传递参数,如果要想接收参数,通过param参数完成。
<%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head> <body> <h3>通过内置对象接收输入参数:<%=request.getParameter("ref")%></h3> <h3>通过表达式语言接收输入参数:${param.ref}</h3> </body> </html>
没有参数传过来的时候,第一行显示null,第二行显示 空白。
接收参数的第一个方式:URL重写:http://localhost:8080/wly/eldemo/get_param_demo.jsp?ref=lixinghua
传递参数:
<html> <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head> <body> <form action="param_values_demo.jsp" method="post"> 兴趣: <input type="checkbox" name="inst" value="唱歌">唱歌 <input type="checkbox" name="inst" value="游泳">游泳 <input type="checkbox" name="inst" value="看书">看书 <input type="submit" value="显示"> </form> </body> </html>
接收param_values_demo.jsp,需要使用paramValues接收一组参数,由于现在接收过来的是数组,就需要下标访问:
<%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head> <body> <% // 正经开发中,此代码要通过过滤器实现 request.setCharacterEncoding("GBK") ; %> <h3>第一个参数:${paramValues.inst[0]}</h3> <h3>第二个参数:${paramValues.inst[1]}</h3> <h3>第三个参数:${paramValues.inst[2]}</h3> </body> </html>
实际开发中,使用最多的还是param对象,接收一个参数。从MVC模式来讲,所有的参数接收应该交过Servlet。
总结:
1. EL采取顺序方式输出属性:page<request<session<application,但是一般开发中避免同名属性的存在
2. 通过param可以进行参数的接收 $(属性)