[原创]java WEB学习笔记38:EL 中的 11个 隐含对象 详解
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. EL 本身也有自己的隐含对象。EL 隐含对象总共有 11 个
2. 分类
1)与范围有关的隐含对象:applicationScope sessionScope requestScope pageScope
2)与输入有关的隐含对象:param paramValues
3)其他隐含对象:cookie header headerValues initParam pageContext
3.详解:与范围有关的隐含对象
1) 与 范 围 有 关 的 EL 隐 含 对 象 包含以 下四个: pageScope 、 requestScope 、 sessionScope 和applicationScope,它们基本上就和 JSP 的 pageContext、request、session 和 application 一样;
2) 四个隐含对象只能用来取得范围属性值(域对象所设置的属性),即 JSP中的 getAttribute(String name),却不能取得其他相关信息;
3)注意:JSP 中的 request 对象除可以存取属性之外, 还可以取得用户的请求参数或表头信息等等。 但是在 EL 中,它就只能单纯用来取得对应范围的属性值;
例如:我们要在 session 中储存一个属性,它的名称为 username,在 JSP 中使用session.getAttribute("username") 来 取得 username 的 值 , 但 是在 EL 中 , 则 是 使 用${sessionScope.username}来取得其值的
① pageScope :范围和 JSP 的 Page 相同,也就是单单一页 JSP Page 的范围(Scope);
② requestScope :范围和 JSP 的 Request 相同,requestScope 的范围是指从一个 JSP 网页请求到另一个 JSP 网页请求之间,随后此属性就会失效;
③ sessionScope:范围和 JSP Scope 中的 session 相同,它的属性范围就是用户持续在服务器连接的时间;
④ applicationScope:范围和 JSP Scope 中的 application 相同,它的属性范围是从服务器一开始执行服务,到服务器关闭为止;
例子代码:
1 <%
2 application.setAttribute("time", new Date());
3 %>
4 <!-- 隐藏对象之范围相关的: -->
5 time:${applicationScope.time }
6 <%--
7 等同于
8 <%
9 application.getAttribute("time");
10 %>
11 --%>
4.详解:与输入有关的隐含对象
1)一般而言,我们在取得用户的请求参数时,可以利用下列方法;
request.getParameter(String name)
request.getParameterValues(String name)
2)在 EL 中则可以使用 param 和 paramV alues 两者来取得数据
${param.name} // 获取某一个请求参数,参数名为name
${paramValues.name} // 获取一组请求参数 ,参数名为name
例子:http://localhost:8080/javaWEB/el/el2.jsp?name=a&name=b&name=c&score=100 注意:只要获取到的参数的类型,中有get方法,就可以一直通过 . 的方式 获取其他相应的值或者属性
1 <!-- 与输入有关的隐含对象:param,paramValues -->
2 score:${param.score }
3 <br>
4
5 name:${paramValues.name[1] } //获取属性名相同,属性值不同的一组值,通过下标的方式获取,从 0 开始
5.详解:其他隐含对象
1)cookie (了解,开发很少用)
所谓的 cookie 是一个小小的文本文件,它是以 key、value 的方式将 Session Tracking 的内容记录在这个文本文件内,这个文本文件通常存在于浏览器的暂存区内。 JSTL 并没有提供设定 cookie 的动作,因为这个动作通常都是后端开发者必须去做的事情,而不是交给前端的开发者。假若我们在 cookie 中设定一个名称为 userCountry 的值,那么可以使用${cookie.userCountry}来取得它。
cookie:${cookie}
2)header 和 headerValues(了解)
header 储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。假若要取得用户浏览器的版本,即${header["User-Agent"]}。另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用 headerValues 来取得这些值。因为 User-Agent 中包含“-”这个特殊字符,所以必须使用“[]”,而不能写成$(header.User-Agent)。
Accept-language:${header}
3) initParam
就像其他属性一样,我们可以自行设定 web 站台的环境参数(Context),当我们想取得这些参数时,可以使用 initParam 隐含对象去取得它,例如:当我们在 web.xml 中设定如下
1 <context-param>
2 <param-name>driver</param-name>
3 <param-value>com.mysql.jdbc.Driver</param-value>
4 </context-param>
5 <context-param>
6 <param-name>jdbcUrl</param-name>
7 <param-value>jdbc:mysql:///test</param-value>
8 </context-param>
jsp中的代码:
1 driver:${initParam.driver }<br><br>
2 jdbcUrl:${initParam.jdbcUrl }
结果显示:
1 driver:com.mysql.jdbc.Driver
2
3 jdbcUrl:jdbc:mysql:///test
4)pageContext(即为pageContex 类型,但是能读取属性,就可以一直的 通过 . 的方式 获取属性值)
我们可以使用${pageContext}来取得其他有关用户要求或页面的详细信息
${pageContext.request.queryString} 取得请求的参数字符串
${pageContext.request.requestURL} 取得请求的 URL,但不包括请求之参数字符串
${pageContext.request.contextPath} 服务的 web application 的名称
${pageContext.request.method} 取得 HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr } 取得用户的 IP 地址
${pageContext.session.new} 判断 session 是否为新的,所谓新的 session,表示刚由 server 产生而 client 尚未使用
${pageContext.session.id} 取得 session 的 ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息
jsp中的代码:
1 <br> 2 pageContext 即为pageContex 类型,但是能读取属性,就可以一直的 通过 . 的方式 获取属性值 3 <!-- pageContext --> 4 5 <br> 6 contextPath:${pageContext.request.contextPath } 7 <br> 8 <br> 9 sessionId:${pageContext.session.id} 10 <br> 11 <br> 12 sessionAttributeNames:${pageContext.session.attributeNames } 13 <br>
结果:
1 contextPath:/javaWEB
2 sessionId:8B49FADC18811B5BA2C13224DEEABE39
3 sessionAttributeNames:java.util.Collections$2@33a515d3