实验九 EL表达式和JSTL标签库的使用

实验九 EL表达式和JSTL标签库的使用
实验九 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 Expression Language - Basic Arithmetic

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" %>

EL implicit objects

JSP 2.0 表达式语言-隐含对象


输入foo参数值

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">

A Simple Taglib File.

1.0

Simple Tag Library

https://www.360docs.net/doc/d415156991.html,/function

Adding two numbers

add

https://www.360docs.net/doc/d415156991.html,pute

int add( https://www.360docs.net/doc/d415156991.html,ng.String, https://www.360docs.net/doc/d415156991.html,ng.String)

Reverses the characters in the given String

reverse

beans.Functions

https://www.360docs.net/doc/d415156991.html,ng.String reverse( https://www.360docs.net/doc/d415156991.html,ng.String )

Counts the number of vowels (a,e,i,o,u) in the given String

countVowels

beans.Functions

https://www.360docs.net/doc/d415156991.html,ng.String

numVowels( https://www.360docs.net/doc/d415156991.html,ng.String )

Converts the string to all caps

caps

beans.Functions

https://www.360docs.net/doc/d415156991.html,ng.String caps( 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" %>

Using Function

计算两个整数之和

X =

Y =

两个整数的和为:${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,它位于\webapps\ examples\WEB-INF\lib目录中,共有两个文件:jstl.jar和standard.jar。将这两个文件复制到Web应用程序的WEB-INF\lib目录中,完成安装了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" %>

Using JSTL


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中用于流程控制的标签

使用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" %>

JSTL中用于流程控制的标签

标签c:if的使用

您好,Tom

您好,Jerry

您好,Mike

您好,Ben

标签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" %>

Included Page

这是被包含页面中的内容

用户名:

【步骤2】import_test.jsp是包含页面,代码如下:

<%@ page contentType="text/html;charset=gb2312" %>

<%@ taglib uri="https://www.360docs.net/doc/d415156991.html,/jsp/jstl/core" prefix="c" %>

Using URL JSTL

这是包含页面中的内容


运行结果,如下图所示:

【步骤3】redirect_test.jsp测试了重定向标签的使用,其代码如下:<%@ page contentType="text/html;charset=gb2312" %>

<%@ taglib uri="https://www.360docs.net/doc/d415156991.html,/jsp/jstl/core" prefix="c" %>

Using Redirect Tag

使用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代码清晰易懂.

相关主题
相关文档
最新文档