为了更方便、便捷的在页面中输入和操作动态数据,jsp引入了表达式语言(EL)和jsp标准标签库(JSTL)技术。两者在jsp2.0版本以上都作为标准被支持。
目录
一、EL技术
1.EL的作用
2.EL语法
(1)EL的语法形式
(2)EL内部对象
(3)存取运算符
(4)EL运算符
3.EL调用实例
二、JSTL技术
1.JSTL简介
2.常用的JSTL标签
(1):用于在jsp页面中显示数据
(2):用于保存数据
(3):用于删除数据
(4):单条件标签
(5):多分枝标签
(6):循环标签
3.JSTL标准函数
4.JSTL实例--使用EL和JSTL显示查询结果
jsp页面中输出动态信息有三种方法。
①jsp内置对象out:例如,<% out.println("这是一篇技术介绍博客");%>
②jsp表达式:例如,<%=new Date()%>
③表达式语言:例如,${user.id}
EL表达式的作用就是在jsp页面中输出动态信息
所有的EL都是以“${”开始,以“}”结束的。
例如:
${user.name}
功能:在页面上显示表达式user.name的值
如果EL表达式不指定范围,那么表达式会依次在page、request、session、application范围中查找。若中途找到user.name,就返回其值,不在继续找;但若在全部范围中内有找到,就返回null。
如果要指定范围,就需要加上特定的前缀
page范围:${pageScope.user.name}
request范围:${requestScope.user.name}
response范围:${responseScope.user.name}
session范围:${sessionScope.user.name}
在web程序设计时,对jsp页面常用EL代替脚本代码显示输出内容。
EL提供了11个可直接使用的内部对象。
类别 | 对象 | 描述 |
---|---|---|
jsp | pageContent | 获取当前jsp页面的信息,可访问jsp的8个内置对象 |
作用域 | pageScope | 获取page范围的属性值 |
requestScope | 获取request范围的属性值 | |
sessionScope | 获取response范围的属性值 | |
applicationScope | 获取application范围的属性值 | |
请求参数 | param | 获取单个指定请求参数的值 |
paramValues | 获取请求参数的所有请求参数的值数组 | |
请求头 | header | 获取单个指定请求头信息的值 |
headerValues | 获取请求头信息的所有请求头的值数组 | |
Cookie | cookie | 获取request中的Cookie集 |
初始化参数 | initParam | 获取初始化参数值 |
EL表达式是由EL的有关运算符构成的式子,主要运算符有:存取数据运算符以及表达式求值运算符。
在EL中,对数据值的存取是通过"[]"或"."实现的。
${user.name}或${user["name"]}或${user[name]}
"[]"主要用于访问数组、列表或其他集合对象的属性
"."主要用于访问对象的属性
EL支持的运算符和java语言运算符类似,分为算数运算符、关系运算符、逻辑运算符和特殊运算符。唯一不同的是EL中的一个特殊运算符empty--用以判断是否为空。
EL提供自动类型转换的功能,能够按照一定的规则将操作数或结果转换成指定的类型。
调用并显示javabean中的信息
package bean;
public class javabean {
private int id;
private String name;
private String sex;
public javabean() {
super();
id=1;
name="张三";
sex="男";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="bean.javabean" %>
调用javabean
<%
int BId=javabean.getId();
javabean.setId(2);
String Name=javabean.getName();
javabean.setName("李四");
%>
展示信息
学号:${javabean.id}
姓名:${javabean.name}
性别:${javabean.sex}
JSTL是jsp标准标签库,使用JSTL中的标签可以提高开发效率,减少jsp页面中的代码数量,保持页面的简洁性和良好的可读性、可维护性。
JSTL专门提供了一套支持Jar包,JST标签按功能分为5类。
功能类型 | uri | prefix | 库功能 |
---|---|---|---|
核心库 | http://java.sun.com/jsp/jstl/core |
c | 操作范围变量、流程控制、url生成和操作 |
XML处理 | http://java.sun.com/jsp/jstl/xml | x | 操作通过xml表示的数据 |
格式化 | http://java.sun.com/jsp/jstl/fmt | fmt | 数字及日期数据格式化、页面国际化 |
数据库存取 | http://java.sun.com/jsp/jstl/sql | sql | 操作关系数据库 |
函数 | http://java.sun.com/jsp/jstl/functions | fn | 字符串处理函数 |
表中的统一资源标识符(URI)表示标签的位置,perfix是使用标签时用到的前缀。在web程序中使用JSTL标签,必须首先下载支持Jar包(javax.servlet.jsp.jstl.jar和jstl-impl-1.2.2.jar),然后部署到工程中。
在jsp页面中添加taglib指令,从而使该页面使用到添加的标签:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
value属性:输出的信息,可以使EL表达式或常量;default属性:可选项,当value值为空时显示的信息,上述例子显示null。
value属性:可选项,要保留的信息;target属性:可选性,需要修改属性的变量名;property属性:可选项,需要修改的javabean属性;var属性:可选项,需要保存的信息的变量;scope属性:可选项,保存信息的变量范围。
var属性:要删除的变量;scope属性:可选项,被删除变量的范围(page、request、response、application)
body content
test属性:需要评价的条件,条件需要自己定义;var属性:可选项,需要保存的信息的变量;scope属性:可选项,保存信息的变量范围。
相关语句
其他条件语句
相关语句
格式1:
循环内容
格式2:
循环内容
其中,items属性:进行循环的项目;var属性:代表当前项目的变量名;begin属性:开始条件;end属性:结束条件;step属性:步长;vatStatus属性:显示循环变量的状态。
调用函数前,需要在jsp中引入标准函数声明。
http://java.sun.com/jsp/jstl/functions
函数名 | 函数说明 |
---|---|
fn:contains() | 测试输入的字符串是否包含指定的子串 |
fn:containsIgnoreCase() | 测试输入的字符串是否包含指定的子串,大小写不敏感 |
fn:endsWith() | 测试输入的字符串是否以指定的后缀结尾 |
fn:escapeXml() | 跳过可以作为XML标记的字符 |
fn:indexOf() | 返回指定字符串在输入字符串中出现的位置 |
fn:join() | 将数组中的元素合成一个字符串然后输出 |
fn:length() | 返回字符串长度 |
fn:replace() | 将输入字符串中指定的位置替换为指定的字符串然后返回 |
fn:split() | 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回 |
fn:startsWith() | 测试输入字符串是否以指定的前缀开始 |
fn:substring() | 返回字符串的子集 |
fn:substringAfter() | 返回字符串在指定子串之后的子集 |
fn:substringBefore() | 返回字符串在指定子串之前的子集 |
fn:toLowerCase() | 将字符串中的字符转为小写 |
fn:toUpperCase() | 将字符串中的字符转为大写 |
fn:trim() | 移除首位的空白符 |
package bean;
public class javabean {
private int id;
private String name;
private String sex;
public javabean() {
super();
// TODO Auto-generated constructor stub
}
public javabean(int id, String name, String sex) {
super();
this.id = id;
this.name = name;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
package bean;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class jieshou
*/
@WebServlet("/jieshou")
public class jieshou extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public jieshou() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
List studentlist=new ArrayList();
studentlist.add(new javabean(1,"张三","男"));
studentlist.add(new javabean(2,"李四","女"));
studentlist.add(new javabean(3,"王五","男"));
request.setAttribute("result", studentlist);
request.getRequestDispatcher("beanEL.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="bean.javabean,java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
调用servlet
通过EL和JSTL显示结果
学号 姓名 性别
${javabean.id}
${javabean.name}
${javabean.sex}