EL与JSTL

一 简述JavaBean以及编写Java类

1.1 关于javabean的编写要求:

  • 必须是公共的,并且具有无参构造函数
  • 私有的实例变量应该使用封装机制,通过公共的getter和setter方法进行访问
  • 方法的可见性应该被限制为公共的,以使得其他类可以通过这些方法访问Javabean的状态。
  • 类应该实现Serializable接口,以支持Java序列化机制。
  • 类应该具有一致性,即要么提供getter和setter方法来访问每个实例变量,要么使用公共方法来进行操作。
  • 命名规则应该遵循JavaBean的标准命名规范,即实例变量的命名应该以小写字母开头,后面的单词首字母大写,例如:name、age、email等。
  • 实例变量名称中不应该包含下划线(_)等特殊字符
  • 方法名应该简洁、具有描述性,并且遵循JavaBean的标准命名规范,例如:getName、setAge、getEmail等。
  • 应该提供有参数的构造函数,以便于创建对象时初始化实例变量值。
  • Javabean应该是线程安全的,因此应该考虑到多线程环境下的并发访问。

1.2 在src目录下创建Adiminnister包,在包下创建类Student

package Adminnister;

public class Student {
   private int id;
   private String name;
   private double age;

   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 double getAge() {
       return age;
   }

   public void setAge(double age) {
       this.age = age;
   }

   public Student() {
   }

   public Student(int id, String name, double age) {
       this.id = id;
       this.name = name;
       this.age = age;
   }

   @Override
   public String toString() {
       return "Student{" +
               "id=" + id +
               ", name='" + name + '\'' +
               ", age=" + age +
               '}';
   }
}

二 简述EL与JSTL

2.1关于EL表达式

EL表达式(Expression Language)是一种用于Web开发中表达式的语言。它可以用于在Java服务器页面(JSP)和JavaServer Faces (JSF) 页面中获取、设置和操作数据。

EL表达式可以从各种数据源中获取数据,如请求参数、表单参数、会话数据、应用程序数据等,即可以从JSP的作用域中获取数据,还可以在JSF中获取Managed Bean的属性值。

使用EL表达式的好处:

  • 使用EL表达式可以大大减少Java代码在Web页面中的使用,提高Web开发效率。
  • EL表达式可以使用一些常用的运算符操作数据,例如算术运算符、比较运算符、逻辑运算符等。
  • 同时,也可以使用EL函数来操作数据,例如格式化日期、字符串截取、字符串拼接等。

举个例子:

${requestScope.username}会从当前JSP页面的请求作用域中获取用户名的值,${sessionScope.cart.totalPrice}会从当前会话的作用域中获取购物车的总价值。

使用EL表达式可以让Web开发更加方便和简洁。

2.2 EL表达式的基本语法

${expression}

其中,${} 表示 EL 表达式的开始和结束,expression 是一个在 EL 表达式中有效的表达式,可以使用各种运算符和操作符对表达式进行计算,从而得到一个值。

在 expression 中可以使用以下内容:

  • 对象属性:使用 . 操作符获取对象的属性,如 ${user.name}
  • 数组元素:使用 [] 操作符获取数组中指定下标的元素,如 ${array[0]}
  • Map 键值对:使用 [] 操作符获取 Map 中指定键对应的值,如 ${map['key']}
  • 方法调用:使用 () 操作符调用一个方法,如 ${user.getName()}
  • 运算符:支持各种运算符操作,例如算术运算符、比较运算符、逻辑运算符等。

在 expression 中还可以使用一些隐式对象,例如:

  • pageScope:表示当前页面的作用域对象,类似于 requestScope
  • requestScope:表示请求作用域对象
  • sessionScope:表示会话作用域对象
  • applicationScope:表示应用程序作用域对象
  • param:表示请求参数
  • paramValues:表示请求参数的值数组
  • header:表示请求头部信息
  • headerValues:表示请求头部信息的值数组
  • cookie:表示请求的 Cookie 信息

例如,${param.username} 表示获取请求参数中名为 username 的参数值。

2.3关于JSTL

JSTL(JavaServer Pages Standard Tag Library)是一组自定义 JSP 标签,它为 JSP 页面提供了一组通用的标签,以简化 JSP 页面的开发和维护。JSTL 标签库提供了很多有用的标签,例如条件判断、循环处理、格式化输出等,可以大大简化 JSP 页面代码的编写。

JSTL 标签库包含五个核心标签库:

  1. 核心标签库(core):提供通用的标签,例如条件判断、循环处理、变量定义等。
  2. 格式化标签库(fmt):提供格式化输出标签,例如日期格式化、数字格式化等。
  3. SQL标签库(sql):提供访问数据库的标签,例如查询、更新等。
  4. XML标签库(xml):提供 XML 文件的处理标签,例如解析、遍历等。
  5. 函数标签库(fn):提供常用函数的标签,例如字符串处理、日期处理等。

使用 JSTL 标签库,需要在 JSP 页面中导入相应的标签库,例如导入核心标签库的语句为:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

prefix 表示标签前缀,可以自定义,用于区分不同的标签库,以避免标签名的冲突;

uri 表示标签库的 URI,该值是标签库的唯一标识符。

然后就可以使用 c 标签库中的标签,例如使用 if 标签进行条件判断:

<c:if test="${sessionScope.user != null}">
  Welcome, ${sessionScope.user.username}!
</c:if>
以上代码表示如果 session 中有 user 对象,则输出欢迎消息,其中 ${sessionScope.user.username} 表示获取 session 中的 user 对象的 username 属性值。

JSTL 标签库提供了很多其他的标签,可以根据需求进行选择和使用,以简化 JSP 页面的开发。

三 编写jsp文件以及展示运行结果

3.1 编写jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="Adminnister.Student,java.util.List,java.util.ArrayList,java.util.Date"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> --%>
<!DOCTYPE html>
<html>
  <head>
  	<style>
 		 .b{
  			text-align:center;
  			border:100px;
 	 		}
  </style>
    <title>信息</title>
  </head>
  <body>
  	<h1>信息</h1>
  	<hr>
   	<%
   		List<Student> list = new ArrayList<>();
        list.add(new Student(1,"王二小",23));
        list.add(new Student(2,"张无忌",53));
        list.add(new Student(3,"魏无羡",76));
        //通过key valu 形式存储
        request.setAttribute("list",list); 
       %>
    ${requestScope.list}<br><hr>
	${pageScope.list}<br><hr>
	${sessionScope.list}<br><hr>
	${applicationScope.list}<br><hr>
	<h2>用table标签和EL表达式输出数据</h2>
	<hr>	
	
      <table class="b">
          <tr>
             <th>编号</th>
             <th>姓名</th>
             <th>年龄</th>
          </tr>
          <tr>
             <td>${requestScope.list[0].id}</td>
             <td>${requestScope.list[0].name}</td>
             <td>${requestScope.list[0].age}</td>
          </tr>
          <tr>
              <td>${requestScope.list[1].id}</td>
              <td>${requestScope.list[1].name}</td>
              <td>${requestScope.list[1].age}</td>
          </tr>
          <tr>
              <td>${requestScope.list[2].id}</td>
              <td>${requestScope.list[2].name}</td>
              <td>${requestScope.list[2].age}</td>
          </tr>
      </table>
		<hr>
      
      <h2>用JSTL和EL表达式输出数据</h2>
      <hr>
      <c:forEach items="${list}" var="list">
      ${list}<br>
      </c:forEach>
      <hr>
      <%--foreach集合遍历标签:遍历集合对象的标签
      items:遍历的集合目标对象
      var:集合对象中的元素
      step:遍历集合的步长
      begin:遍历开始的位置
      end:遍历结束的位置
      varstatus:元素位置状态
      index:集中元素索引
      count:集合中元素的位置 --%>
     
      <h2>用JSTL和EL表达式输出名字数据</h2>
      <hr>
      <c:forEach items="${list}" var="list">
      ${list.name}<br>
      </c:forEach>
      <hr>
      <h2>用JSTL和EL表达式判断年龄是否大于40</h2>
      <c:forEach items="${list}" var="list">
      ${list.age>50}<br>
      </c:forEach>
      <hr>
      <%--
      <c:redirect url="el.jsp">
      <c:param name="id" value="999"></c:param>
      </c:redirect>
       --%>
       <h2>用JSTL和EL表达式判断年龄是否大于60</h2><hr>
       <c:forEach items="${list}" var="list">
      <c:if test="${list.age>=60}">
	 	姓名:${list.name}    年龄:${list.age }
		</c:if><br>
      </c:forEach><hr>
  </body>
</html>

3.2运行结果截图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值