四. 表达式语言(相当于对JSP中对象输出的简化,功能实质上类似)

转自ZHSJUN的博客 http://blog.csdn.net/zhsjun/article/details/2254546

表达式语言(EL) 是JSP的一种计算和输出Java对象的简单语言,它简化了对JSP中对象的输出。

4.1 EL语法

${expression}

这被称作EL元素,一个EL元素必须以${开始,以}结束,EL可以出现在HTML标记中,也可以出现在JSP的标记中

4.2 变量范围

EL对变量操作,必须保证操作的变量在一定范围内,其对范围的搜索顺序:页内-request-session-application,分别对应了EL的内置对象pageScope,requestScope,sessionScope,applicationScope,如下语句:

${userName},该语句在输出时首先去pageContext范围中找,没找到再去request,还没找到就去session,最后去application,只要有任何一个范围找到,即停止查找,并输出变量值

${sessionScope.UserName},在session中查找变量UserName

4.3 访问运算.和[ ]

这两个符号可以通用,唯一的区别是当变量名中含有-这样的特殊字符时,即采用[ ]访问符号,如下:

${student.name}和${student["name"]}等效

这两个运算符号可以混合使用,比如:

${requestScope.cart[0].pname}

4. EL中的内置对象:

pageContext

param

paramValues用

header

headerValues

cookie

initParam

pageScope

requestScope

sessionScope

applicationScope

jsp页面上下文对象

页面所有参数的名字和值对,比如表单form,查询串QueryString等,是一个Map

单个名字对应多个值时使用,是一个Map

单个头header的值对,是一个Map

单个键多个值时使用,是一个Map

代表了Cookie对象,是一个Map

系统Servlet初始化参数,是一个Map

页面范围,是一个Map

请求范围,是一个Map

会话范围,是一个Map

应用范围,是一个Map

例:

获取QueryString中的参数并输出: ${param.id}
获取表单数据并输出: ${param.username}
获取header: ${header["user-agent"]}
获取cookie: ${cookie["UserInfo"].name}=${cookie["UserInfo"].value}

示例代码:使用内置对象:
与输入有关的内置对象:param paramValues

UserForm.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>接收用户参数</title>
</head>
<body>
<%request.setCharacterEncoding("gb2312"); %>
用户名:${param.username}</br>
密码:${param.password}</br>
爱好:${paramValues.interest[0]}
${paramValues.interest[1]}
${paramValues.interest[2]}
</br>
</body>
</html>

注意:上面body中的代码和这个的功能是一样的:

<%
String username = request.getParameter("username");
String password = request.getParameter("password");
String[] interests = request.getParameterValues("interest");
out.println("姓名:"+username+"</br>");
out.println("密码:"+password+"</br>");
out.println("爱好:");
for(int i = 0 ; i < interests.length ; i++)
out.println(interests[i]);
%>

ParamDemo.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<html>
<head>
<title>用户表单</title>
</head> <body>
<form action="UserForm.jsp" method="post">
用户名:<input type="text" name="username"/></br>
密码:<input type="password" name="password"/></br>
爱好:<input type="checkbox" name="interest" value="篮球"/>篮球
<input type="checkbox" name="interest" value="看书"/>看书
<input type="checkbox" name="interest" value="编程"/>编程</br>
<input type="submit" value="提交">
</form>
</body>
</html>

页面效果:

 

------------------------------------------------------------------------------------------------------------------

示例代码:cookie内置对象

  <%
Cookie c = new Cookie("username","root");
response.addCookie(c);
%>
cookie中username的值为:${cookie.username.value}

示例代码:header内置对象
存数用户浏览器和服务器用来沟通的数据,通过header headerValues来取得这些值

${header["host"]}</br>
${header["user-agent"] }</br>

示例代码:initParam内置对象
可以取得在web站点中设置的环境参数context值。

username参数值:${initParam.username}

同时在web.xml中添加

<context-param>
<param-name>username</param-name>
<param-value>James</param-value>
</context-param>

------------------------------------------------------------------------------------------------------------------

示例代码:pageContext内置对象

  <body>
<table border="1">
<tr>
<td>取得请求的参数字符串</td>
<td>${pageContext.request.queryString}</td>
</tr>
<tr>
<td>取得请求URL</td>
<td>${pageContext.request.requestURL}</td>
</tr>
<tr>
<td>取得web应用名称</td>
<td>${pageContext.request.contextPath}</td>
</tr>
<tr>
<td>取得HTTP请求方式</td>
<td>${pageContext.request.method}</td>
</tr>
<tr>
<td>取得使用的协议</td>
<td>${pageContext.request.protocol}</td>
</tr>
<tr>
<td>取得用户IP地址</td>
<td>${pageContext.request.remoteAddr}</td>
</tr>
<tr>
<td>取得session ID</td>
<td>${pageContext.session.id}</td>
</tr>
</table>
</body>

效果:

取得请求的参数字符串  
取得请求URL http://localhost:8088/JSPTest7ELlanguage/inner/OtherInner.jsp
取得web应用名称 /JSPTest7ELlanguage
取得HTTP请求方式 GET
取得使用的协议 HTTP/1.1
取得用户IP地址 127.0.0.1
取得session ID 4B8F4FDD253B24D9DAE9E6D29B7209C0

------------------------------------------------------------------------------------------------------------------

示例代码:使用存取器读取JavaBean中的数据

Student.java

package com.jsp;

public class Student {
private long classno;
private String name;
private int age;
private boolean sex;
private String major; public Student(){ } public long getClassno() {
return classno;
}
public void setClassno(long classno) {
this.classno = classno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
}

input.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<html>
<head>
<title>Param HTML</title>
</head> <body>
<form action ="param.jsp">
姓名:<input type = "text" name ="Username"><br>
年龄:<input type = "text" name = "age"><br>
专业:<input type = "text" name = "major"><br>
<input type ="submit" value="提交"> </form>
</body>
</html>

param.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%request.setCharacterEncoding("gb2312");%>
<html>
<head>
<title>利用请求参数设置JavaBean属性</title>
</head> <body bgcolor="#ffffff">
<jsp:useBean id = "student2" scope="page" class="com.jsp.Student"/>
<jsp:setProperty name="student2" property="name" param="Username"/>
<!-- 注意第三个参数名为param,因为上一个页面传过来的为参数
如果为valule="Username" 那么名字就会被设置为"Username"而不是参数值 -->
<jsp:setProperty name="student2" property="age" param="age"/>
<jsp:setProperty name="student2" property="major" param="major"/> <!-- 将student2信息保存在session中,属性名为MyStudent2. 在下面表格的第四列获取这里面的信息 -->
<%session.setAttribute("MyStudent2",student2);%> <table>
<tr>
<td>姓名</td>
<td><jsp:getProperty name = "student2" property="name"/></td>
<td><%out.println(student2.getName()); %></td>
<td>${student2.name }</td> <!-- 使用EL表达式读取属性值 -->
<td>${sessionScope.MyStudent2.name }</td> <!-- 使用EL表达式从session中读取 -->
</tr>
<tr>
<td>年龄</td>
<td><jsp:getProperty name = "student2" property="age"/></td>
<td><%out.println(student2.getAge()); %></td>
<td>${student2.age }</td> <!-- 使用EL表达式 -->
<td>${sessionScope.MyStudent2.age }</td> <!-- 使用EL表达式从session中读取 -->
</tr>
<tr>
<td>专业</td>
<td><jsp:getProperty name = "student2" property="major"/></td>
<td><%out.println(student2.getMajor()); %></td>
<td>${student2.major }</td> <!-- 使用EL表达式 -->
<td>${sessionScope.MyStudent2.major }</td> <!-- 使用EL表达式从session中读取 -->
</tr> </table>
</body>
</html>

页面效果:

input.jsp param.jsp

注意,param.jsp中的四列采用了4种方法获取JavaBean中的属性后两种使用了EL表达式。详见上面的代码。

------------------------------------------------------------------------------------------------------------------

示例代码:使用存取器读取Map中的数据

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<%@ page contentType = "text/html;charset=GB2312" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%
String name ="lee";
HashMap<String,String> values = new HashMap<String,String>();
values.put("money", "银行降低基准利率");
values.put("热点", "国际空间站建成");
values.put("体育", "国足挺进亚洲杯8强");
String newColor = "blue";
request.setAttribute("news", values);
request.setAttribute("color", newColor);
%>
<html>
<head>
<title>EL表达式的存取符和隐式对象</title>
</head>
<body>
<h1>Hello ${param.name}! </h1>
<font color="${requestScope.color}">
<h3>
财经:${requestScope.news.money}<br>
热点:${requestScope.news.热点}<br>
体育:${requestScope.news["体育"]}<br>
</h3>
</font>
</body>
</html>

  页面效果

JavaWeb学习笔记--4.EL表达式的更多相关文章

  1. Javaweb学习笔记6—EL表达式与JSTL及自定义标签

    今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps: ...

  2. JSP/Servlet Web 学习笔记 DaySix —— EL表达式

    1)EL从scope中得到参数时可以自动转换类型,因此对于类型转换的限制更加宽松. 2)使用EL表达式,可以简化变量和对象的访问. 3)EL表达式必须以 ${XXXX} 来表示. 4)EL提供点(.) ...

  3. 1.6(学习笔记)EL表达式

    1.表达式输出属性 先来看一个简单的表达式小例子 el.jsp <%@ page language="java" contentType="text/html; c ...

  4. JavaWeb学习篇之----EL表达式详解

    我们之前的几篇文章中都提到了一个EL表达式,那么这个EL表达式到底是什么东东呢?为什么用处那么大,下面我们就来看看EL表达式的相关内容 EL表达式简介: EL 全名为Expression Langua ...

  5. Java Web学习笔记之---EL和JSTL

    Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression  Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...

  6. java学习笔记06--正则表达式

    java学习笔记06--正则表达式 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆分.替换等操作. 例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法 不使用正则 ...

  7. JavaWeb学习笔记总结 目录篇

    JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...

  8. Dart学习笔记-运算符-条件表达式-类型转换

    Dart学习笔记-运算符-条件表达式-类型转换 一.运算符 1.算术运算符 + (加)- (减)* (乘)/ (除)~/ (取整) %(取余) 2.关系运算符 == (等等) != (不等) > ...

  9. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

随机推荐

  1. 使用dom4j生成xml字符串,以及解析xml字符串

    基于dom4j-1.6.1.jar import java.io.IOException; import java.io.StringWriter; import java.util.ArrayLis ...

  2. cf500A New Year Transportation

    A. New Year Transportation time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  3. 寻找第K小元素

    要在一个序列里找出第K小元素,可以用排序算法,然后再找.可以证明,排序算法的上界为O(nlogn). 在这里,给出两种可以在线性时间内找出第K小元素的方法. 方法1: (1) 选定一个比较小的阈值(如 ...

  4. Python NTLK资料

    1.Creating a new corpus with NLTK http://stackoverflow.com/questions/4951751/creating-a-new-corpus-w ...

  5. html中显示xml

    在工作中经常会遇到一些特殊的要求,比如在html中显示xml,xml的格式跟html很相似,同样包含了标签.属性.值,所以xml的标签等内容会在html中被转义 如果要在html中让xml的内容(包括 ...

  6. CodeForces 242E - XOR on Segment 二维线段树?

    今天练习赛的题....又是线段树的变换..拿到题我就敲了个点更新区间查询的..果断超时...然后想到了可以将每个数与合表示成不进位的二进制数..这样就可以区间进行更新了..比赛的时候写搓了..刚重写了 ...

  7. js中setTimeout/setInterval定时器用法示例

    js中setTimeout(定时执行一次)和setInterval(间隔循环执行)用法介绍. setTimeout:在指定的毫秒数后调用指定的代码段或函数:setTimeout示例代码 functio ...

  8. JavaScript异步编程 ( 一 )

    1. 异步编程 Javascript语言的执行环境是"单线程"(single thread).所谓"单线程",就是指一次只能完成一件任务.如果有多个任务,就必须 ...

  9. DataGrid( 数据表格) 组件[4]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  10. 1.Android Studio系列教程1——下载和安装

    链接:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/ 一.Android Studio优点 1.Google推出 ...