一 简述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 标签库包含五个核心标签库:
- 核心标签库(core):提供通用的标签,例如条件判断、循环处理、变量定义等。
- 格式化标签库(fmt):提供格式化输出标签,例如日期格式化、数字格式化等。
- SQL标签库(sql):提供访问数据库的标签,例如查询、更新等。
- XML标签库(xml):提供 XML 文件的处理标签,例如解析、遍历等。
- 函数标签库(fn):提供常用函数的标签,例如字符串处理、日期处理等。
使用 JSTL 标签库,需要在 JSP 页面中导入相应的标签库,例如导入核心标签库的语句为:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix
表示标签前缀,可以自定义,用于区分不同的标签库,以避免标签名的冲突;
uri
表示标签库的 URI,该值是标签库的唯一标识符。
然后就可以使用 c 标签库中的标签,例如使用 if 标签进行条件判断:
以上代码表示如果 session 中有 user 对象,则输出欢迎消息,其中
<c:if test="${sessionScope.user != null}"> Welcome, ${sessionScope.user.username}! </c:if>
${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运行结果截图