Java学习日记(day28)

一、EL表达式

目的就是去掉JSP中的Java代码,都是以标签的形式表示,以标签的形式美工或者前端都可以修改,利于团队的合作。这套标签和Java语言无关。

JSP核心语法:JSP表达式 JSP脚本

JSP开发的原则:尽量在JSP页面少写甚至不写Java代码,Java代码放在Servlet。

使用EL表达式来代替JSP表达式

EL表达式的作用:向浏览器输出域对象(只能输出域对象)的变量或者表达式计算的结果。

语法:${变量或表达式} ${list}

JSP表达式:

EL表达式替代上面的脚本:${requestScope.name}

EL最主要的作用是获得四大域中的数据,格式${EL表达式}

  1. EL获得pageContext域中的值:${pageScope.key}; PageContext
  2. EL获得request域中的值:${requestScope.key};
  3. EL获得session域中的值:${sessionScope.key};
  4. EL获得application域中的值:${applicationScope.key}; ServletContext

${name} ${sessionScope.key}

从四个域对象中取某个值${}

依次从page域 < request域 < session域 < application域获取值,在某个域中找到不再往后找。

就是现在小的域范围找,找不到再去大的范围找.

1、获得普通字符串

2、获得Student对象的值

3、获得List的值

html 复制代码
<body>
    <%--${list}--%>
    <%
        //JSP页面内置对象
        //pageContext、request、session、application(ServletContext)域对象,也是内置对象
        //1.普通字符串
        pageContext.setAttribute("name", "zhangsan");
        request.setAttribute("name", "lisi");
        //2.Student对象
        Student student = new Student(1, "zhansga", 23, "男");
        session.setAttribute("student", student);
        //3.List<Student>
        List<Student> list = new ArrayList<>();
        Student student1 = new Student(1, "zhangsan1", 23, "男");
        Student student2 = new Student(2, "zhangsan2", 23, "男");
        Student student3 = new Student(3, "zhangsan3", 23, "男");
        list.add(student1);
        list.add(student2);
        list.add(student3);
        application.setAttribute("list", list);
    %>

    <%--JSP表达式--%>
    <%=pageContext.getAttribute("name")%><br/>
    <%=request.getAttribute("name")%><br/>
    <%
       Student stu = (Student) session.getAttribute("student");
    %>
    <%=stu.getName()%><br/>
    <%=stu.getAge()%><br/>
    <%=((Student) session.getAttribute("student")).getGender()%><br>
    <%
        List<Student> stuList = (List<Student>) application.getAttribute("list");
    %>
    <%=stuList.get(0).getName()%>
    
    <hr/>
    <%--EL表达式--%>
    ${pageScope.name}<br/>
    ${requestScope.name}<br/>
    ${name}<br/>
    ${sessionScope.student.name}<br/>
    ${student.age}<br/>
    ${list}<br/>
    ${list[0].name}<br/>
  
</body>

二、JSTL标签

JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同EL一样也是要代替JSP页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库

java 复制代码
<%@ page import="com.situ.web.pojo.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--1、向域对象放数据--%>
    <%
        pageContext.setAttribute("age", 23);
        session.setAttribute("gender", "男");
    %>
    <c:set var="age" value="24" scope="request"></c:set>
    ${age} <br/>
    <hr/>
    <%--2、条件判断--%>
    <c:if test="${gender=='男'}">
        男
    </c:if>
    <c:if test="${gender=='女'}">
        女
    </c:if>
    <hr/>
    <%--3、多条件判断--%>
    <c:set var="score" value="78"></c:set>
    <c:choose>
        <c:when test="${score>=90&&score<=100}">
            优秀
        </c:when>
        <c:when test="${score>=80&&score<90}">
            良好
        </c:when>
        <c:when test="${score>=70&&score<80}">
            一般
        </c:when>
        <c:when test="${score>=60&&score<70}">
            及格
        </c:when>
        <c:otherwise>
            不及格
        </c:otherwise>
    </c:choose>
    <hr/>
    <%--4、集合遍历
        List<Student>
        Map<String, String>
        Map<String, Student>
    --%>
    <c:forEach begin="1" end="10" var="i" step="1">
        ${i}
    </c:forEach>
    <br/>
    <%
        List<Student> list = new ArrayList<>();
        Student student1 = new Student(1, "zhangsan1", 23, "男");
        Student student2 = new Student(2, "zhangsan2", 23, "男");
        Student student3 = new Student(3, "zhangsan3", 23, "男");
        list.add(student1);
        list.add(student2);
        list.add(student3);
        application.setAttribute("list", list);
    %>
    <c:forEach items="${list}" var="student">
        ${student.id}--${student.name}--${student.age}--${student.gender} <br/>
    </c:forEach>
    <hr/>
    <%--Map<String, String>--%>
    <%
        Map<String, String> map = new HashMap<>();
        map.put("cn", "中国");
        map.put("us", "美国");
        request.setAttribute("map", map);
    %>
    <c:forEach items="${map}" var="entry">
        ${entry.key}--${entry.value}<br/>
    </c:forEach>
    <hr/>
    <%--Map<String, Student>--%>
    <%
        Map<String, Student> studentMap = new HashMap<>();
        studentMap.put("student1", student1);
        studentMap.put("student2", student2);
        studentMap.put("student3", student3);
        request.setAttribute("studentMap", studentMap);
    %>
    <c:forEach items="${studentMap}" var="entry">
        ${entry.key}--${entry.value.name}--${entry.value}<br/>
    </c:forEach>
</body>
</html>

三、问题总结

JSP本质是Servlet

C:\Users\Gao\AppData\Local\JetBrains\IntelliJIdea2024.1\tomcat\ec76a933-0aaf-4bab-8eb7-d7c16c957743\work\Catalina\localhost\ROOT\org\apache\jsp

相关推荐
武子康10 分钟前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
若亦_Royi12 分钟前
C++ 的大括号的用法合集
开发语言·c++
资源补给站1 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
豪宇刘1 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意1 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
eybk2 小时前
Pytorch+Mumu模拟器+萤石摄像头实现对小孩学习的监控
学习
6.942 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
FF在路上2 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进2 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html