javaWeb
一、JSTL
1.1 概念
jstl(JavaServerPages Standard Tag Library) JSP标准标签库
jsp标准标签库,用于配合指令与el表达式完成jsp页面上所有动态操作,使页面java代码的书写降到最低
1.2 使用
1、导入相应的jar包 jstl.jar standard.jar
2、在使用jstl的jsp页面中添加标签的引入(类似于java的导包)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
3、使用相应标签完成相应功能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3B5WW2Ht-1616476814687)(day0318.assets/image-20210318141606056.png)]
1.2.1 通用标签
User.java
package com.yunhe.pojo;
import java.io.Serializable;
import java.util.Objects;
public class User implements Serializable {
private String username;
private String password;
private String roleName;
public User() {
}
public User(String username, String password, String roleName) {
this.username = username;
this.password = password;
this.roleName = roleName;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", roleName='" + roleName + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(getUsername(), user.getUsername()) && Objects.equals(getPassword(), user.getPassword()) && Objects.equals(getRoleName(), user.getRoleName());
}
@Override
public int hashCode() {
return Objects.hash(getUsername(), getPassword(), getRoleName());
}
}
set标签
<%@ page import="com.yunhe.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%-- c是前缀 在taglib设置时设置的前缀是什么 使用时前缀就是什么 --%>
<%-- 1、将数据存储至指定作用域 --%>
<c:set var="name" value="值" scope="session"/>
<%-- var 存储到作用域的名字 value存储到作用域的值 scope存储的作用域--%>
${name}
<%--2、为指定对象赋值 --%>
<% User u=new User();
session.setAttribute("user",u);
%>
<c:set target="${user}" property="username" value="admin"/>
<c:set target="${user}" property="password" value="123456"/>
<c:set target="${user}" property="roleName" value="管理员"/>
<%-- target设置属性的对象(一般使用el表达式获取) property设置的属性 value设置的值 --%>
${user}
</body>
</html>
out标签
用于获取输出指定数据
```jsp
<%@ page import="com.yunhe.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<% User u=new User();
u.setPassword("123456");
session.setAttribute("user",u);
%>
<%-- out标签 将结果输出到控制台 类似于el表达式输出 out.print() --%>
<%-- el表达式值为空时没有输出 out标签至为空时可以设置默认值 --%>
<c:out value="${user.username}" default="用户名未设置"/>
<c:out value="${user.password}" default="密码未设置"/>
<c:out value="${user.roleName}" default="角色未设置"/>
</body>
</html>
remove标签
用于删除指定作用域数据
<%@ page import="com.yunhe.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<% User u=new User();
u.setPassword("123456");
session.setAttribute("user",u);
%>
<%-- remove标签 移除指定作用域指定数据 --%>
<c:remove var="user" scope="session"/>
<%-- out标签 将结果输出到控制台 类似于el表达式输出 out.println() --%>
<%-- el表达式值为空时没有输出 out标签至为空时可以设置默认值 --%>
<c:out value="${user.username}" default="用户名未设置"/>
<c:out value="${user.password}" default="密码未设置"/>
<c:out value="${user.roleName}" default="角色未设置"/>
</body>
</html>
1.2.2 条件标签
if标签
<%@ page import="com.yunhe.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<% User u = new User();
u.setUsername("admin");
u.setPassword("123456");
u.setRoleName("0");//0学生 1老师 2管理员
session.setAttribute("user", u);
%>
<%-- c:if标签 对结果进行判断如果为true则在页面输出标签内容 --%>
<c:if test="${true}" var="names" scope="page"></c:if>
<%-- test使用el表达式获取数据后进行判断 var用于声明变量保存判断的结果 scope用于设置变量存储的作用域 --%>
<table>
<thead>
<tr>
<th>账号</th>
<th>密码</th>
<th>角色</th>
</tr>
</thead>
<tbody>
<tr>
<td>
${user.username}
</td>
<td>
${user.password}
</td>
<td>
<c:if test="${user.roleName eq '0'}" var="c1" scope="page">
学生
</c:if>
<c:if test="${user.roleName eq '1'}" var="c2" scope="page">
老师
</c:if>
<c:if test="${user.roleName eq '2'}" var="c3" scope="page">
管理员
</c:if>
</td>
判断结果1${c1}
判断结果2${c2}
判断结果3${c3}
</tr>
</tbody>
</table>
</body>
</html>
choose标签
```jsp
<%@ page import="com.yunhe.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<% User u = new User();
u.setUsername("admin");
u.setPassword("123456");
u.setRoleName("5");//0学生 1老师 2管理员
session.setAttribute("user", u);
%>
<%-- c:choose标签 用于完成if。。else的书写 只有在每个分支上拥有test属性用于判断数据的结果 --%>
<c:choose>
<c:when test="${user.roleName eq '0'}">
学生
</c:when>
<c:when test="${user.roleName eq '1'}">
教师
</c:when>
<c:when test="${user.roleName eq '2'}">
管理员
</c:when>
<c:otherwise>
什么玩意
</c:otherwise>
</c:choose >
<table>
<thead>
<tr>
<th>账号</th>
<th>密码</th>
<th>角色</th>
</tr>
</thead>
<tbody>
<tr>
<td>
${user.username}
</td>
<td>
${user.password}
</td>
<td>
<c:choose>
<c:when test="${user.roleName eq '0'}">
学生
</c:when>
<c:when test="${user.roleName eq '1'}">
教师
</c:when>
<c:when test="${user.roleName eq '2'}">
管理员
</c:when>
<c:otherwise>
什么玩意
</c:otherwise>
</c:choose >
</td>
</tr>
</tbody>
</table>
</body>
</html>
### 1.2.3 迭代标签
foreach标签
```java
``jsp
<%@ page import="com.yunhe.pojo.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Random" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
ArrayList<User> list=new ArrayList<>();
for(int i=1;i<=20;i++){
String [] roleArr={"学生","教师","管理员"};
Random r=new Random();
list.add(new User("a"+i,"a"+i+i,roleArr[r.nextInt(roleArr.length)]));
}
session.setAttribute("list", list);
%>
<%-- foreach标签用于循环的执行与数据集合的遍历 --%>
<%-- 1、循环的书写 --%>
<c:forEach var="i" begin="0" end="10" step="2">
<%-- var用于保存循环时的变量 begin初始变量的值 end 变量结束的值 step每次循环后变量修改的大小 --%>
${i} hello world!<br>
</c:forEach>
<%-- 2、遍历数据集合 --%>
<c:forEach var="i" items="${list}" varStatus="status">
<%-- var用于保存循环时的变量 items保存遍历的数据集合 varStatus声明保存当前循环的相应信息 --%>
${i}<br>
</c:forEach>
<table>
<thead>
<tr>
<th>账号</th>
<th>密码</th>
<th>角色</th>
</tr>
</thead>
<tbody>
<c:forEach var="i" items="${list}" varStatus="status">
<tr>
<td>
${status.count}
</td>
<td>
${i.username}
</td>
<td>
${i.password}
</td>
<td>
${i.roleName}
</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
-%>
${i} hello world!
</c:forEach>
<%-- 2、遍历数据集合 --%>
<c:forEach var="i" items="${list}" varStatus="status">
<%-- var用于保存循环时的变量 items保存遍历的数据集合 varStatus声明保存当前循环的相应信息 --%>
${i}<br>
</c:forEach>
<table>
<thead>
<tr>
<th>账号</th>
<th>密码</th>
<th>角色</th>
</tr>
</thead>
<tbody>
<c:forEach var="i" items="${list}" varStatus="status">
<tr>
<td>
${status.count}
</td>
<td>
${i.username}
</td>
<td>
${i.password}
</td>
<td>
${i.roleName}
</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>