欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb核心技术系列教程(27)——EL表达式隐式对象

程序员文章站 2022-05-06 07:53:39
...

C语言自学完备手册(33篇)

Android多分辨率适配框架

JavaWeb核心技术系列教程

HTML5前端开发实战系列教程

MySQL数据库实操教程(35篇图文版)

推翻自己和过往——自定义View系列教程(10篇)

走出思维困境,踏上精进之路——Android开发进阶精华录

讲给Android程序员看的前端系列教程(40集免费****+源码)


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

EL隐式对象概述

在介绍JSP技术时,我们学习了JSP的隐式对象。类似地,在EL技术中同样提供了隐式对象。在此,详细介绍EL中11个隐式对象。

pageContext

EL表达式中的pageContext对象表示的是JSP页面中的pageContext对象。所以,我们完全可通过pageContext获取JSP中的其它隐式对象。

pageScope

代表page域中用于保存属性的Map对象

requestScope

代表request域中用于保存属性的Map对象

sessionScope

代表session域中用于保存属性的Map对象

applicationScope

代表application域中用于保存属性的Map对象

param

在JSP页面中,经常需要获取客户端传递的请求参数,为此,EL表达式提供了param 和paramValues两个隐式对象,用于获取客户端访问JSP页面时传递的请求参数。

param为保存所有单值请求参数的Map对象。

paramValues

paramValues为保存了所有多值请求参数的Map对象;当获取多值的请求参数时它返回string类型数组。

header

当客户端访问Web服务器中的JSP页面时通常会通过请求消息头传递一些信息,例如请求消息头中的"User-Agent"字段可告诉服务器浏览器的类型。为获取请求消息头中 的信息,EL表达式提供了两个隐式对象header和headerValues

header为保存了所有单值请求头字段的Map对象。

headerValues

headerValues为保存了所有多值请求头字段的Map对象;当获取多值请求头字段时它返回string类型数组。

cookie

cookie为保存了所有Cookie信息的Map对象。在该Map中键为各Cookie的名称,获取方式为cookie.Cookie的名称.name;各Cookie的值为对应的Cookie对象,获取方式为cookie.Cookie的名称.value。

initParam

initParam为保存了web.xml文件中所有Web应用初始化参数的Map对象。

EL隐式对象示例

项目结构
JavaWeb核心技术系列教程(27)——EL表达式隐式对象
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>EL07</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
   <!-- 配置Servlet -->
   
  <servlet>
     <servlet-name>RegisterServlet</servlet-name>
     <servlet-class>cn.com.RegisterServlet</servlet-class>
  </servlet>
  <servlet-mapping>
     <servlet-name>RegisterServlet</servlet-name>
     <url-pattern>/RegisterServlet</url-pattern>
  </servlet-mapping>
  
  <servlet>
     <servlet-name>CookieServlet</servlet-name>
     <servlet-class>cn.com.CookieServlet</servlet-class>
  </servlet>
  <servlet-mapping>
     <servlet-name>CookieServlet</servlet-name>
     <url-pattern>/CookieServlet</url-pattern>
  </servlet-mapping>
  
  <!-- Web应用初始化参数 -->
  
  <context-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </context-param>
  <context-param>
    <param-name>size</param-name>
    <param-value>200</param-value>
  </context-param>
</web-app>

测试pageContext

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试pageContext</title>
	</head>
	<body>
	    <h2 style="color: red;">本文作者:谷哥的小弟</h2>
        <h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhl</h2>
		请求URL:${pageContext.request.requestURL }<br />
		请求URI:${pageContext.request.requestURI }<br />
		请求方式:${pageContext.request.method }<br />
		服务器信息:${pageContext.servletContext.serverInfo} <br />
		Servlet名称:${pageContext.servletConfig.servletName}<br />
		ContextPath:${pageContext.request.contextPath}<br />
		Content-Type响应头:${pageContext.response.contentType} <br />
	</body>
</html>

在该示例中,通过${pageContext.request.contextPath}获取了Web应用的上下文路径。在日后的学习和开发中,我们应使用该方式替换之前的硬代码。
JavaWeb核心技术系列教程(27)——EL表达式隐式对象

测试pageScope、requestScope、sessionScope、appplicationScope

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试pageScope、requestScope、sessionScope、appplicationScope</title>
	</head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟</h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhl</h2>
		<% pageContext.setAttribute("name", "lucy"); %>
		<% request.setAttribute("gender", "female"); %>
		<% session.setAttribute("city", "BeiJing"); %>
		<% application.setAttribute("job", "driver"); %>
		表达式\${pageScope.name}的值为:${pageScope.name} <br />
		表达式\${requestScope.gender}的值为:${requestScope.gender} <br />
		表达式\${sessionScope.city}的值为:${sessionScope.city} <br />
		表达式\${applicationScope.job}的值为:${applicationScope.job} <br /><br />
		表达式\${name}的值为:${name}<br />
		表达式\${gender}的值为:${gender}<br />
		表达式\${city}的值为:${city}<br />
		表达式\${job}的值为:${job}<br />
	</body>
</html>

在使用EL表达式获取属性时可指定在特定的域中查找,也可不指定在特定的域而是按照四个域的顺序查找。

例如:在该示例中,${name}获取name属性的值就是分别从page域、request域、session域、application域依次进行查找。
JavaWeb核心技术系列教程(27)——EL表达式隐式对象

测试param、paramValues

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试param、paramValues</title>
	</head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟</h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhl</h2>
		<form action="${pageContext.request.contextPath}/RegisterServlet" method="post">
			用 户:<input type="text" name="username" />
			<br /><br />
			密 码:<input type="password" name="password" />
			<br /><br />
			性 别:<input type="radio" name="gender" value="男" /><input type="radio" name="gender" value="女" checked="checked" /><br /><br />
			爱 好:<input type="checkbox" name="hobby" value="摄影" />摄影
			<input type="checkbox" name="hobby" value="唱歌" />唱歌
			<input type="checkbox" name="hobby" value="跑步" />跑步
			<br /><br />
			城 市:
			<select name="city">
				<option>------请选择------</option>
				<option value="chengdu">成都</option>
				<option value="beijing">北京</option>
				<option value="shanghai">上海</option>
			</select>
			<br /><br />
			<input type="submit" value="欢迎注册" />
		</form>
	</body>
</html>

在本示例中设置表单的action属性时灵活采用${pageContext.request.contextPath}获取Web应用上下文路径。
JavaWeb核心技术系列教程(27)——EL表达式隐式对象

package cn.com;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegisterServlet extends HttpServlet{

	private static final long serialVersionUID = -2179731166537038196L;
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		RequestDispatcher requestDispatcher = request.getRequestDispatcher("/RegisterResult.jsp");
		requestDispatcher.forward(request, response);
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Register Result</title>
	</head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟</h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhl</h2>
		用 户:${param.username}<br />
		密 码:${param.password}<br />
		性 别:${param.gender}<br />
		爱 好:${paramValues.hobby}<br />
		城 市:${param.city}<br />
	</body>
</html>

在该JSP页面中通过param.属性名获取单值属性,通过paramValues.属性名获取多值属性。
JavaWeb核心技术系列教程(27)——EL表达式隐式对象

测试header、headerValues

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试header、headerValues</title>
	</head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟</h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhl</h2>
		header.host:${header.host}<br/>
        headerValues["Accept-Language"]:${headerValues["Accept-Language"][0]} <br/>
	</body>
</html>

JavaWeb核心技术系列教程(27)——EL表达式隐式对象

测试cookie

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试cookie</title>
	</head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟</h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhl</h2>
		<a href="${pageContext.request.contextPath}/CookieServlet">Click Me</a>
	</body>
</html>

JavaWeb核心技术系列教程(27)——EL表达式隐式对象

package cn.com;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 本文作者:谷哥的小弟 
 * 博客地址:http://blog.csdn.net/lfdfhl
 */
public class CookieServlet extends HttpServlet {
	private static final long serialVersionUID = -2621005366193768161L;

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		//生成Cookie
		Cookie cookie = new Cookie("userid", "zxx9527");
		//将Cookie返回至客户端浏览器
		response.addCookie(cookie);
		RequestDispatcher requestDispatcher = request.getRequestDispatcher("/CookieResult.jsp");
		requestDispatcher.forward(request, response);
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		this.doPost(request, response);
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Cookie Result</title>
	</head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟</h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhl</h2>
	    Cookie对象的信息:${cookie.userid } <br/> 
	    Cookie对象的名称和值:${cookie.userid.name }=${cookie.userid.value }<br/>
	    <br/>
	    Cookie对象的信息:${cookie.JSESSIONID } <br/> 
	    Cookie对象的名称和值:${cookie.JSESSIONID.name }=${cookie.JSESSIONID.value }<br/>
	</body>
</html>

在该示例中,除了名为JSESSIONID的Cookie以外,我们自己还生成了一个Cookie返回至客户端浏览器,该Cookie名为userid值为zxx9527。我们可通过EL内置对象cookie获取该Cookie。
JavaWeb核心技术系列教程(27)——EL表达式隐式对象
在此,连续两次访问该CookieResult.jsp页面观察Cookie的键及其值

测试initParam

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试initParam</title>
	</head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟</h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhl</h2>
		size:${initParam.size }<br/>
		encoding:${initParam.encoding }<br/>
	</body>
</html>

JavaWeb核心技术系列教程(27)——EL表达式隐式对象