[Java Web]实验六 表达式语言的使用 编写一个名为EmployeeBean的JavaBean,其中包括3个 编写JSP文件sum.jsp,使用标签库URI以及函数名调用Java函数,代码如下:

实验六  表达式语言的使用

一、实验目的

1. 了解表达式语言的功能;

2. 掌握表达式语言的使用。

二、实验原理

表达式语言(EL)是JSP 2.0新增的功能。它是一种简洁的数据访问语言,通过它可以在JSP页面中方便地访问应用程序数据,无需使用JSP表达式(<%=和%>)。EL的目标是使动态网页的设计、开发和维护更加容易。

EL的特点是访问数据可以使用点(.)运算符或方括号([])运算符;可以访问隐含对象;有自己的运算符构造表达式;可以使用Java语言编写的函数等。

三、实验内容与步骤

(一)表达式语言运算符的使用

下面的JSP页面operator.jsp演示了EL运算符的使用:

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

<html>

  <head>

    <title>JSP 2.0 Expression Language - Basic Arithmetic</title>

  </head>

  <body>

    <h1>JSP 2.0 表达式语言 - 基本算术运算符</h1>

    <hr>

    该例说明了基本的表达式语言的算术运算符的使用,其中包括加(+),减(-), 乘(*),除(/ 或 div), 取余 (% 或 mod)。

    <br>

    <blockquote>

      <code>

        <table border="1">

          <thead>

       <td><b>EL 表达式</b></td>

       <td><b>结果</b></td>

     </thead>

     <tr><td>\${1}</td> <td>${1}</td> </tr>

     <tr> <td>\${1 + 2}</td> <td>${1 + 2}</td> </tr>

     <tr> <td>\${1.2 + 2.3}</td> <td>${1.2 + 2.3}</td> </tr>

     <tr> <td>\${1.2E4 + 1.4}</td> <td>${1.2E4 + 1.4}</td> </tr>

     <tr> <td>\${-4 - 2}</td> <td>${-4 - 2}</td> </tr>

     <tr> <td>\${21 * 2}</td> <td>${21 * 2}</td> </tr>

     <tr> <td>\${3/4}</td> <td>${3/4}</td> </tr>

     <tr> <td>\${3 div 4}</td> <td>${3 div 4}</td> </tr>

     <tr> <td>\${3/0}</td> <td>${3/0}</td> </tr>

     <tr> <td>\${10%4}</td> <td>${10%4}</td> </tr>

     <tr> <td>\${10 mod 4}</td> <td>${10 mod 4}</td> </tr>

    <tr> <td>\${(1==2) ? 3 : 4}</td> <td>${(1==2) ? 3 : 4}</td> </tr>

   </table>

      </code>

    </blockquote>

  </body>

</html>

(二)访问作用域变量

编写一个名为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"%>

<html>

<body>

请输入雇员信息:

<form action="employee.do" method="post">

<table>

<tr><td>雇员号:</td><td><input type="text" name="eno"></td></tr>

<tr><td>雇员名:</td><td><input type="text" name="ename"></td></tr>

<tr><td>公司名:</td><td><input type="text" name="ecompany"></td></tr>

</table>

<input type="submit" value="提交">

</form>

</body>

</html>

【步骤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"%>

<html><body>

雇员的信息如下:<br>

<ul>

  <li>雇员号:${employee.eno}

  <li>雇员名:${employee.ename}

  <li>公司名:${employee.ecompany}

</ul>

</body></html>

(三)隐含对象的使用

下面的JSP页面implicit.jsp演示了EL隐含对象的使用。

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

<html>

  <head>

    <title>EL implicit objects</title>

  </head>

  <body>

    <h1>JSP 2.0 表达式语言-隐含对象</h1>

    <hr>

    <blockquote>

      <b>输入foo参数值</b>

      <form action="implicit.jsp" method="GET">

     foo= <input type="text" name="foo" value="${param["foo"]}">

          <input type="submit">

      </form>

      <br>

      <code>

        <table border="1">

          <thead>

       <td><b>EL 表达式</b></td>

       <td><b>结果</b></td>

     </thead>

     <tr>

       <td>\${param.foo}</td>

       <td>${param.foo}&nbsp;</td>

     </tr>

     <tr>

       <td>\${param["foo"]}</td>

       <td>${param["foo"]}&nbsp;</td>

     </tr>

     <tr>

       <td>\${header["host"]}</td>

       <td>${header["host"]}</td>

     </tr>

     <tr>

       <td>\${header["accept"]}</td>

       <td>${header["accept"]}</td>

     </tr>

     <tr>

       <td>\${header["user-agent"]}</td>

       <td>${header["user-agent"]}</td>

     </tr>

   </table>

    </code>

    </blockquote>

  </body>

</html>

(四)在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方法与函数名相匹配。

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">

    <description>A Simple Taglib File.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>demo</short-name>

    <uri>http://www.mydomain.com/function</uri>
    <function>
        <description>Adding two numbers</description>
        <name>add</name>
        <function-class>com.example.expsix.Compute</function-class>
        <function-signature>
            int add( java.lang.String, java.lang.String)
        </function-signature>
    </function>
    <function>
        <description>Reverses the characters in the given String</description>
        <name>reverse</name>
        <function-class>com.example.expsix.Functions</function-class>
        <function-signature>java.lang.String reverse( java.lang.String )</function-signature>
    </function>
    <function>
        <description>Counts the number of vowels (a,e,i,o,u) in the given String</description>
        <name>countVowels</name>
        <function-class>com.example.expsix.Functions</function-class>
        <function-signature>int numVowels( java.lang.String )</function-signature>
    </function>
    <function>
        <description>Converts the string to all caps</description>
        <name>caps</name>
        <function-class>com.example.expsix.Functions</function-class>
        <function-signature>java.lang.String caps( java.lang.String )</function-signature>
    </function>
</taglib>


注意:将该文件保存在Web应用程序WEB-INF\classes目录中。

还需要新建web.xml文件:

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <!--配置taglib-->
    <taglib>
        <!--设置标签库唯一 url ;这里的 url 必须与 tld 文件中的 uri 一致-->
        <taglib-uri>http://www.mydomain.com/function</taglib-uri>
        <!--指明 tld 标签库描述文件的位置-->
        <taglib-location>/WEB-INF/classes/taglib.tld</taglib-location>
    </taglib>
    <!---->
</web-app>

【步骤3】编写JSP文件sum.jsp,使用标签库URI以及函数名调用Java函数,代码如下:

<%@ page contentType="text/html;charset=gb2312" %>
<%@ taglib prefix="demo" uri="http://www.mydomain.com/function" %>
<%@page isELIgnored="false"%>
<html>
<head><title>Using Function </title></head>
<body>
<h3>计算两个整数之和</h3>
<p>
<form action="sum.jsp" method="post">
  X = <input type="text" name="x" size="5" />
  Y = <input type="text" name="y" size="5" />
  <input type="submit" value="计算">
</form>
<p>
  两个整数的和为:${demo:add(param["x"],param["y"])}
</body>
</html>

该页面运行结果为:

图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中加入:

  <function>
        <description>Converts the string to all caps</description>
        <name>palindrome</name>
        <function-class>com.example.expsix.Functions</function-class>
        <function-signature>boolean palindrome(java.lang.String)</function-signature>
    </function>

新建jsp文件palindrome.jsp:

<%@ page contentType="text/html;charset=gb2312" %>
<%@ taglib prefix="demo" uri="http://www.mydomain.com/function" %>
<%@page isELIgnored="false"%>
<html>
<head><title>Using Function </title></head>
<body>
<h3>判断字符串是否是回文</h3>
<p>
<form action="palindrome.jsp" method="post">
    S = <input type="text" name="s" size="5" />
    <input type="submit" value="判断">
</form>
<p>
    字符串是否是回文:${demo:palindrome(param["s"])}
</body>
</html>

四、思考题

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代码。

  • 36
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值