• 第八部分: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类定义属性和方法,甚至是静态代码块、内部类等

    1. <%@ page import="java.util.Map" %>
    2. <%@ page import="java.util.HashMap" %>
    3. <%--
    4. Created by IntelliJ IDEA.
    5. User: 22455
    6. Date: 2023/11/19
    7. Time: 12:56
    8. To change this template use File | Settings | File Templates.
    9. --%>
    10. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    11. <span class="hljs-number">01</span>-声明脚本
    12. a.jsp页面
    13. <%--1、声明类属性--%>
    14. <%!
    15. private Integer id;
    16. private String name;
    17. private static Map map;
    18. %>
    19. <%--2、声明static静态代码块--%>
    20. <%!
    21. static {
    22. map = new HashMap();
    23. map.put("key1","value1");
    24. map.put("key2","value2");
    25. map.put("key3","value3");
    26. }
    27. %>
    28. <%--3、声明类方法--%>
    29. <%!
    30. public int abc(){
    31. return 12;
    32. }
    33. %>
    34. <%--4、声明内部类--%>
    35. <%!
    36. public static class A{
    37. private Integer id = 12;
    38. private String abc = "abc";
    39. }
    40. %>
                    ②表达式脚本 (常用)

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

                    特点:

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

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

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

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

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: 22455
    4. Date: 2023/11/19
    5. Time: 13:22
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <span class="hljs-number">02</span>-表达式脚本
    10. <%--
    11. 1、输出整型
    12. 2、输出浮点型
    13. 3、输出字符串
    14. 4、输出对象
    15. --%>
    16. <%=12 %>
    17. <%= 12.12%>
    18. <%= "我是字符串"%>
                    ③代码脚本

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

                    特点:

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

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

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

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

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: 22455
    4. Date: 2023/11/19
    5. Time: 13:22
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. Title
    10. <%--1if语句--%>
    11. <%
    12. int i = 12;
    13. if(i == 12){
    14. System.out.println("小贾真帅!");
    15. }else{
    16. System.out.println("小贾又骗人了!");
    17. }
    18. %>
    19. <%--2for循环--%>
    20. <%
    21. for(int j = 0;j < 10;j++){
    22. System.out.println(j);
    23. }
    24. %>
    25. <%--3、翻译到java文件中_jspService方法内的代码都可以写--%>
    26. <%-- <%--%>
    27. <%-- String username = request.getPart("username");--%>
    28. <%-- System.out.println(username);--%>
    29. <%-- %>--%>
      8.3.3:jsp中的三种注释

                    ①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四大域对象
    四个域对象
    pageContextPageContextImpl类当前jsp页面范围内有效
    requestHttpServletRequest类一次请求内有效
    sessionHttpSession类一次会话范围内有效(会话:打开浏览器访问服务器,直到关闭浏览器)
    applicationServeletContext类整个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动态包含

            格式:

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

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

            特点:

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

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

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

            8.7.3:jsp标签-转发

            格式:

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

            功能:请求转发

     jsp请求转发的使用说明:

            8.7.4:练习:九九乘法表(在网页中输出) 
    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: 22455
    4. Date: 2023/11/19
    5. Time: 14:59
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. 九九乘法表
    10. "center">九九乘法表

    11. "center">
    12. <% for(int i = 1;i <= 9;i++){%>
    13. <% for(int j = 0;j <= i;j++){%>
    14. <% } %>
    15. <% } %>
    16. <%= j + "x" + i + "=" + (i*j)%>

    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中去配置监听器

  • 相关阅读:
    点云滤波--一种点云异常值检测和稳健法线估计方法
    java 基于 SpringMVC+Mybaties+ easyUI 快递公司管理系统 的 设计与实现
    Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)
    Mysql 锁
    基于python+django+php 仓库进销存管理系统
    vue实战中的一些小技巧
    猿创征文 | 使用插槽解决组件内容传递问题(1)
    Vue 两个组件已经渲染完的页面,一个组件数据变更另一个组件也变更
    二叉搜索树
    HarmonyOS 快速入门TypeScript
  • 原文地址:https://blog.csdn.net/weixin_63925896/article/details/134479609