JSTL标准标签库、jsp、EL 表达式、JSTL优点以及常用的标签用法

DAY16.1 Java核心基础

JSTL

JSTL(JSP Standard Tag Library)JSP 标准标签库

业务数据从后端传递到前端,前端需要对他们进行处理展示,遍历

JSP 的特点是将HTML代码和java代码混合在一起

<% %> 符号以内的是Java代码,符号以外的是html代码

允许分割获取,比如获取数组的时候

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("重写的doGet方法,下面是业务逻辑");
    // 获取到url中的query参数
    List<String> list = new ArrayList<>();
    list.add("张三");
    list.add("李四");
    list.add("王五");
    req.setAttribute("list",list);
    // 设置请求转发路径,跳转到page.jsp
    RequestDispatcher requestDispatcher = req.getRequestDispatcher("/page.jsp");
    // 请求转发
    requestDispatcher.forward(req,resp);
}
<h1>Hello</h1>
<h1>${list}</h1>
<%
    List<String> list = (List<String>) request.getAttribute("list");
    for (int i = 0; i <list.size() ; i++) {
%>
<h1><%=list.get(i)%></h1>
<%
    }
%>

直接通过EL表达式获取的时候

${list}

,输出的是[张三, 李四, 王五]

而下面的for循环分割输出的是三个h1标签的内容

JSTL标准标签库、jsp、EL 表达式、JSTL优点以及常用的标签用法_第1张图片

EL 表达式 ${id} 会依次从以下作用域查找变量:
  • Page Scope(页面作用域)
  • Request Scope(请求作用域)
  • Session Scope(会话作用域)
  • Application Scope(应用作用域)

如果需要访问类的属性呢,创建一个类:

name:公有,其它的私有

public class User {
    public String name;
    private String password;
    private String email;

    public User(String name, String password, String email) {
        this.name = name;
        this.password = password;
        this.email = email;
    }

    @Override
    public String
    toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

将user存入request

User user = new User("赵六", "123456", "[email protected]");
req.setAttribute("user",user);

用EL表达式访问

${user}

${user.name}

${user.password}

报错:

JSTL标准标签库、jsp、EL 表达式、JSTL优点以及常用的标签用法_第2张图片

image-20250324094907176

未找到属性PropertyNotFoundException方法

咦?为什么公有的也访问不到呢

其实jsp在编译的时候就会将user.name换成user.getName()方法,其实是调用的属性的get方法

我们将get方法加入User进去试试呢

public String getName() {
    return name;
}

public String getPassword() {
    return password;
}

public String getEmail() {
    return email;
}

可以看见访问到了name和password属性

JSTL标准标签库、jsp、EL 表达式、JSTL优点以及常用的标签用法_第3张图片

JSTL优点

为了我们的简化编写出现的一个工具,比如我们要写一个表格的形式,那数据太难拼接了吧

1、提供了一组标准标签

2、可用于编写各种动态功能

<h1>Hello</h1>
<table>
    <tr>
        <td>姓名</td>
        <td>密码</td>
        <td>邮箱</td>
    </tr>
    <%
        List<User> list = (List<User>) request.getAttribute("list");
        for (User user : list) {
    %>
    <tr>
        <td><%=user.getName()%></td>
        <td><%=user.getPassword()%></td>
        <td><%=user.getEmail()%></td>
    </tr>
    <%
        }
    %>
List<String> list = new ArrayList<>();
req.setAttribute("list",list);
User user1 = new User("赵六", "123456", "[email protected]");
User user2 = new User("张三", "234567", "[email protected]");
User user3 = new User("李四", "345678", "[email protected]");
list.add(user1.name);
list.add(user2.name);
list.add(user3.name);
req.setAttribute("list",list);

添加多个对象进request

Jstl写法:

<h1>Hello</h1>
<table>
    <tr>
        <td>姓名</td>
        <td>密码</td>
        <td>邮箱</td>
    </tr>
    <c:forEach items="${list}" var="user">
        <tr>
            <td>${user.name}</td>
            <td>${user.password}</td>
            <td>${user.email}</td>
        </tr>
    </c:forEach>
</table>

通用标签

set、out、remove、catch

set:向作用域(request)中添加一个数据

set:向作用域(request)中添加一个数据

添加数据并取出

<c:set var="test" value="欧克"></c:set>
<h1>${test}</h1>

更新数据从已经存在的变量

<%
    User user2 =new User("shuwu","123","[email protected]")
%>
<c:set value="java" property="name" target="user2"></c:set>
out:输出域对象中的数据

remove:删除域对象中的数据

catch:捕获异常

    <%
        int a = 1/0;
    %>

条件标签

if choose

如果num1>num2 ,则输出num1


    ${num1}

迭代标签

forEach

    

遍历数字列表

第${status.count}项: ${num}

格式化标签

fmt
 
    

格式化示例

<% pageContext.setAttribute("date", new java.util.Date()); pageContext.setAttribute("price", 1234567.89); %>

当前时间:

价格格式化:

函数标签

fn
 
    

字符串处理

字符串长度: ${fn:length(text)}

包含"JSTL"? ${fn:contains(text, 'JSTL')}

分割字符串: ${word},

你可能感兴趣的:(Java核心基础,java,java核心基础,开发语言)