实验九 EL表达式和JSTL标签库的使用
实验名称:EL表达式和JSTL标签库的使
用
时间:2019-2020第2学期
实验9 EL表达式和JSTL标签库的使用1实验目的
1)了解表达式语言的功能;
2)熟悉JSTL标签库的基本使用方法;
3)掌握表达式语言的使用;
4)掌握JSTL的核心库标签的使用;
5)掌握标签文件的开发和使用。
2 实验原理
表达式语言(EL)是JSP 2.0新增的功能。它是一种简洁的数据访问语言,通过它可以在JSP页面中方便地访问应用程序数据,无需使用JSP表达式(<%=和%>)。EL的目标是使动态网页的设计、开发和维护更加容易。
JSP标准标签库(JSP Standard Tag Library,简称JSTL)是一个为实现Web 应用程序的常用功能而开发的标签库集合。
3仪器与材料
安装有Windows7或以上操作系统的计算机,JDK1.8,MyEclipse2016,Tomcat7.0,Dreamweaver。
4实验内容
4.1使用表达式语言
EL的特点是访问数据可以使用点(.)运算符或方括号([])运算符;可以访问隐含对象;有自己的运算符构造表达式;可以使用Java语言编写的函数等。
操作步骤如下:
1. 创建一个Web project:TestEL,
2. 在WebRoot文件夹中创建一个operator.jsp页面,EL运算符的使用,代码如下:
<%@ page contentType="text/html;charset=gb2312" %>
JSP 2.0 表达式语言- 基本算术运算符
该例说明了基本的表达式语言的算术运算符的使用,其中包括加(+),减(-), 乘(*),除(/ 或div), 取余(% 或mod)。
EL 表达式 结果 \${1} ${1} \${1 + 2} ${1 + 2} \${1.2 + 2.3} ${1.2 + 2.3} \${1.2E4 + 1.4} ${1.2E4 + 1.4} \${-4 - 2} ${-4 - 2} \${21 * 2} ${21 * 2} \${3/4} ${3/4} \${3 div 4} ${3 div 4} \${3/0} ${3/0} \${10%4} ${10%4} \${10 mod 4} ${10 mod 4} \${(1==2) ? 3 : 4} ${(1==2) ? 3 : 4}
3. 在Src文件夹中创建一个EmployeeBean的JavaBean,访问作用域变量,其中包括3个属性eno表示雇员号、ename表示雇员名和ecompany表示雇员公司名。代码如下
【步骤1】EmployeeBean.java程序代码
package com.beans;
public class EmployeeBean {
private String eno = "";
private String ename = "";
private String ecompany = "";
public EmployeeBean() {
}
public void setEno(String eno){
this.eno = eno;
}
public void setEname(String ename){
this.ename = ename;
}
public void setEcompany(String ecompany){
this.ecompany = ecompany;
}
public String getEno(){
return eno;
}
public String getEname(){
return ename;
}
public String getEcompany(){
return ecompany;
}
}
【步骤2】在WebRoot目录下编写Employee.jsp页面,在其中通过表单输入雇员信息,将请求转发到一个Servlet。
<%@ page contentType="text/html;charset=gb2312"%>
请输入雇员信息:
【步骤3】在Src目录下建立EmployeeServlet,该Servlet从JSP页面得到客户信息package com.control;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.beans.EmployeeBean;
public class EmployeeServlet extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{
String eno = request.getParameter("eno");
String ename = request.getParameter("ename");
String ecompany = request.getParameter("ecompany");
EmployeeBean employee = new EmployeeBean();
employee.setEno(eno);
employee.setEname(ename);
employee.setEcompany(ecompany);
request.setAttribute("employee", employee);
RequestDispatcher view =
request.getRequestDispatcher("/displayEmployee.jsp");
view.forward(request, response);
}
}
【步骤4】在WebRoot目录下编写displayEmployee.jsp页面,该JSP页面使用EL表达式显示用户的信息
<%@ page contentType="text/html;charset=gb2312"%>
雇员的信息如下:
- 雇员号:${employee.eno}
- 雇员名:${employee.ename}
- 公司名:${employee.ecompany}
4. 在WebRoot文件夹中创建一个JSP页面implicit.jsp演示EL隐含对象的使用,代码如下
<%@ page contentType="text/html;charset=gb2312" %>
JSP 2.0 表达式语言-隐含对象
输入foo参数值
EL 表达式 结果 \${param.foo} ${param.foo} \${param["foo"]} ${param["foo"]} \${header["host"]} ${header["host"]} \${header["accept"]} ${header["accept"]} \${header["user-agent"]} ${header["user-agent"]}
5. 在JSP页面中使用Java函数:如要在JSP页面中使用一个add()函数,实现两个整数的加法运算,要经过3个步骤,代码如下
【步骤1】函数的定义,创建类文件Compute.java。它定义了要在JSP中使用的add()方法。
package com.demo;
public class Compute{
public static int add(String x,String y){
int a = 0;
int b = 0;
try{
a = Integer.parseInt(x);
b = Integer.parseInt(y);
}catch(Exception e){
System.err.println("Number format is illegal.");
}
return a+b;
}
}
package beans;
import java.util.*;
public class Functions {
public static String reverse( String text ) {
return new StringBuffer( text ).reverse().toString();
}
public static int numVowels( String text ) {
String vowels = "aeiouAEIOU";
int result = 0;
for( int i = 0; i < text.length(); i++ ) {
if( vowels.indexOf( text.charAt( i ) ) != -1 ) {
result++;
}
}
return result;
}
public static String caps( String text ) {
return text.toUpperCase();
}
}
【步骤2】创建标签库描述文件taglib.tld。它实现将每个Java方法与函数名相匹配。
xmlns:xsi="https://www.360docs.net/doc/d415156991.html,/2001/XMLSchema-instance" xsi:schemaLocation="https://www.360docs.net/doc/d415156991.html,/xml/ns/j2ee https://www.360docs.net/doc/d415156991.html,/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> int add( https://www.360docs.net/doc/d415156991.html,ng.String, https://www.360docs.net/doc/d415156991.html,ng.String)
numVowels( https://www.360docs.net/doc/d415156991.html,ng.String )
注意:将该文件保存在Web应用程序WEB-INF\classes目录中。
【步骤3】编写JSP文件sum.jsp,使用标签库URI以及函数名调用Java函数,代码如下:<%@ page contentType="text/html;charset=gb2312" %>
<%@ taglib prefix="demo" uri="https://www.360docs.net/doc/d415156991.html,/function" %>
计算两个整数之和
两个整数的和为:${demo:add(param["x"],param["y"])}
该页面运行结果为:
6. 编写一个名为palindrome(String str)的函数,实现判断用户输入的字符串是否是回文(palindrome)。编写JSP页面,通过EL使用该函数。代码如下
public static boolean palindrome(String str){
StringBuffer sb = new StringBuffer(str);
if((sb.reverse().toString()).equals(str)){
return true;
}else{
return false;
}
}
4.2 JSTL标签库的使用
JSP标准标签库(JSP Standard Tag Library,简称JSTL)的功能包括基本输入输出、流程控制、XML文件解析、数据库查询、国际化和文本格式化等。JSTL主要由下面几个库组成:
核心标签库;XML标签库;格式化/国际化标签库;数据库标签库;函数标签库。
这些库都很有用,但我们这里只学习核心库的使用。核心库的标签又可以分成四类,如下表所示:
表按功能分类的核心库的标签
JSTL标签类别JSTL标签标签说明
标签文件(tag file)也是JSP 2.0新增的功能,它的目的是使JSP页面开发人员仅使用JSP语法就能开发标签库而无须编写Java程序。所谓标签文件就是直接使用JSP语法编写的标签。标签文件的扩展名一般为.tag或.tagx,如果标签文件包含其他完整的或片段的标签文件,JSP 2.0建议其扩展名为.tagf。
在JSP页面中使用标签文件,需要在taglib动作中使用tagdir属性指定标签文件所在的目录,例如:
<%@ taglib prefix="mytag" tagdir="/WEB-INF/tags"%>
1. JSTL的安装和测试:
【步骤1】要在JSP页面中使用JSTL标签,首先必须安装JSTL库。可以到Jakarta网站下载最新版本的JSTL,网址为https://www.360docs.net/doc/d415156991.html,/,下载版本1.1.2版,它支持JSP 2.0和Servlet 2.4。
也可以在Tomcat的示例应用程序中获得JSTL,它位于
【步骤2】一个简单的测试JSP页面jstl_test.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%@ taglib uri="https://www.360docs.net/doc/d415156991.html,/jsp/jstl/core" prefix="c" %>
Request Method:${pageContext.request.method}
Remote Address:${pageContext.request.remoteAddr}
如果运行页面显示下面结果,说明JSTL安装正确,可以使用。
说明:使用JSTL不用建立标签库描述文件,因为该文件已经包含在standard.jar文件中了,JSP容器可以找到该文件。另外,也可以不用配置web.xml文件,因为JSP容器使用隐含映射的方式可以将标准的URI映射到适当的标签库上。
2. 表达式相关标签的使用
下面的core_expression.jsp演示了
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="https://www.360docs.net/doc/d415156991.html,/jsp/jstl/core" %>
使用 的例子
不同作用域的number变量的初始值
pageScope.number =
requestScope.number = default="No Data" /> sessionScope.number = default="No Data" /> pageScope.number = default="No Data" /> requestScope.number = default="No Data" /> sessionScope.number = default="No Data" /> 3. 流程控制标签的使用:包括2个页面,一个是flowControl.html,一个是flowControl.jsp。 【步骤1】flowControl.html的代码如下:使用JSTL流程控制标签
请选择一个填入文本框中:Tom\Jerry\Mike\Ben
【步骤2】flowControl.jsp的代码如下:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="https://www.360docs.net/doc/d415156991.html,/jsp/jstl/core" %>
标签c:if的使用
标签c:choose c:when c:otherwise使用
您好,Tom
您好,Jerry
您好,Mike
您好,Ben
执行flowControl.jsp的结果如下图所示:
在文本框中输入Tom后,点击“传送”按钮,则出现下面的结果:
4. URL相关标签的使用,代码如下
【步骤1】included.jsp是被包含的页面,代码如下:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ taglib uri="https://www.360docs.net/doc/d415156991.html,/jsp/jstl/core" prefix="c" %>
这是被包含页面中的内容
用户名:
【步骤2】import_test.jsp是包含页面,代码如下:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ taglib uri="https://www.360docs.net/doc/d415156991.html,/jsp/jstl/core" prefix="c" %>
这是包含页面中的内容
运行结果,如下图所示:
【步骤3】redirect_test.jsp测试了重定向标签的使用,其代码如下:<%@ page contentType="text/html;charset=gb2312" %>
<%@ taglib uri="https://www.360docs.net/doc/d415156991.html,/jsp/jstl/core" prefix="c" %>
使用redirect标签
>
对比步骤二的例子总结不同点。
5. 建立简单标签文件,代码如下
【步骤1】创建一个名为example.tag的简单的标签文件,代码如下:<%@ taglib prefix="c" uri="https://www.360docs.net/doc/d415156991.html,/jsp/jstl/core" %>
注意:将该文件存放在Web应用程序的WEB-INF/tags目录中。【步骤2】创建一个名为example.jsp的页面,代码如下:<%@ taglib prefix="ex" tagdir="/WEB-INF/tags" %>
The first six numbers in the Fibonacci sequence are:
执行该JSP页面,结果如下:
6. 使用标签文件指令控制标签,代码如下
【步骤1】下面的标签文件使用了tag指令的dynamic-attributes属性。dynatt.tag文件的代码如下:
<%@ taglib uri="https://www.360docs.net/doc/d415156991.html,/jsp/jstl/core" prefix="c" %>
<%@ tag dynamic-attributes="attrib" %>
${att.value}
【步骤2】使用该标签文件的JSP文件dynatt_test.jsp代码如下:
<%@ taglib prefix="dyn" tagdir="/WEB-INF/tags" %>
该JSP页面的运行结果为:
六、讨论及问题回答
(一)简述JSP表达式语言的主要功能有哪些?
动态读取JavaBean中的数据和动态将数据写入JavaBean中一级调用任意静态或公有方法还有动态执行算术运算。
(二)JSTL的核心库有哪几类标签,各类中有哪些标签?
JSTL 核心标签库标签共有13个,功能上分为4类:
表达式控制标签:out、set、remove、catch
流程控制标签:if、choose、when、otherwise
循环标签:forEach、forTokens
URL操作标签:import、url、redirect
(三)使用标签文件有什么好处?
jsp的标签就相当于javaBean的封装,作用就是使jsp代码清晰易懂.