JavaWeb学习笔记--4.EL表达式

时间:2023-03-08 22:05:43
四. 表达式语言(相当于对JSP中对象输出的简化,功能实质上类似)

转自ZHSJUN的博客 http://blog.****.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>

页面效果:

JavaWeb学习笔记--4.EL表达式  JavaWeb学习笔记--4.EL表达式

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

示例代码: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
JavaWeb学习笔记--4.EL表达式 JavaWeb学习笔记--4.EL表达式

注意,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表达式