java web--EL技术与JSTL技术简介

  为了更方便、便捷的在页面中输入和操作动态数据,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显示查询结果


一、EL技术

  1.EL的作用

    jsp页面中输出动态信息有三种方法。

    ①jsp内置对象out:例如,<% out.println("这是一篇技术介绍博客");%>

    ②jsp表达式:例如,<%=new Date()%>

    ③表达式语言:例如,${user.id}

    EL表达式的作用就是在jsp页面中输出动态信息

  2.EL语法

  (1)EL的语法形式

    所有的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代替脚本代码显示输出内容。

  (2)EL内部对象

    EL提供了11个可直接使用的内部对象。

EL内部对象
类别 对象 描述
jsp pageContent 获取当前jsp页面的信息,可访问jsp的8个内置对象
作用域 pageScope 获取page范围的属性值
requestScope 获取request范围的属性值
sessionScope 获取response范围的属性值
applicationScope 获取application范围的属性值
请求参数 param 获取单个指定请求参数的值
paramValues 获取请求参数的所有请求参数的值数组
请求头 header 获取单个指定请求头信息的值
headerValues 获取请求头信息的所有请求头的值数组
Cookie cookie 获取request中的Cookie集
初始化参数 initParam 获取初始化参数值

  (3)存取运算符

    EL表达式是由EL的有关运算符构成的式子,主要运算符有:存取数据运算符以及表达式求值运算符。

    在EL中,对数据值的存取是通过"[]"或"."实现的。

${user.name}或${user["name"]}或${user[name]}
  "[]"主要用于访问数组、列表或其他集合对象的属性
  "."主要用于访问对象的属性

  (4)EL运算符

    EL支持的运算符和java语言运算符类似,分为算数运算符、关系运算符、逻辑运算符和特殊运算符。唯一不同的是EL中的一个特殊运算符empty--用以判断是否为空。

    EL提供自动类型转换的功能,能够按照一定的规则将操作数或结果转换成指定的类型。

  3.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" %>
<!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>调用javabean</title>
</head>
<body>
<jsp:useBean id="javabean" class="bean.javabean" scope="session"></jsp:useBean>
<%
int BId=javabean.getId();
javabean.setId(2);
String Name=javabean.getName();
javabean.setName("李四");
%>
<p>展示信息</p>
<hr>
学号:${javabean.id}<br>
姓名:${javabean.name}<br>
性别:${javabean.sex}<br>
</body>
</html>

二、JSTL技术

  1.JSTL简介

    JSTL是jsp标准标签库,使用JSTL中的标签可以提高开发效率,减少jsp页面中的代码数量,保持页面的简洁性和良好的可读性、可维护性。

    JSTL专门提供了一套支持Jar包,JST标签按功能分为5类。

JSTL标签库
功能类型 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"%>

  2.常用的JSTL标签

(1)<c:out>:用于在jsp页面中显示数据

<c:out value="${user.id}" default="null"/>

    value属性:输出的信息,可以使EL表达式或常量;default属性:可选项,当value值为空时显示的信息,上述例子显示null。  

(2)<c:set>:用于保存数据

<c:set target="" value="" var="" property="" scope=""/>

    value属性:可选项,要保留的信息;target属性:可选性,需要修改属性的变量名;property属性:可选项,需要修改的javabean属性;var属性:可选项,需要保存的信息的变量;scope属性:可选项,保存信息的变量范围。

(3)<c:remove>:用于删除数据

<c:remove var="" scope=""/>

    var属性:要删除的变量;scope属性:可选项,被删除变量的范围(page、request、response、application)

(4)<c:if>:单条件标签

<c:if test="test-condition">
    body content
</c:if>

    test属性:需要评价的条件,条件需要自己定义;var属性:可选项,需要保存的信息的变量;scope属性:可选项,保存信息的变量范围。

(5)<c:choose>:多分枝标签

    <c:choose>用于多选择情况,与<c:when>、  <c:otherwise>配合使用。<c:when>有一个属性test,由于指明判定条件。

<c:choose>
  <c:when test="condition1">
    相关语句
  </c:when>
  其他条件语句
  <c:otherwise>
    相关语句
  </c:otherwise>
</c:choose>

(6)<c:forEach>:循环标签

    格式1:

<c:forEach var="" varStatus="" begin="" end="" step="">
    循环内容
</c:forEach>

    格式2:

<c:forEach var="" varStatus="" items="">
    循环内容
</c:forEach>

    其中,items属性:进行循环的项目;var属性:代表当前项目的变量名;begin属性:开始条件;end属性:结束条件;step属性:步长;vatStatus属性:显示循环变量的状态。

  3.JSTL标准函数

    调用函数前,需要在jsp中引入标准函数声明。

http://java.sun.com/jsp/jstl/functions
JSTL标准函数
函数名 函数说明
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() 移除首位的空白符

  4.JSTL实例--使用EL和JSTL显示查询结果

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<javabean> studentlist=new ArrayList<javabean>();
		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"%>
<!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>调用servlet</title>
</head>
<body>
<p>通过EL和JSTL显示结果</p>
<hr>
<table>
<tr><th>学号</th><th>姓名</th><th>性别</th></tr>
<c:forEach var="javabean" items="${result }">
<tr><td>${javabean.id}</td>
<td>${javabean.name}</td>
<td>${javabean.sex}</td></tr>
</c:forEach>
</table>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_43238335/article/details/106538391