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


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表达式隐式对象_第1张图片
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"%>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试pageContexttitle>
	head>
	<body>
	    <h2 style="color: red;">本文作者:谷哥的小弟h2>
        <h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhlh2>
		请求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表达式隐式对象_第2张图片

测试pageScope、requestScope、sessionScope、appplicationScope

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试pageScope、requestScope、sessionScope、appplicationScopetitle>
	head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhlh2>
		<% 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表达式隐式对象_第3张图片

测试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表达式隐式对象_第4张图片

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"%>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Register Resulttitle>
	head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhlh2>
		用 户:${param.username}<br />
		密 码:${param.password}<br />
		性 别:${param.gender}<br />
		爱 好:${paramValues.hobby}<br />
		城 市:${param.city}<br />
	body>
html>

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

测试header、headerValues

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试header、headerValuestitle>
	head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhlh2>
		header.host:${header.host}<br/>
        headerValues["Accept-Language"]:${headerValues["Accept-Language"][0]} <br/>
	body>
html>

JavaWeb核心技术系列教程(27)——EL表达式隐式对象_第6张图片

测试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表达式隐式对象_第7张图片

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"%>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Cookie Resulttitle>
	head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhlh2>
	    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表达式隐式对象_第8张图片
在此,连续两次访问该CookieResult.jsp页面观察Cookie的键及其值

测试initParam

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试initParamtitle>
	head>
	<body>
		<h2 style="color: red;">本文作者:谷哥的小弟h2>
		<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhlh2>
		size:${initParam.size }<br/>
		encoding:${initParam.encoding }<br/>
	body>
html>

JavaWeb核心技术系列教程(27)——EL表达式隐式对象_第9张图片

你可能感兴趣的:(JavaWeb核心技术系列教程)