• JSP详解


    一、基本使用方式

    java代码块在<%%>中书写,HTML在<%%>外书写

    二、JSP的执行原理及流程

    • JSP看似是HTML代码,看似是页面,但其实是一种后端技术

    • 当我们第一发送请求访问jsp资源时,Tomcat服务器中的JSP加载引擎会将该JSP资源转换成一个 .java 文件(Servlet)

    • 这个 .java文件其实就是一个Servlet,在这个Servlet中已经将写在JSP中的HTML代码以writer.write()的方式编写好了,然后将数据响应给浏览器的

    • JSP本质上就是一个Servlet,JSP中的HTML代码就相当于我们之前在Servlet中写的writer.write()代码

    (1)执行过程

    转换/翻译(translation):Tomcat中的JSP引擎将JSP网页转换成Servlet,得到一个.java文件

    编译(compile):通过javac命令将.java文件编译成 .class文件

    运行:运行.class字节码文件,处理请求

    (2)结论

    也就是说JSP其实就是一个servlet。

    (3)继承结构

    JSP文件转换成JAVA代码之后,它默认继承了HttpJspBase,实现了JspSourceDependent,和JspSourceImports两个接口,其中HttpJspBase又继承了HttpServlet ,也就是说,JSP本质上就是一个Servlet.

    • HttpJSPBase重写了init,service和destory方法

    • 并且自定义了 jspInit, jspService, jspDestory

    • 然后在重写的init方法中调用了 JSPInit,在重写的service方法中调用了 jspService,在重写的destory方法中调用了 jspDestory

    • 我们JSP的文件编译成JAVA代码后,继承HttpJspBase重写的方法是 jspInit, jspService, jspService

    三、JSP中java代码使用

    (1)两种不同的书写Java代码的方式

    <%--  定义局部变量  --%>
    <%
            int a = 10;
    %>

     <%--  定义成员变量  --%>
     <%!
            int b = 20;
    %>

    <%-- 输出,相当与out.print() --%>

    <%=%>

     (2)注释

       

       

       

        <%--我是jsp注释--%>

    四、JSP中常见的指令标签

    指令描述
    <%@ page %>定义网页依赖属性,如脚本语言、error页面、缓存需求等等
    <%@ include %>包含其他文件
    <%@ taglib %>引入标签库的定义

    (1)page指令标签

    属性描述
    buffer指定out对象使用缓冲区的大小
    autoFlush控制out对象的 缓存区
    contentType指定当前JSP页面的MIME类型和字符编码
    errorPage指定当JSP页面发生异常时需要转向的错误处理页面
    isErrorPage指定当前页面是否可以作为另一个JSP页面的错误处理页
    extends指定servlet从哪一个类继承
    import导入要使用的Java类
    info定义JSP页面的描述信息
    isThreadSafe指定对JSP页面的访问是否为线程安全
    language定义JSP页面所用的脚本语言,默认是Java
    session指定JSP页面是否使用session,默认是使用
    isELIgnored指定是否执行EL表达式
    isScriptingEnabled确定脚本元素能否被使用

    errorPage是一种处理错误提示页的功能。除了jsp的这种错误提示功能外,我们也可以在web.xml中配置各种错误提示页。

    注意:如果jsp中配置的错误页和web.xml中配置的错误页冲突的话,以jsp中指定的errorPage为准,它的优先级更高。


        500
        /error500.jsp


        404
        /error404.jsp

    (2)include指令标签

    • JSP可以通过include指令来包含其他文件。被包含的文件可以是jsp文件、HTML文件或文本文件。

    • 包含的文件就像是jsp文件的一部分,会被同时编译执行。

    • 除了使用include指令标签可以实现引入外,使用jsp:include动作也可以实现引入。

    静态引入: @include 被引入的网页和当前页生成代码后形成了一个java文件

    动态引入: jsp:include 被引入的JSP页面会生成独立的java代码

         <%--
            静态引入,被引入的jsp页面不会单独生成java代码文件,

            当前页和被引入页会生成一个java文件
        --%>
        <%@ include file="hello2.jsp"%>

        <%--
            动态引入:被引入的页面会生成独立的java代码,在当前页生成的java代码中使用
            引入其他页面
        --%>
       

    (3)taglib指令标签

    taglib就是标签库的意思,我们可以在jsp页面中引入其他的标签库,帮我们去快速简单的做一些事情。

    <%@ taglib uri="uri" prefix="prefixOfTag" %>

    五、JSP内置对象

    四个域对象

    pageContext         page域                 当前页面内可用

    request                 reqeust域              一次请求

    session                 session域              一次会话

    application            application域         整个项目运行

    响应对象

    response         响应对象

    输出流对象

    out                   打印流对象

    其他三个对象

    config               由于JSP本身也是一个Servlet,所以容器也会给我们准备一个ServletConfig

    page                就是JSP转换的Servlet的对象,也就是当前JSP对象本身

    exception         异常对象,在错误提示页上使用,当isErrorpage=true 才具有该对象

    六、EL表达式

    (1) 作用

            可以在jsp页面中使用EL表达式来获取域对象中的数据!

    (2)特点

    1. 可以获取作用域对象中的数据

    2. 底层使用的是反射,在使用的时候可以通过键名即可获取对应的值

    3. 简化了在jsp页面中使用<%%>获取域对象数据的方式

    (3)使用方式 

    基本语法

    1. ${键名},键名是域对象中存储的数据的键

    2. ${键名.属性名.属性名…},可以获取域对象中级联属性的值

    3. ${键名[角标]},获取域对象中存储的list集合或者数组中指定角标的数据

    4. 注意:${}不仅可获取域对象中的数据,而且会将该数据打印到浏览器中。如果获取不到数据,也不会报错,只是不显示而已。

    作用域数据查找顺序

    使用EL表达式获取域数据的时候,如果没有指明作用域,那会按照作用域由小到大的顺序去找,直到找到为止: ​ pageContext ---> request ---> session ---> application

    指定获取某个作用域中的数据

    • ${pageScope.键名} 获取page域对象中的数据

    • ${requestScope.键名} 获取request域对象中的数据

    • ${sessionScope.键名} 获取session域对象中的数据

    • ${applicationScope.键名} 获取application域对象中的数据

    获取request对象中的请求数据

    ${param.键名},可以获取request中携带的请求参数的数据

    获取Cookie中的数据

    ${cookie.键名},可以获取request中携带的Cookie的Key Value

    EL表达式可以使用比较运算和算术运算

    ${键名 逻辑运算符 键名} ​

    ${键名 算术运算符 键名}

    注意: + 表示的是算术运算,而不是字符串拼接。

    七、JSTL标签库 

    (1)作用

    可以使用JSTL标签来完成一些例如循环、判断等情况的与数据输出。

    JSTL的作用就是:替换在Jsp中声明的Java逻辑代码。

    (2)使用前提

    JSTL标签库是第三方发明的自定义的标签,每个标签都有自己特定的含义表示一个具体的java逻辑。我们要在JSP中使用JSTL必须使用taglib标签引入第三方的标签库资源。

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

    (3)使用方式

    1. 在项目中导入JSTL的jar包

    2. 在jsp页面中通过taglib指令引入jstl标签库

    3. 使用jstl标签完成开发

    <%--
      等价与增强for循环for(Emp emp : list)
    --%>



      ${emp}
     

    <%--
      等价于if(genter == 0){性别男};
    --%>



      性别男

    <%--
       
    --%>


  • 相关阅读:
    基于单片机+物联网控制的校园空气净化计划系统设计
    MongoDB - 索引知识
    Sentry 是一个开源的错误监控和日志聚合平台-- 通过docker-compose 安装Sentry
    【6】Docker中部署Nginx
    视觉slam学习|基础篇02
    53-C语言-给文件A,B中的内容,写到C文件中,并读取C文件
    Linux学习-38-硬盘分区命令fdisk介绍
    MyBatis进阶版
    使用python往png写入文本 将信息隐藏于图片
    PageRank实战---西游记人物节点重要度
  • 原文地址:https://blog.csdn.net/weixin_53455615/article/details/126885919