实验六 表达式语言的使用
一、实验目的
1. 了解表达式语言的功能;
2. 掌握表达式语言的使用。
二、实验原理
表达式语言(EL)是JSP 2.0新增的功能。它是一种简洁的数据访问语言,通过它可以在JSP页面中方便地访问应用程序数据,无需使用JSP表达式(<%=和%>)。EL的目标是使动态网页的设计、开发和维护更加容易。
EL的特点是访问数据可以使用点(.)运算符或方括号([])运算符;可以访问隐含对象;有自己的运算符构造表达式;可以使用Java语言编写的函数等。
三、实验内容与步骤
(一)表达式语言运算符的使用
下面的JSP页面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}
(二)访问作用域变量
编写一个名为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】编写一个JSP页面,在其中通过表单输入雇员信息,将请求转发到一个Servlet。
<%@ page contentType="text/html;charset=gb2312"%> 请输入雇员信息:
【步骤3】下面的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】下面的JSP使用EL表达式显示用户的信息
<%@ page contentType="text/html;charset=gb2312"%> 雇员的信息如下:
- 雇员号:${employee.eno}
- 雇员名:${employee.ename}
- 公司名:${employee.ecompany}
(三)隐含对象的使用
下面的JSP页面implicit.jsp演示了EL隐含对象的使用。
<%@ page contentType="text/html;charset=gb2312" %>EL implicit objects 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"]}
(四)在JSP页面中使用Java函数
设要在JSP页面中使用一个add()函数,实现两个整数的加法运算。在JSP中使用Java函数要经过如下3个步骤:
【步骤1】函数的定义,创建类文件Compute.java。它定义了要在JSP中使用的add()方法。
package com.example.expsix; 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 com.example.expsix; 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方法与函数名相匹配。
A Simple Taglib File. 1.0 demo http://www.mydomain.com/function Adding two numbers add com.example.expsix.Compute int add( java.lang.String, java.lang.String) Reverses the characters in the given String reverse com.example.expsix.Functions java.lang.String reverse( java.lang.String ) Counts the number of vowels (a,e,i,o,u) in the given String countVowels com.example.expsix.Functions int numVowels( java.lang.String ) Converts the string to all caps caps com.example.expsix.Functions java.lang.String caps( java.lang.String )
注意:将该文件保存在Web应用程序WEB-INF\classes目录中。
还需要新建web.xml文件:
Archetype Created Web Application http://www.mydomain.com/function /WEB-INF/classes/taglib.tld
【步骤3】编写JSP文件sum.jsp,使用标签库URI以及函数名调用Java函数,代码如下:
<%@ page contentType="text/html;charset=gb2312" %> <%@ taglib prefix="demo" uri="http://www.mydomain.com/function" %> <%@page isELIgnored="false"%>Using Function 计算两个整数之和
两个整数的和为:${demo:add(param["x"],param["y"])}
该页面运行结果为:
图10.1 sum.jsp页面的运行结果
(四)编写一个名为palindrome(String str)的Java函数,实现判断用户输入的字符串是否是回文(palindrome)。编写一个JSP页面,通过EL使用该函数。
在Functions类里面加入方法:
public static boolean palindrome(String str){ StringBuffer sb = new StringBuffer(str); if((sb.reverse().toString()).equals(str)){ return true; }else{ return false; } }
在taglib.tld中加入:
Converts the string to all caps palindrome com.example.expsix.Functions boolean palindrome(java.lang.String)
新建jsp文件palindrome.jsp:
<%@ page contentType="text/html;charset=gb2312" %> <%@ taglib prefix="demo" uri="http://www.mydomain.com/function" %> <%@page isELIgnored="false"%>Using Function 判断字符串是否是回文
字符串是否是回文:${demo:palindrome(param["s"])}
四、思考题
1. 简述JSP表达式语言的主要功能有哪些?
JSP表达式语言(Expression Language,简称EL)的主要功能包括:
(1)简化表达式:EL 提供了在 JSP 中简化表达式的方法。其灵感来自于 ECMAScript 和 XPath 表达式语言,这使得 JSP 写起来更加简单。
(2)访问数据:EL 可以轻松地访问和操纵 JavaBean 中的数据。不论是算术表达式还是逻辑表达式的创建,EL 都可以胜任。
(3)支持多种数据类型:在 EL 表达式内,可以使用整型数、浮点数、字符串、常量 true、false,以及 null。
(4)提供可扩展函数:EL 具有映射到 Java 类中静态方法的可扩展函数。
(5)一组隐式对象:EL 提供了一组隐式对象,这些对象可以在表达式中直接使用,无需声明。
(6)运行时表达式的功能:EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。
2.简述在JSP页面中使用Java函数的步骤。
在JSP页面中使用Java函数的步骤大致如下:
(1)首先,需要创建一个Java类,并在其中定义想要使用的函数。注意,这个函数必须是静态的。
(2)在JSP页面中,通过 <%@ page import="包.类" %> 的方式引入创建的Java类。
(3)在JSP页面中,可以直接通过类名和方法名调用该函数。例如,如果函数是 public static String sayHello(String name),那么在JSP页面中可以这样调用:<%= 类名.sayHello("world") %>。
注意:虽然在JSP中可以使用Java代码,但这并不是一种好的做法。因为JSP主要应该用于表示层,即显示数据给用户,而业务逻辑和数据处理应该在Servlet或其他Java类中完成。在JSP中过多使用Java代码会使表示层和业务逻辑混在一起,导致代码难以维护和扩展。因此,在实际开发中,应尽量避免在JSP页面中使用过多的Java代码。
还没有评论,来说两句吧...