第八部分:JSP

目录

JSP概述

8.1:什么是JSP,它有什么作用?

8.2:JSP的本质是什么?

8.3:JSP的三种语法

8.3.1:jsp头部的page指令

8.3.2:jsp中的常用脚本

①声明脚本(极少使用)

[②表达式脚本 (常用)](#②表达式脚本 (常用))

③代码脚本

8.3.3:jsp中的三种注释

8.4:JSP的九大内置对象

8.5:JSP四大域对象

8.6:JSP中的out输出和response.getWriter输出的区别

8.7:JSP的常用标签

8.7.1:jsp静态包含

8.7.2:jsp动态包含

8.7.3:jsp标签-转发

8.7.4:练习:九九乘法表(在网页中输出)

8.8:Listener监听器

8.8.1:ServletContentListener监听器


JSP概述

8.1:什么是JSP,它有什么作用?

jsp的全称是Java Server pages,是Java的服务器页面

jsp的主要作用是替代Servlet程序回传html页面的数据

因为Servelet程序回传html页面数据是一件非常繁琐的事情,开发成本和维护成本都极高

8.2:JSP的本质是什么?

本质:是一个Servlet程序

当我们第一次访问jsp页面的时候,Tomcat服务器会帮我们把jsp页面翻译成为一个Java源文件,并且对它进行编译,称为.class字节码程序


8.3:JSP的三种语法
8.3.1:jsp头部的page指令

jsp的page指令可以修改jsp页面中一些重要的属性或者行为

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

①language属性:表示jsp翻译后是什么语言文件。暂时只支持java

②contentType属性:表示jsp返回的数据类型是什么。也是源码中response.setContentType()参数值

③pageEncoding属性:表示当前jsp页面文件本身的字符集

④import属性:与java源代码中的一样,用于导包、导类


以下两个属性给out输出流使用

⑤autoFlush属性:设置当out输出流缓冲区满了之后,是否自动刷新缓冲区。默认值是true

⑥buffer属性:设置out缓冲区的大小。默认是8kb


⑦errorPage属性:设置当jsp页面运行时出错,自动跳转去的错误页面路径

errorPage表示错误后自动跳转去的路径

这个路径一般都是以"/"打头,它表示请求地址为http://ip:port/工程路径/

映射到代码的web目录

⑧isErrorPage属性:设置当前jsp页面是否是错误信息页面。默认是false。如果是true则可以获取异常信息

⑨session属性:设置当前jsp页面,是否会创建HttpSession对象。默认是true

⑩extends属性 :设置jsp翻译出来的java类默认继承谁

8.3.2:jsp中的常用脚本
①声明脚本(极少使用)

作用:可以给jsp翻译出来的java类定义属性和方法,甚至是静态代码块、内部类等

java 复制代码
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%--
  Created by IntelliJ IDEA.
  User: 22455
  Date: 2023/11/19
  Time: 12:56
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>01-声明脚本</title>
</head>
<body>
    a.jsp页面
<%--1、声明类属性--%>
    <%!
        private Integer id;
        private String name;
        private static Map<String,Object> map;
    %>

<%--2、声明static静态代码块--%>
    <%!
        static {
            map = new HashMap<String,Object>();
            map.put("key1","value1");
            map.put("key2","value2");
            map.put("key3","value3");
        }
    %>

<%--3、声明类方法--%>
    <%!
        public int abc(){
            return 12;
        }
    %>

<%--4、声明内部类--%>
    <%!
        public static class A{
            private Integer id = 12;
            private String abc = "abc";
        }
    %>
</body>
</html>
②表达式脚本 (常用)

作用:在jsp页面上输出数据

特点:

a、所有的表达式脚本都会被翻译到_jspService()方法中

b、表达式脚本都会被翻译成为out.print(),输出到页面上

c、由于表达式脚本翻译的内容都在_jspService()方法中,所以_jspService()方法中的对象都可以直接使用

d、表达式脚本中的表达式不可以以分号结束

java 复制代码
<%--
  Created by IntelliJ IDEA.
  User: 22455
  Date: 2023/11/19
  Time: 13:22
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>02-表达式脚本</title>
</head>
<body>
<%--
1、输出整型
2、输出浮点型
3、输出字符串
4、输出对象
--%>
    <%=12 %>
    <%= 12.12%>
    <%= "我是字符串"%>
</body>
</html>
③代码脚本

作用:可以在jsp页面中编写我们自己需要的功能(写的是java语句)

特点:

a、代码脚本翻译的代码都在_jspService()方法中

b、代码脚本由于翻译的_jspService()方法中,所以在_jspService()方法中的现有对象都可以使用

c、可以由多个代码脚本块组合完成一个完整的java语句

d、代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据

java 复制代码
<%--
  Created by IntelliJ IDEA.
  User: 22455
  Date: 2023/11/19
  Time: 13:22
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--1、if语句--%>
    <%
        int i = 12;
        if(i == 12){
            System.out.println("小贾真帅!");
        }else{
            System.out.println("小贾又骗人了!");
        }
    %>
</body>

<%--2、for循环--%>
    <%
        for(int j = 0;j < 10;j++){
            System.out.println(j);
        }
    %>

<%--3、翻译到java文件中_jspService方法内的代码都可以写--%>
<%--    <%--%>
<%--        String username = request.getPart("username");--%>
<%--        System.out.println(username);--%>
<%--    %>--%>
</html>
8.3.3:jsp中的三种注释

①html注释:<!--这是html注释-->

html注释会被翻译到java源代码中,在_jspService()方法里,以out.write输出到客户端

②Java注释://、/**/、/** */

java注释会被翻译到java源代码中

③jsp注释:<%----%>

jsp注释可以注掉jsp页面中的所有代码


8.4:JSP的九大内置对象

jsp中的内置对象,是指Tomcat在翻译jsp页面成为Servlet源代码后,内部提供的九大对象,叫内置对象

jsp提供了由容器实现和管理的内置对象,也可以称之为隐含对象,这些内置对象不需要通过jsp页面编写来实例化,在所有的jsp页面中都可以直接使用,它起到了简化页面的作用


8.5:JSP四大域对象

|-------------|---------------------|----------------------------------|
| pageContext | PageContextImpl类 | 当前jsp页面范围内有效 |
| request | HttpServletRequest类 | 一次请求内有效 |
| session | HttpSession类 | 一次会话范围内有效(会话:打开浏览器访问服务器,直到关闭浏览器) |
| application | ServeletContext类 | 整个web工程范围内有效(只要web工程不停止,数据都在) |
[四个域对象]

域对象是可以像Map一样存取数据的对象;四个域对象的功能一样,但它们对数据的存取范围不一样

虽然四个域对象都可以存取数据,但在使用上它们是有优先顺序的

优先顺序:

pageContext > request > session > application


8.6:JSP中的out输出和response.getWriter输出的区别

response表示响应,我们经常用于设置返回给客户端的内容(输出)

out也是给用户做输出用的


由于jsp翻译以后,底层源代码都是使用out来进行输出,所以一般情况下,我们在jsp页面中统一使用out来进行输出,避免打乱页面输出内容的顺序

out.write():输出字符串没有问题

out.print():输出任意数据没有都没有问题(都转换成为字符串后调用的write输出)

深入源码,浅出结论:在jsp页面中,可以统一使用out.print()来进行输出

8.7:JSP的常用标签
8.7.1:jsp静态包含

格式: <%@ include file="" %>

file属性指定你要包含的jsp页面的路径

特点:

①静态包含不会翻译被包含的jsp页面

②静态包含其实就是把被包含的jsp页面的代码拷贝到包含的位置执行输出

8.7.2:jsp动态包含

格式:<jsp:include page=""></jsp:include>

page属性是指定你要包含的jsp页面的路径

动态包含也可以像静态包含一样,把被包含的内容执行输出到包含位置

特点:

①动态包含会把包含的jsp页面翻译成java代码

②动态包含底层原理如下:

③动态包含,还可以传递参数

8.7.3:jsp标签-转发

格式:<jsp:forward page=""></jsp:forward>

page属性设置请求转发的路径

功能:请求转发

jsp请求转发的使用说明:

8.7.4:练习:九九乘法表(在网页中输出)
java 复制代码
<%--
  Created by IntelliJ IDEA.
  User: 22455
  Date: 2023/11/19
  Time: 14:59
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>九九乘法表</title>
    <style type="text/css">
        table{
            width: 650px;
        }
    </style>
</head>
<body>
    <h1 align="center">九九乘法表</h1>
    <table align="center">
        <% for(int i = 1;i <= 9;i++){%>
            <tr>
                <% for(int j = 0;j <= i;j++){%>
                    <td><%= j + "x" + i + "=" + (i*j)%></td>
                <% } %>
            </tr>
        <% } %>
    </table>
</body>
</html>

output:

8.8:Listener监听器

Listener监听器是JavaWeb的三大组件之一

JavaWeb的三大组件分别是:Servlet程序、Filter过滤器、Listener监听器

Listener是javaEE的规范,就是接口

监听器的作用:监听某种事物的变化,然后通过回调函数,反馈给用户(程序)去做一些相应的处理

8.8.1:ServletContentListener监听器

ServletContextListener可以监听ServletContext对象的创建和销毁

ServletContext对象在web工程启动的时候创建,在web工程停止时销毁

监听到创建和销毁后都会分别调用ServletContextListener监听器的方法反馈

两个方法分别是:

复制代码
public interface ServletContextListener extends EventListener {
    default void contextInitialized(ServletContextEvent sce) {
        //在ServletContext对象创建之后马上调用,做初始化
    }

    default void contextDestroyed(ServletContextEvent sce) {
        //在ServeletContext对象销毁之后调用
    }
}

如何使用ServletContextListener监听器监听ServletContext对象?

使用步骤如下:

1、编写一个类去实现ServeletContextListener

2、实现其两个回调方法

3、到web.xml中去配置监听器

相关推荐
m0_748238274 分钟前
项目升级Sass版本或升级Element Plus版本遇到的问题
前端·rust·sass
刘什么洋啊Zz10 分钟前
剖析IO原理和零拷贝机制
java·运维·网络
卷心菜好6啊18 分钟前
特辣的海藻!2
java
心态与习惯20 分钟前
mac 下 java 调用 gurobi 不能加载 jar
java·jar·mac·cplex·gurobi
he2581921 分钟前
centOS 7.9 安装JDK MYSQL
java·mysql·centos
找了一圈尾巴33 分钟前
Spring Boot 日志管理(官网文档解读)
java·spring boot
升讯威在线客服系统33 分钟前
如何通过 Docker 在没有域名的情况下快速上线客服系统
java·运维·前端·python·docker·容器·.net
AsBefore麦小兜35 分钟前
Vite vs Webpack
前端·webpack
LaughingZhu36 分钟前
PH热榜 | 2025-02-23
前端·人工智能·经验分享·搜索引擎·产品运营
s:1032 小时前
【框架】参考 Spring Security 安全框架设计出,轻量化高可扩展的身份认证与授权架构
java·开发语言