EL的11个内置对象
EL的内置对象
EL表达式它也有自己的内置对象可以直接在EL表达式中使用:
注意:如果jsp中既有html代码也有java代码,会很麻烦,所以我们用EL表达式和JSTL标签代替java代码,
但是EL表达式和JSTL标签的底层调用的还是java代码,所以在jsp中注释时不可以使用html注释和java注释,而是使用jsp的注释;
5.1. 从不同的域中取值的四个内置对象
${XXXScope.key}
pageScope
requestScope
sessionScope
applicationScope
准备工作:
<%
pageContext.setAttribute("address", "北京1"); // page
pageContext.setAttribute("address", "北京2", PageContext.REQUEST_SCOPE); // request
pageContext.setAttribute("address", "北京3", PageContext.SESSION_SCOPE); // session
pageContext.setAttribute("address", "北京4", PageContext.APPLICATION_SCOPE); // application(ServletContext)
%>
<body>
<!-- 从四大域中取出数据 -->
<%
//pageContext.setAttribute("address", "北京1");//默认page域
//pageContext.setAttribute("address", "北京2",PageContext.REQUEST_SCOPE);
//pageContext.setAttribute("address", "北京3",PageContext.SESSION_SCOPE);
//pageContext.setAttribute("address", "北京4",PageContext.APPLICATION_SCOPE);
%>
<%=pageContext.getAttribute("address") %>
<%=pageContext.getAttribute("address",PageContext.REQUEST_SCOPE) %>
<%=pageContext.getAttribute("address",PageContext.SESSION_SCOPE) %>
<%=pageContext.getAttribute("address",PageContext.APPLICATION_SCOPE) %>
<hr/>
${pageScope.address }
${requestScope.address }
${sessionScope.address }
${applicationScope.address }
<hr/>
java获取的简化方式: <%=pageContext.findAttribute("address") %> <br/>
el获取的简化方式: ${address}
演示注意:
1.page和request域从浏览器访问时重写输入地址既可以显示效果,session域需要重启浏览器,application域需要重启服务器才会显示效果;
2.使用Java代码的方式如果获取不到数据输出null,EL表达式的方式则什么都不会显示;
5.2. 专门获取浏览器请求服务器时携带参数的2个内置对象:
param 获取用户提交的某个数据,针对一key一value 可以理解成: request.getParameter(name)
paramValues 获取用户提交的某个数据,针对一key多value 可以理解成: request.getParameterValues(name)
<body>
<%--
<h4>param对象的使用</h4>
<%=request.getParameter("username") %>
${param.username }
--%>
<h4>paramValues对象的使用(多选)</h4>
<%
String[] hobbys = request.getParameterValues("hobby");
out.println(hobbys[0]);
out.println(hobbys[1]);
%>
<hr/>
${paramValues.hobby[0]}
${paramValues.hobby[1]}
${paramValues.hobby[2]}
</body>
5.3. 专门获取浏览器请求服务器时请求头中数据的2个内置对象:
header 获取请求头中的信息,针对一key一value
headerValues 获取请求头中的信息,针对一key多value
注意:有特殊字符的使用EL表达式时不可以使用“.”的方式,而要使用“[‘ str ’]”的方式;
5.4. cookie它获取到的一个cookie数组
cookie
获取cookie对象: ${cookie.cookie的名称}, 如 ${cookie.username}
获取cookie对象的名称: ${cookie.cookie的名称.name} 如: ${cookie.username.name}
获取cookie对象的值 : ${cookie.cookie的名称.value} 如: ${cookie.username.value}
需求: 在JSP页面向浏览器发送cookie, 在访问时获取cookie中的数据
02.jsp
<%
// 创建cookie
Cookie cookie = new Cookie("username","fengjie");
// 设置有效路径
cookie.setPath("/");
// 设置最大生存时间
cookie.setMaxAge(60 * 30);
// 给浏览器发送cookie
response.addCookie(cookie);
%>
03.jsp
<body>
<h4>获取cookie的内容</h4>
<%
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie cookie : cookies){
String name = cookie.getName();
String value = cookie.getValue();
if("username".equals(name)) {
out.println(name +"::::"+ value);
}
}
}
%>
<hr/>
${cookie.username }
${cookie.username.name }
${cookie.username.value }
</body>
注意:
${cookie.username } 获取的是Cookie("username","fengjie")对象;显示出来为对象的地址值;
${cookie.username.name } 获取的是Cookie("username","fengjie")对象的neme值username;
${cookie.username.value } 获取的是Cookie("username","fengjie")对象的value值fengjie;
5.5. 其他对象
pageContext 它就和JSP内置对象pageContext功能一致(重点)
initParam 获取的项目的全局配置参数,类似于ServletContext中的getInitParameter(String name)方法功能(它只能获取到web.xml配置的全局参数,每个servlet单独配置的无法使用initParam获取)。
<h3>pageContext对象的使用</h3>
<a href="/d13/03.jsp">03页面</a>
<%--注意:以后的项目都使用下面这种方式,因为实际开发中项目名会变动 --%>
<a href="${pageContext.request.contextPath }/03.jsp">03页面</a>
<%--注意:这种方式不可以,在EL表达式中不可以直接使用request对象,EL表达式中的11个内置对象中没有request内置对象 --%>
<a href="${request.contextPath }/03.jsp">03页面</a><br/>
<%=request.getContextPath() %>
<hr/>
<%
HttpServletRequest r = (HttpServletRequest)pageContext.getRequest();
out.println(r.getContextPath());
%>
<hr/>
el表达式获取项目名:${pageContext.request.contextPath }<br/>
<%--注意:这种方式不可以,在EL表达式中不可以直接使用request对象 --%>
el表达式获取项目名:${request.contextPath }
<h3>initParm对象的使用</h3>
<%= pageContext.getServletContext().getInitParameter("company") %><br/>
${initParm.company }
在web.xml文件中配置全局参数
<context-param>
<param-name>company</param-name>
<param-value>传</param-value>
</context-param>
注意:
1.jsp中内置九大对象,所以在<%>java代码中可以直接使用这九大对象,但是el表达式虽然也在jsp页面中却不可以使用jsp中的九大对象,
而是使用el表达式中的11个内置对象;
Jsp中九大内置对象: page request session application(ServletContext) pageContext response config out exception
EL表达式11大对象: pageScope requestScope sessionScope applicationScope param paramValues header headerValues cookie pageContext initParam