- 无脚本的 JSP 页面
- EL 表达式
- 认识 EL 表达式
- 使用EL表达式和EL中的运算符
- 使用EL表达式-获取请求参数的值
- 使用EL表达式-获取Cookie的值
- 使用EL表达式-获取四个域对象中的属性值
- 使用EL调用类中静态方法
- 使用 EL 表达式
- EL表达式如何处理Null值和获取上下文参数
- EL表达式练习
无脚本的JSP页面是没有Java脚本元素(代码段、表达式和声明)的页面
无脚本(Scriptless)的代码使JSP页面易于阅读、维护和调试
EL 和 JSTL 可以用来编写无 Java 脚本元素的页面
Expression Language - 表达式语言
提供了一种在JSP页面上编写的语言,以减少代码
Java表达式和EL表达式
Java表达式:<%= 15 * 15%>
EL表达式:${16 * 16}
算数运算符
算术运算符取余:${13 % 3}
算术运算符取余:${13 mod 3}
算术运算符除:${17 / 5}
算术运算符除:${17 div 5}
比较运算符
比较运算符:${1 > 2}
比较运算符:${1 gt 2}
eq: ==
ne: !=
gt: >
lt: <
ge: >=
le: <=
逻辑元素符
逻辑运算符-逻辑与:${1 > 2 && 10 > 2 && 3 > 2}
逻辑运算符-逻辑与:${1 > 2 and 10 > 2 and 3 > 2}
逻辑运算符-逻辑或:${1 > 2 || 10 > 2 || 3 > 2}
逻辑运算符-逻辑或:${1 > 2 or 10 > 2 or 3 > 2}
逻辑运算符-逻辑非:${!(2 > 1)}
逻辑运算符-逻辑非:${not(2 > 1)}
三元运算符
三元运算符:${2 > 1 ? 1 : 0}
三元运算符:${2 > 1 ? "Y" : "N"}
Java 表达式
<%@page contentType="text/html" pageEncoding="UTF-8"%>
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>使用Java表达式获取请求参数的值title>
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<link rel="stylesheet" href="css/style.css"/>
head>
<body class="bg-warning">
<div class="container">
<br>
<h1 class="text-center text-primary">使用Java表达式获取请求参数的值h1>
<hr>
<p class="text-danger">
* 本页面中使用java表达式获取请求参数的值,用于和second.jsp对比两种获取请求参数值的方式
p>
<hr>
<%
String[] hobbies = request.getParameterValues("hobbies");
%>
<p>
<br>账户: <%=request.getParameter("username")%>
<br>密码: <%=request.getParameter("password")%>
<br>性别: <%=request.getParameter("gender")%>
<br>国籍: <%=request.getParameter("nationality")%>
<br>爱好: <%=hobbies[0]%>
<%=hobbies[1]%>
<%=hobbies[2]%>
<%=hobbies[3]%>
<%=hobbies[4]%>
p>
div>
body>
html>
EL 表达式
<%@page contentType="text/html" pageEncoding="UTF-8"%>
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>使用EL表达式获取请求参数的值title>
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<link rel="stylesheet" href="css/style.css"/>
head>
<body>
<div class="container">
<br>
<h1 class="text-center text-primary">使用EL表达式获取请求参数的值h1>
<hr>
<p class="text-danger">
* 本页面中使用EL表达式获取请求参数的值,用于和first.jsp对比两种获取请求参数值的方式
p>
<hr>
<p>
<%--在EL表达式中,可以使用param这个隐式对象获取请求参数的值,语法:${param.请求参数名}--%>
账户: ${param.username}
<br>密码: ${param.password}
<br>性别: ${param.gender}
<br>国籍: ${param.nationality}
<%--如果一个请求参数有多个值,可以使用paramValues隐式对象获取请求参数的值,语法:${paramValues.请求参数名[数组元素索引]},索引从0开始--%>
<br>爱好: ${paramValues.hobbies[0]}
${paramValues.hobbies[1]}
${paramValues.hobbies[2]}
${paramValues.hobbies[3]}
${paramValues.hobbies[4]}
p>
<hr>
<div class="text-success bg-warning padding20">
<h3>EL表达式提供诸多隐式对象用于获取不同的信息h3>
<hr>
<p>
param:获取请求参数的单个值<br>
paramValues:获取一个请求参数的多个值,如多个checkbox提交的同一个请求参数的值<br>
header:获取请求的标头信息<br>
headerValues:获取一个请求标头的多个值<br>
cookie:获取Cookie值<br>
pageScope:获取页面范围的属性值<br>
requestScope:获取请求范围的属性值<br>
sessionScope:获取会话范围的属性值<br>
applicationScope:获取应用程序范围(上下文范围)的属性值<br>
initParam:获取上下文初始化参数
p>
<hr>
div>
div>
body>
html>
使用EL表达式-获取Cookie的值
Java 代码段获取 Cookie 值
<%@page contentType="text/html" pageEncoding="UTF-8"%>
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>在jsp页面中用java表达式获取cookie的值title>
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<link rel="stylesheet" href="css/style.css"/>
head>
<body>
<div class="container text-warning">
<h1 class="text-center bg-success text-success padding10">get_cookie1.jsp页面-在jsp页面中用java表达式获取cookie的值h1>
<hr>
<%
//获取Cookie
Cookie[] cookies = request.getCookies();
//定义两个变量用于存储读取的两个Cookie的值
String accessTime = "";
String randNum = "";
for (Cookie ck : cookies) {
if ("lastAccessTime".equals(ck.getName())) { //如果cookie名称为lastAccessTime
accessTime = ck.getValue(); //获取其值
} else if ("randomNumber".equals(ck.getName())) { //如果cookie名称为randomNumber
randNum = ck.getValue(); //获取其值
}
}
%>
<br><br>* 最后一次请求PutCookieServlet的时间:<%=accessTime%>
<br><br>* PutCookieServlet产生的随机数字:<%=randNum%>
<br><br><br><br>
<div class="text-center">
<img src="images/lxh04.gif">
div>
div>
body>
html>
EL 表达式获取 Cookie 的值
<%@page contentType="text/html" pageEncoding="UTF-8"%>
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>在jsp页面中用EL表达式获取cookie的值title>
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<link rel="stylesheet" href="css/style.css"/>
head>
<body>
<div class="container text-info">
<h1 class="text-center text-primary bg-primary padding10">get_cookie2.jsp页面-在jsp页面中用EL表达式获取cookie的值h1>
<hr>
<%--也可使用EL表达式获取cookie的值--%>
<%--JSP的EL(Expression Language)表达式: ${表达式}--%>
<%--如何使用EL表达式获取Cookie的值: ${cookie.Cookie名称.value}--%>
<br><br>* 最后一次请求PutCookieServlet的时间:${cookie.lastAccessTime.value}
<br><br>* PutCookieServlet产生的随机数字:${cookie.randomNumber.value}
<br><br><br><br>
<div class="text-center">
<img src="images/lxh03.gif">
div>
div>
body>
html>
使用EL表达式-获取四个域对象中的属性值
java 表达式获取域对象中的属性值
<%@page contentType="text/html" pageEncoding="UTF-8"%>
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>在jsp页面中使用java表达式获取域对象中的属性值title>
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<link rel="stylesheet" href="css/style.css"/>
head>
<body>
<div class="container text-warning">
<h1 class="text-center bg-success text-success padding10">
get_domain_attribute1.jsp页面
<br>
<small>在jsp页面中使用java表达式获取域对象中的属性值small>
h1>
<hr>
<%
//在JSP页面上可以使用四个域对象在不同范围共享数据
pageContext.setAttribute("number1", 100); //PageContext
request.setAttribute("number2", 200); //HttpServletRequest
session.setAttribute("number3", 300); //HttpSession
application.setAttribute("number4", 400); //ServletContext
int number5=500;
%>
* 页面范围属性值:<%=pageContext.getAttribute("number1")%>
<br><br>* 请求范围属性值:<%=request.getAttribute("number2")%>
<br><br>* 会话范围属性值:<%=session.getAttribute("number3")%>
<br><br>* 应用程序范围属性值:<%=application.getAttribute("number4")%>
<hr>
* java表达式访问java代码段中的变量number5:<%=number5%>
<hr>
<div class="text-center">
<img src="images/lxh04.gif">
div>
div>
body>
html>
EL表达式获取域对象中的属性值
<%@page contentType="text/html" pageEncoding="UTF-8"%>
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>在jsp页面中使用EL表达式获取域对象中的属性值title>
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<link rel="stylesheet" href="css/style.css"/>
head>
<body>
<div class="container text-info">
<h1 class="text-center text-primary bg-warning padding10">
get_domain_attribute2.jsp页面
<br>
<small>在jsp页面中使用EL表达式获取域对象中的属性值small>
h1>
<hr>
<%
pageContext.setAttribute("number1", 100);
request.setAttribute("number2", 200);
session.setAttribute("number3", 300);
application.setAttribute("number4", 400);
int number5 = 500;
int number6 = 600;
//java代码定义的变量只有作为属性加入域对象才可被EL表达式访问
pageContext.setAttribute("number6", number6);
%>
<%--EL表达式提供四个xxxScope隐式对象,用于获取不同域对象中的属性值,语法:${xxxScope.属性名}或${属性名}--%>
* 页面范围属性值:${pageScope.number1} | ${number1}
<br><br>* 请求范围属性值:${requestScope.number2} | ${number2}
<br><br>* 会话范围属性值:${sessionScope.number3} | ${number3}
<br><br>* 应用程序范围属性值:${applicationScope.number4} | ${number4}
<hr>
* EL表达式访问java代码段中的变量number5:${number5}
<br><br>
* EL表达式访问java域对象属性number6:${pageScope.number6} | ${number6}
<hr>
<div class="text-center">
<img src="images/lxh03.gif">
div>
div>
body>
html>
EL表达式获取域对象中的属性值,域对象的属性在Servlet中添加的
<%@page contentType="text/html" pageEncoding="UTF-8"%>
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>在jsp页面中使用EL表达式获取域对象中的属性值title>
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<link rel="stylesheet" href="css/style.css"/>
head>
<body>
<div class="container text-success">
<h1 class="text-center text-info bg-info padding10">
get_domain_attribute3.jsp页面
<br>
<small>在jsp页面中使用EL表达式获取域对象中的属性值,域对象的属性在Servlet中添加的small>
h1>
<hr>
* 请求范围属性值num1:${requestScope.num1}
<br><br>* 会话范围属性值num2:${sessionScope.num2}
<br><br>* 应用程序范围属性值num3:${applicationScope.num3}
<br><br>* 学生信息:${requestScope.student.sname} | ${requestScope.student.srollno} | ${requestScope.student.sgender} | ${requestScope.student.spassword} | ${requestScope.student.sbatch}
<br><br>* 狗(毛毛)信息:${sessionScope.dog.name} | ${sessionScope.dog.type} | ${sessionScope.dog.age}
<br><br>* 列表第一只狗的信息:${requestScope.dogList[0].name} | ${requestScope.dogList[0].type} | ${requestScope.dogList[0].age}
<br><br>* 字符串数组的各个值:${requestScope.names[0]} | ${requestScope.names[1]} | ${requestScope.names[2]}
<br><br>* 对象数数组的各个值:${requestScope.info[0]} | ${requestScope.info[1]} | ${requestScope.info[2]}
<hr>
<div class="text-center">
<img src="images/lxh01.gif" width="100" height="100">
div>
div>
body>
html>
package com.qdu.servlet;
import com.qdu.entity.Dog;
import com.qdu.entity.Student;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 请求该Serlvet,会添加属性到不同的域对象中,然后转发请求给get_domain_attribute3.jsp页面,在页面中获取域对象中的属性值
*
* @author Anna
*/
@WebServlet("/pas")
public class PutAttributeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//通常是发送请求给servlet,servlet转发请求给jsp
//在Servlet中可以使用请求对象、会话对象、上下文对象这三个域对象用于在不同范围共享数据
//请求对象中的属性只有转发请求才能共享给下个组件(jsp或servlet)
req.setAttribute("num1", 111);
HttpSession session = req.getSession();
session.setAttribute("num2", 222);
ServletContext ctx = getServletContext();
ctx.setAttribute("num3", 333);
Student s = new Student("2020208888", "Anna", "123456", "女", "20软件J01");
Dog d = new Dog("毛毛", "哈士奇", 2);
req.setAttribute("student", s);
session.setAttribute("dog", d);
//假设用一个数组存储了很多个字符串表示的名字
String[] array1 = {"小强", "小明", "小兰", "小花"};
req.setAttribute("names", array1);
//假设用一个数组存储了一个学生的名字、成绩排名和平均分,因为数据类型不同,所以可以考虑使用Object数组
Object[] array2 = {"小明", 2, 97.3};
req.setAttribute("info", array2);
List<Dog> list=new ArrayList<>();
list.add(new Dog("球球","泰迪",2));
list.add(new Dog("旺财","柴犬",5));
list.add(new Dog("哈利","哈士奇",8));
list.add(new Dog("开心","边牧",10));
req.setAttribute("dogList", list);
req.getRequestDispatcher("/get_domain_attribute3.jsp").forward(req, resp);
}
}
使用EL调用类中静态方法
在类中定义静态方法
package com.qdu.util;
import java.util.Random;
/**
* 数字工具类NumberUtil,用于对数字进行 *** 作
*
* @author Anna
*/
public class NumberUtil {
private static Random ran = new Random();
/**
* 生成一个1-100以内的随机整数
*
* @return 一个随机整数
*/
public static int getRandomNumber() {
return ran.nextInt(100) +1; //1-100
}
/**
* 计算一个整数的平方值
*
* @param x 一个整数
* @return 整数表示的平方值
*/
public static int square(int x) {
return x * x;
}
/**
* 计算两数之和
*
* @param a 整数1
* @param b 整数2
* @return 两数之和
*/
public static int sum(int a, int b) { //严格来说,方法名+参数列表叫做方法的签名
return a + b;
}
}
package com.qdu.util;
/**
* StringUtil类,字符串工具类,用于对字符串执行 *** 作
*
* @author Anna
*/
public class StringUtil {
public static String getMobile(String mobile){
return mobile.substring(0,3)+"****"+mobile.substring(7,11);
}
}
创建TLD(Tag Library Descriptor标记库描述符
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0tlib-version>
<short-name>fcshort-name>
<uri>http://www.anna.com/func/coreuri>
<function>
<name>randname>
<description>获取一个1-100以内的随机整数description>
<function-class>com.qdu.util.NumberUtilfunction-class>
<function-signature>int getRandomNumber()function-signature>
function>
<function>
<name>squarename>
<description>计算一个整数的平方值description>
<function-class>com.qdu.util.NumberUtilfunction-class>
<function-signature>int square(int)function-signature>
function>
<function>
<name>sumname>
<description>计算两数之和description>
<function-class>com.qdu.util.NumberUtilfunction-class>
<function-signature>int sum(int, int)function-signature>
function>
<function>
<name>getMobilename>
<description>获取电话号码description>
<function-class>com.qdu.util.StringUtilfunction-class>
<function-signature>java.lang.String getMobile(java.lang.String)function-signature>
function>
taglib>
在jsp页面使用taglib指令引入TLD
<%@taglib uri="http://www.anna.com/func/core" prefix="fc" %>
在EL表达式中调用方法
<%--
使用EL调用类中静态方法
--%>
<%@taglib uri="http://www.anna.com/func/core" prefix="fc" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>使用EL调用类中静态方法title>
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<link rel="stylesheet" href="css/style.css"/>
head>
<body>
<div class="container">
<br>
<h1 class="text-center text-primary">使用EL调用类中静态方法h1>
<hr>
<p class="text-danger">
<b>* 使用EL调用类中静态方法的步骤:b><br>
1) 在类中定义静态方法<br>
2) 创建TLD(Tag Library Descriptor标记库描述符,一个xml文件,描述如何使用标记或函数)文件,TLD中不仅可以描述标记,还可描述函数,描述如何使用函数(function)<br>
3) 在jsp页面使用taglib指令引入TLD<br>
4) 在EL表达式中调用方法即可,调用语法:\${TLD别名:函数名(参数列表)}<br>
p>
<hr>
<p class="text-success">
* 调用getRandomNumber()方法: ${fc:rand()}
<br><br>* 调用square()方法: ${fc:square(4)}
<br><br>* 调用sum()方法: ${fc:sum(2, 4)}
<br><br>* 调用getMobile()方法: ${fc:getMobile("18706579002")}
p>
<hr>
div>
body>
html>
使用 EL 表达式
EL表达式如何处理Null值和获取上下文参数
如果只是显示一个空值,EL表达式自动处理空值,什么都不显示
* 属性或变量值:${number}
EL表达式中,使用空值进行算术运算,则空值做0处理
* 求和:${number + 6}
EL表达式中,在比较运算中使用空值,则做false处理
* 逻辑判断:${result ? 1 : 0}
使用EL表达式获取上下文参数(context parameter)
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>encodingparam-name>
<param-value>UTF-8param-value>
context-param>
<context-param>
<param-name>emailparam-name>
<param-value>anna@qdu.edu.cnparam-value>
context-param>
<session-config>
<session-timeout>
30
session-timeout>
session-config>
web-app>
EL表达式提供initParam隐式对象,用于获取上下文参数,语法:${initParam.参数名}
* 上下文参数encoding: ${initParam.endcoding}
EL表达式练习
<p>
* 请求参数name的值:${param.name}
<br>* 请求参数address的值:${paramValues.address[0]} | ${paramValues.address[1]}
<br>* 属性number的值:${pageScope.number}
<br>* 属性msg的值:${requestScope.msg}
<br>* 属性username的值:${sessionScope.username}
<br>* 属性onlineCount的值:${applicationScope.onlineCount}
<br>* 员工小明的所有信息:${requestScope.emp1.empId} | ${requestScope.emp1.empName} | ${requestScope.emp1.empGender} | ${requestScope.emp1.empGrade} | ${requestScope.emp1.empDob}
<br>* 员工小花的所有信息:${sessionScope.emp2.empId} | ${sessionScope.emp2.empName} | ${sessionScope.emp2.empGender} | ${sessionScope.emp2.empGrade} | ${sessionScope.emp2.empDob}
<br>* 上下文参数dbusername的值:${initParam.dbusername}
<br>* 上下文参数dbpassword的值:${initParam.dbpassword}
<br>* 属性data的所有元素值:${pageScope.data[0]} | ${pageScope.data[1]} | ${pageScope.data[2]} | ${pageScope.data[3]} | ${pageScope.data[4]}
p>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)