首页 > 其他分享 >JSP的page指令+九大内置对象+El表达式

JSP的page指令+九大内置对象+El表达式

时间:2023-06-02 14:34:13浏览次数:33  
标签:El String EL page JSP userObj public 表达式

1. JSP的指令  49

  - 指令的作用:指导JSP的翻译引擎如何工作(指导当前的JSP翻译引擎如何翻译JSP文件。)

1.1 指令包括哪些呢?  49

    - include指令:包含指令,在JSP中完成静态包含,很少用了。

    - taglib指令:引入标签库的指令。这个到JJSTL标签库的时候再学习。现在先不管。

    - page指令:目前重点学习一个page指令。

1.2 指令的使用语法是什么?

<%@指令名  属性名=属性值  属性名=属性值  属性名=属性值....%>

1.3 关于page指令当中都有哪些常用的属性呢?

1.3.1 举例

      <%@page session="true|false" %>

      true表示启用JSP的内置对象session,表示一定启动session对象。没有session对象会创建。

      如果没有设置,默认值就是session="true"

      session="false" 表示不启动内置对象session。当前JSP页面中无法使用内置对象session。

      <%@page contentType="text/json" %>

 contentType属性用来设置响应的内容类型

 但同时也可以设置字符集。

写法一

      <%@page contentType="text/json;charset=UTF-8" %>

写法二

      <%@page pageEncoding="UTF-8" %>

      pageEncoding="UTF-8" 表示设置响应时采用的字符集。


      <%@page import="java.util.List, java.util.Date, java.util.ArrayList" %>

      <%@page import="java.util.*" %>

    import语句,导包。



      <%@page errorPage="/error.jsp" %>

当前页面出现异常之后,跳转到error.jsp页面。

      errorPage属性用来指定出错之后的跳转位置。


      <%@page isErrorPage="true" %>

      表示启用JSP九大内置对象之一:exception,它可以在控制台提示错误信息

      默认值是false。

代码在E:\java学习\javaWeb\course\course23\web

5. jsp

<%--page指令  49--%>


<%--<%@page session="true" %>--%>
<%--<%@page session="false" %>--%>

<%--<%@page contentType="text/html" %>--%>
<%--<%@page contentType="text/json" %>--%>

<%--<%@page contentType="text/json;charset=UTF-8" %>--%>
<%--<%@page contentType="text/json" pageEncoding="UTF-8" %>--%>

<%--<%@page import="java.util.List, java.util.Date, java.util.ArrayList" %>
<%@page import="java.util.*" %>--%>


<%@page errorPage="/error.jsp" %>
<%
    String name = null;
    // 空指针异常
    name.toString();
%>

error. jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--在错误页面可以启用JSP九大内置对象之:exception     49--%>
<%--exception内置对象就是刚刚发生的异常对象。--%>
<%@page isErrorPage="true" %>
<html>
<head>
    <title>error</title>
</head>
<body>
<h1>网络繁忙,稍后再试!!!</h1>
<%
    //打印异常堆栈信息,输出到后台控制台,exception是九大内置对象之一。
    exception.printStackTrace();
%>
</body>
</html>

2. JSP的九大内置对象  49

  - jakarta.servlet.jsp.PageContext pageContext       页面作用域

  - jakarta.servlet.http.HttpServletRequest request 请求作用域

  - jakarta.servlet.http.HttpSession session  会话作用域

  - jakarta.servlet.ServletContext application 应用作用域

  - pageContext < request < session < application

    - 以上四个作用域都有:setAttribute、getAttribute、removeAttribute方法。

    - 以上作用域的使用原则:尽可能使用小的域。

  - java.lang.Throwable exception   异常


  - jakarta.servlet.ServletConfig config (就是一个类 接口,或者对象)

  - java.lang.Object page  (其实是this,指当前的servlet对象)

  - jakarta.servlet.jsp.JspWriter out  (负责输出)

  - jakarta.servlet.http.HttpServletResponse response (负责响应)

3. EL表达式  49

3.1 EL表达式是干什么用的?  49

  - Expression Language(表达式语言)

  - EL表达式可以代替JSP中的java代码,让JSP文件中的程序看起来更加整洁,美观。

  - JSP中夹杂着各种java代码,例如<% java代码 %>、<%=%>等,导致JSP文件很混乱,不好看,不好维护。所以才有了后期的EL表达式。

  - EL表达式可以算是JSP语法的一部分。EL表达式归属于JSP。

3.2 EL表达式出现在JSP中主要是:  49

 - 从某个作用域中取数据,然后将其转换成字符串,然后将其输出到浏览器。这就是EL表达式的功效。

3.2.1 三大功效:  49

 - 第一功效:从某个域中取数据。

      - 四个域:

        - pageContext

        - request

        - session

        - application

   - 第二功效:将取出的数据转成字符串。

      - 如果是一个java对象,也会自动调用java对象的toString方法将其转换成字符串。

    - 第三功效:将字符串输出到浏览器。

      - 和这个一样:<%= %>,将其输出到浏览器。

EL表达式很好用,基本的语法格式:

${表达式}

代码在E:\java学习\javaWeb\course\course23\web

6. jsp

<%--EL表达式举例   49-50--%>
<%@page contentType="text/html;charset=UTF-8" %>

<%
    //向request作用域当中存储username为zhangsan
    request.setAttribute("username","zhangsan");
    request.setAttribute("obj",new Object());
%>

<%--将request域当中的数据取出来,并且还要输出到浏览器,使用java代码怎么办--%>
<%=request.getAttribute("username")%>
<br>
<%=request.getAttribute("obj")%>

<br>
<hr>
<%--使用El表达式--%>
${username}
<br>
${obj}

JSP的page指令+九大内置对象+El表达式_JSP的page指令

3.3 EL表达式的使用:50

将User对象存储到某个域当中。一定要存,因为EL表达式只能从某个范围中取数据。数据是必须存储到四大范围之一的。

    <%
    	// 创建User对象
    	User user = new User();
    	user.setUsername("jackson");
    	user.setPassword("1234");
    	user.setAge(50);
    
    	// 将User对象存储到某个域当中。一定要存,因为EL表达式只能从某个范围中取数据。
    	// 数据是必须存储到四大范围之一的。
    	request.setAttribute("userObj", user);
    %>

3.3.1 使用EL表达式取

    ${这个位置写什么????这里写的一定是存储到域对象当中时的name}

    要这样写:

    ${userObj}

    等同于java代码:<%=request.getAttribute("userObj")%>

    你不要这样写:${"userObj"}

3.4  面试题:  50

     ${abc} 和 ${"abc"}的区别是什么?

     ${abc}表示从某个域中取出数据,并且被取的这个数据的name是"abc",之前一定有这样的代码: 域.setAttribute("abc", 对象);

     ${"abc"} 表示直接将"abc"当做普通字符串输出到浏览器。不会从某个域中取数据了。

3.5  ${userObj} 底层是怎么做的?  50

从域中取数据,取出user对象,然后调用user对象的toString方法,转换成字符串,输出到浏览器。

 3.5.1 如果想输出对象的属性值,怎么办?50

    ${userObj.username} 使用这个语法的前提是:User对象有getUsername()方法。

    ${userObj.password} 使用这个语法的前提是:User对象有getPassword()方法。

    ${userObj.age} 使用这个语法的前提是:User对象有getAge()方法。

    ${userObj.email} 使用这个语法的前提是:User对象有getEmail()方法。

  EL表达式中的 这个语法,实际上调用了底层的getXxx()方法。

    注意:如果没有对应的get方法,则出现异常。报500错误。


    ${userObj.addr222.zipcode}

    以上EL表达式对应的java代码:

    user.getAddr222().getZipcode()

代码在com.bjpowernode.javaweb.jsp.bean

User

package com.bjpowernode.javaweb.jsp.bean;

//一个javabean关于学习EL的  50
public class User {
    private String username;
    private String password;
    private int age;
    private Address addr;

    public Address getAddr222() {
        return addr;
    }

    public void setAddr(Address addr) {
        this.addr = addr;
    }
    //    @Override
//    public String toString() {
//        return "User{" +
//                "username='" + username + '\'' +
//                ", password='" + password + '\'' +
//                ", age=" + age +
//                '}';
//    }

    public User() {
    }

    public User(String username, String password, int age) {
        this.username = username;
        this.password = password;
        this.age = age;
    }

    public String getUsername() {
        System.out.println("getUsername()方法执行了");
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        System.out.println("getPassword()方法执行了");
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        System.out.println("getAge()方法执行了");
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 这个方法只是一个get方法而已。类中并没有声明email属性。
     * 使用EL表达式可以获取Email吗?
     * @return
     */
    public String getEmail(){
        return "[email protected]";
    }
}

Address

package com.bjpowernode.javaweb.jsp.bean;

//一个javabean 关于学习EL的  50
public class Address {
    private String city;
    private String street;
    private String zipcode;

    public Address() {
    }

    public Address(String city, String street, String zipcode) {
        this.city = city;
        this.street = street;
        this.zipcode = zipcode;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getZipcode() {
        return zipcode;
    }

    public void setZipcode(String zipcode) {
        this.zipcode = zipcode;
    }
}

7.jsp

<%--EL表达式的使用    50--%>
<%@ page import="com.bjpowernode.javaweb.jsp.bean.User" %>
<%@ page import="com.bjpowernode.javaweb.jsp.bean.Address" %>
<%@page contentType="text/html;charset=UTF-8" %>
<%
    //创建User对象
    User user = new User();
    user.setUsername("jackson");
    user.setPassword("1234");
    user.setAge(50);

    //创建地址Address对象
    Address a = new Address();
    a.setCity("北京");
    a.setStreet("大兴区");
    a.setZipcode("1111111");
    user.setAddr(a);//这个是将地址对象存入user对象(因为地址对象那个是用户对象的一个属性)

    //将User对象存储到request域当中
    request.setAttribute("userObj",user);
%>
<%--使用EL表达式,从request当中取出User对象,并将其输出到浏览器--%>
<%--1.EL表达式会自动的从某个范围内取数据 2.将其转化成字符串 3.将其输出到浏览器--%>
${userObj}
<br>
<%--你想输出的是user对象的username属性--%>
${userObj.username}
<br>
<%--输出password--%>
${userObj.password}
<br>
<%--输出年龄age--%>
${userObj.age}
<br>
<%--输出email--%>
${userObj.email}

<br>
<%--取出User对象是哪个城市的?--%>
城市:${userObj.addr222.city}
街道:${userObj.addr222.street}
邮编:${userObj.addr222.zipcode}

标签:El,String,EL,page,JSP,userObj,public,表达式
From: https://blog.51cto.com/u_15784725/6402283

相关文章

  • AD8605ARTZ-REEL7 ADI芯片 电子元器件
    AD8605ARTZ-REEL7是ADI公司生产的精密运算放大器,具有以下详细参数:带宽:10MHz增益带宽积:20MHz输入偏置电流:1pA输入偏置电压:300μV输入噪声电压:8nV/√Hz输入失调电压:0.5mV输出电流:±20mA工作电压范围:2.7V至5.5V工作温度范围:-40°C至+125°C封装:SOT-23-5AD8605ARTZ......
  • 解决模块 ""element-plus"" 没有导出的成员 "ElMessage"。你是想改用 "import ElMessa
    一、问题介绍在使用vite+element-plus+ts搭建项目时,导入ElMessage组件遇到【模块""element-plus""没有导出的成员"ElMessage"。你是想改用"importElMessagefrom"element-plus""吗?】这一错误提示二、出现原因ts识别不到element-plus对外暴露的ElMessage这一类型三、解......
  • Adafruit CircuitPython NeoPixel All In One
    AdafruitCircuitPythonNeoPixelAllInOneRaspberryPi&Python&WS2812BRGBLEDStripneopixel#installforcurrentuser$pip3installadafruit-circuitpython-neopixel#installsystem-wide$sudopip3installadafruit-circuitpython-neopixe......
  • Delphi Variant 通用类型[5] OLEVariant 的空值判定和释放
    DelphiVariant通用类型[5]OLEVariant的空值判定和释放 1、OLEVariant的空值判定varv:OLEVariant;beginv:='TaoRoy2023';ifVarIsEmpty(v)orVarIsNull(v)thenShowMessage('v为空或null.')elseShowMessage('v不为空或null.');......
  • elastic开机自启动
    创建es的系统启动服务文件,进入到cd/etc/init.d目录;cd/etc/init.d【进入到目录】vielasticsearch【创建es系统启动服务文件】 #!/bin/bash#chkconfig:3456337#description:elasticsearch#processname:elasticsearch-7.0.0exportES_HOME=/usr/local/ela......
  • docker安装elasticsearch
    一、环境CentOSelasticsearch5.6.12二、安装1.镜像拉取dockerpullelasticsearch:5.6.122.启动镜像dockerrun--nameelasticsearch-d-eES_JAVA_OPTS="-Xms256m-Xmx256m"-e"discovery.type=single-node"-p9200:9200-p9300:9300elasticsearch:5.6.12注......
  • Self-Supervised Hypergraph Convolutional Networks for Session-based Recommendati
    目录概符号说明HypergraphLinegraphDHCNHypergraphChannelLineGraphChannelContrastiveLearning优化代码XiaX.,YinH.,YuJ.,WangQ.,CuiLandZhangX.Self-supervisedhypergraphconvolutionalnetworksforsession-basedrecommendation.AAAI,2021.概自监......
  • SeaTunnel V2.3.1源码分析--zeta引擎启动过程分析
    今天主要看SeaTunnel自研的数据同步引擎,叫Zeta。首先,如果使用的是zeta引擎,那么第一步一定是运行bin/seatunnel-cluster.sh脚本,这个脚本就是启动zeta的服务端的。打开seatunnel-cluster.sh看看,可以看到其实是去启动seatunnel-core/seatunnel-starter/src/main/java/org/apache/se......
  • Hazelcast的ManagedService接口类执行顺序
    在Hazelcast中,ManagedService接口中定义的方法的执行顺序如下:init(NodeEnginenodeEngine,Propertiesproperties):此方法在服务初始化时调用,允许你执行一些初始化逻辑或设置。reset():此方法在服务重置时调用,允许你重置或清理服务的状态。partitionLost(intpartitio......
  • SpringBoot Vue3 Element Plus 打造分布式存储系统
    SpringBoot+Vue3+ElementPlus打造分布式存储系统download:3w51xuebccom配置IDEA热部署-devtools开发过程中频繁修改代码,每次都需要重新编译,部署,重启服务器,这无疑极大浪费了我们的时间。解决这个问题的方法就是使用热部署技术。本篇文章将介绍如何在IDEA中使用devtools实现热部署......