JSP的page指令+九大内置对象+El表达式
  TEZNKK3IfmPf 2023年11月13日 14 0

  - 指令的作用:指导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表达式

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 "jack@126.com";
    }
}

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}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   16天前   37   0   0 java
  TEZNKK3IfmPf   30天前   46   0   0 java
TEZNKK3IfmPf