2022-8-31 jsp el表达式

jsp

<%-- JSP脚本片段:用于在JSP页面写java代码--%>

注意:
1、JSP脚本片段中只能出现java代码,不能出现HTML元素。在 访问JSP时,JSP引擎翻译JSP页面中的脚本片段。
2、JSP脚本片段中的java代码必须严格遵守java的规则
3、一个JSP页面是可以有多个脚本片段
4、多个脚本片段中的代码可以相互访问

<%
    System.out.println(num);

​    // 向页面打印输出
​    out.print(num);
%>

<%--JSP表达式--%>
<%= num %>
<%--JSP声明片段--%>
<%!
    int x = 10;

static{

}

public void fun(){

}

		%>

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page errorPage="error.jsp" contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="hello.jsp"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--
    JSP的指令标识
    <%@ 指令名 属性1="值1" 属性2="值2" .....%>
    page指令:定义整个JSP页面的相关属性
    include指令:引入其他的JSP页面。先把两个页面结合,在去编译成servlet。
    taglib指令:引入页面上需要用到的标签库
--%>
<%
    List list = new ArrayList();
//    int i = 10 / 0;
%>
<h1>JSP02 Page!!!</h1>
</body>
</html>
    JSP的指令标识
    <%@ 指令名 属性1="值1" 属性2="值2" .....%>
    page指令:定义整个JSP页面的相关属性
    include指令:引入其他的JSP页面。先把两个页面结合,在去编译成servlet。
    taglib指令:引入页面上需要用到的标签库
    JSP标签
    1、内置标签
        (1)jsp:include:引入指定的页面
        (2)jsp:forward:转发页面
        (3)jsp:param:传参数
    2、JSTL标签,需要导入JSTL标签库
    3、自定义标签  
--%>
<jsp:include page="hello.jsp"></jsp:include>
<jsp:forward page="hello.jsp">
    <jsp:param name="num1" value="10"/>
    <jsp:param name="num2" value="20"/>
</jsp:forward>

JSP作用域

四大作用域:
1、当前页(pageContext):一个属性只能在一个页面中获取。
2、一次请求(request):一个页面中设置的属性,范围是一次请求。
3、一次会话(session):一个会话中的属性,只要页面不关闭,都能获取到
4、整个web应用(application):在这个服务器上,当前项目下的任何一个位置都能获取。

    pageContext.setAttribute("pageContext","pageContext");
    request.setAttribute("request","request");
    session.setAttribute("session","session");
    application.setAttribute("application","application");
%>

<h1>pageContext:<%= pageContext.getAttribute("pageContext")%></h1>
<h1>request:<%= request.getAttribute("request")%></h1>
<h1>session:<%= session.getAttribute("session")%></h1>
<h1>application:<%= application.getAttribute("application")%></h1>

面试题:

1.JSP和servlet的区别?

​ 1、JSP本质上就是一个servlet
​ 2、JSP更侧重于视图展示,servlet更侧重于逻辑处理
​ 3、先有的servlet,后有的JSP

2.jsp:include标签和include指令的区别?

​ include标签:先把要引入的页面编译,再合并
​ include指令:先把要引入的页面合并,再编译

3.JSP的四大作用域

JSP的九大内置对象。内置:不需要创建,直接就能用。
1、request 请求
2、response 响应
3、session* 会话
4、out 输出
5、page 当前JSP页面对象
6、application 应用
7、exception* 异常,只能在指定了isErrorPage="true"
8、pageContext 当前页,作用域
9、config 配置

EL表达式

EL表达式的内置作用域对象
pageContext
requestScope
sessionScope
applicationScope

<%@ 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:set scope="session" var="name" value="zhangsan"></c:set>
    <c:set scope="session" var="age" value="20"></c:set>
    ${sessionScope.name}

    <hr>
    <c:if test="${sessionScope.age >= 18}">可以观看!</c:if>
    <c:if test="${sessionScope.age < 18}">禁止观看!</c:if>
    
    <hr>
    <c:choose>
        <c:when test="${sessionScope.age eq 18}">
            你已经年满18岁,可以签署劳动合同了!
        </c:when>
        <c:when test="${sessionScope.age lt 18}">
            你好没有满18岁!
        </c:when>
        <c:otherwise>
            你已经是大人了!!!
        </c:otherwise>
    </c:choose>
    <hr>
    <c:forEach begin="1" end="10" step="2" var="i" varStatus="stat">
        ${i} ----- ${stat.first} <br>
    </c:forEach>



</body>
</html>

四、EL表达式的运算

语法:${运算表达式},EL表达式支持以下运算符:

1. 关系运算

在这里插入图片描述

2. 逻辑运算

在这里插入图片描述

3. 算数运算

在这里插入图片描述

4. empty运算

empty运算可以判断一个数据是否为空,若为空,输出true,不为空,输出false
以下几种情况为空(在原本的key之前加empty关键字):
(1)值为null、空串
(2)值为Object类型的数组且长度为0 (注:其他类型的长度为0的数组值为非空)
(3)List、Map集合元素个数为0

5. 三元运算

表达式 1?表达式 2:表达式 3
表达式1为真返回表达式2的值,表达式1为假返回表达式3的值

6. “.”点运算和“[ ]”中括号运算

点运算可以输出某个对象的某个属性的值(getXxx或isXxx方法返回的值)
中括号运算可以输出有序集合中某个元素的值

注:中括号运算可以输出Map集合中key里含有特殊字符的key的值

代码演示:在web目录下创建Test.jsp

EL表达式的11个隐含对象

在这里插入图片描述
EL表达式中的11个隐含对象是EL表达式自己定义的,可以直接使用

(1) pageScope、requestScope、sessionScope、applicationScope对象的使用

代码演示:在web目录下创建Test.jsp

EL表达式的缺陷:1、只能读,不能写 2、不支持流程控制语句

posted @ 2022-09-01 19:34  阿萨德菩提子  阅读(16)  评论(0编辑  收藏  举报