• 【JavaWeb从零到一】JSP&EL&JSTL


    ✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。
    🍎个人主页:Hhzzy99
    🍊个人信条:坚持就是胜利!
    💞当前专栏:【JavaWeb】
    🥭本文内容:JSP的深入学习,EL表达式的学习,以及JSP的核心标签JSTL的学习

    🚀【JavaWeb从零到一】系列文章目录

    🚩【JavaWeb从零到一】前置知识
    🚩【JavaWeb从零到一】Mysql基础总结
    🚩【JavaWeb从零到一】JDBC详解
    🚩【JavaWeb从零到一】JDBC连接池&JDBCTemplate
    🚩【JavaWeb从零到一】会话技术Cookie&Session&JSP



    前言

    在我的上一篇文章中我已经大致的将JSP做了讲解,此文章我们将更加深入了解JSP
    上篇文章传送门🚪
    JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
    JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
    JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
    JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。


    一、JSP

    在上一篇文章中我们对JSP做了一个初步的了解,所以此文中我将不再重复之前发布的内容,如果有同学想了解的话可以点击我🚩

    1.JSP中的指令

    JSP指令是用来设置整个JSP页面相关的属性的,如网页的编码方式和脚本语言。

    它语法格式如下:

    <%@ directive attribute=“value” %>

    指令可以有很多个属性,它们以 键值对 的形式存在,并用逗号隔开。

    JSP中的三种指令标签:

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

    page指令

    Page 指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。

    Page指令的语法格式:

    <%@ page attribute=“value” %>

    page指令有如下属性值:

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

    Include指令

    JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行

    Include指令的语法格式如下:

    <%@ include file=“文件相对 url 地址” %>

    include指令中的文件名实际上是一个相对的 URL 地址

    如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。
    top.jsp文件中加入

    这是include头

    ,在body.jsp中测试
    在这里插入图片描述
    测试结果:
    在这里插入图片描述

    Taglib指令

    JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

    Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

    Taglib指令的语法:

    <%@ taglib uri=“uri” prefix=“prefixOfTag” %>

    2.JSP中的注释

    HTML注释:
    :只能注释HTML代码片段
    带有JSP表达式的注释:
    在HTML注释中可以嵌入JSP表达式,注释格式如下:

    包含该注释语句的 JSP 页面被请求后,服务器能够识别注释中的 JSP 表达式,从而来执行该表达式,而对注释中的其他内容不做任何操作。
    当服务器将执行结果返回给客户端后,客户端浏览器会识别该注释语句,所以被注释的内容不会显示在浏览器中。
    <%String name="XYQ";%>

    欢迎登录:<%=name%>

    访问该页面后,将会在客户端浏览器中输出以下内容:

    欢迎登录:XYQ

    通过查看HTML源代码,看到如下内容:

    
    <table><tr><td>欢迎登录:XYQtd>tr>table>
    
    • 1
    • 2

    隐藏注释:
    <%--注释内容--%>

    3.JSP中的内置对象

    在JSP页面中不需要创建,直接使用的对象

    对象真实类型说明
    requestjavax.servlet.http.HttpServletRequest获取用户请求信息
    responsejavax.servlet.http.HttpServletResponse响应客户端请求,并将处理信息返回到客户端
    outjavax.servlet.jsp.JspWriter输出内容到 HTML 中
    sessionjavax.servlet.http.HttpSession用来保存用户信息
    applicationjavax.servlet.ServletContext所有用户共享信息
    configjavax.servlet.ServletConfig这是一个 Servlet 配置对象,用于 Servlet 和页面的初始化参数
    pageContextjavax.servlet.jsp.PageContextJSP 的页面容器,用于访问 page、request、application 和 session 等的属性
    pagejavax.servlet.jsp.HttpJspPage类似于 Java 类的 this 关键字,表示当前 JSP 页面
    exceptionjava.lang.Throwable该对象用于处理 JSP 文件执行时发生的错误和异常;只有在 JSP 页面的 page 指令中指定 isErrorPage 的取值 true 时,才可以在本页面使用 exception 对象。

    二、MVC开发模式

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

    • M:Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。通俗来讲就是用来完成具体的业务操作,如:查询数据库,封装对象。
    • V:View(视图) - 视图代表模型包含的数据的可视化。展示数据。
    • C:Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。通俗来说就是获取用户的输入,调用模型,将数据交给视图进行展示。
      MVC
      实现
      实现
      优点
      耦合性低,方便维护,可以利用于工协作、重用性高、生命周期成本低、部署快、可维护性高
      缺点
      使得项目架构变得复杂,对开发人员要求高

    EL表达式

    前面的 JSP 页面中,我们经常使用 JSP 表达式来输出变量或者页面之间传递的参数,大大降低了页面的可读性。
    为了简化 JSP 页面,JSP 2.0 新增了 EL(Expression Language)表达式语言。EL 提供了更为简洁、方便的形式来访问变量和参数,不仅可以简化 JSP 页面代码,还会使开发者的逻辑变得更加清晰 。
    EL 表达式语法如下:
    ${EL表达式}
    EL 表达式语法以${开头,以}结束,中间为合法的表达式
    示例
    ${param.name} 表示获取参数 name 的值,它等同于

    <%=request.getParameter(‘name’) %>

    EL算术表达式

    算术运算符用来进行加、减、乘、除和求余,EL 表达式算术运算符如下:

    EL算术运算符说明范例结果
    +${5+2}7
    -${5-2}3
    *${5*2}10
    / 或 div${5/2}2
    % 或 mod求余${5%2}1

    注意:EL 的+运算符与 Java 的+运算符不一样,它无法实现两个字符串的连接运算。如果该运算符连接的两个值不能转换为数值型的字符串,则会拋出异常;反之,EL 会自动将这两个字符转换为数值型数据,再进行运算。

    EL比较运算符

    比较运算符用来实现两个表达式的比较,进行比较的表达式可以是数值型或字符串。EL 表达式比较运算符如下:

    EL比较运算符说明范例结果
    == 或 eq等于${6==6} 或 ${6 eq 6} ${“A”=“a”} 或 ${“A” eq “a”}true false
    != 或 ne不等于${6!=6} 或 ${6 ne 6} ${“A"!=“a”} 或 ${“A” ne “a”}false true
    < 或 lt小于${3<8} 或 ${3 lt 8} ${“A”<“a”} 或 ${“A” lt “a”}true true
    > 或 gt大于${3>8} 或 ${3 gt 8} ${“A”>“a”} 或 ${“A” gt “a”}false false
    <= 或 le小于等于${3<=8} 或 ${3 le 8} ${“A”<=“a”} 或 ${“A” le “a”}true true
    >= 或 ge大于等于${3>=8} 或 ${3 ge 8} ${“A”>=“a”} 或 ${“A” ge “a”}false false

    EL逻辑运算符

    逻辑运算符两边的表达式必须是布尔型(Boolean)变量,其返回结果也是布尔型(Boolean)。EL 表达式逻辑运算符如下:

    EL逻辑运算符说明范例结果
    && 或 and${2>1&&3<4 }${2>1and3<4 }true
    || 或 or${2<1||3>4}${2<1or3>4}false
    ! 或 not${!(2>4)}${not (2>4)}true

    EL其它运算符

    .[ ]
    .[ ]是 EL 中最常用的运算符,用来访问 JavaBean 中的属性隐式对象的数据。一般情况下,.用来访问 JavaBean 属性或 Map 类型的值,[ ]用来访问数组或者列表的元素。
    empty
    empty 用来判断 EL 表达式中的对象或者变量是否为空。若为或者 null,返回 true,否则返回 false。
    条件运算符
    EL 表达式中,条件运算符的语法和 Java 的完全一致,如下:

    ${条件表达式?表达式1:表达式2}

    其中,条件表达式用于指定一个判定条件,该表达式的结果为 boolean 类型。如果该表达式的运算结果为 true,则返回表达式 1 的值;反之,返回表达式 2 的值。

    注意:
    jsp默认支持EL表达式,如果要忽略EL表达式则:

    • 设置jsp中page指令中的:isELIgnored="true"忽略当前jsp页面中所有的EL表达式
    • \${表达式}:忽略当前这个EL表达式

    EL表达式获取值

    EL表达式只能从域对象中获取值
    语法:

    • ${域名称.键名}:从指定域中获取指定键的值
    • pageScopepageContext
    • requestrequest
    • sessionScopesession
    • applicationScopeapplication(ServletContext)

    举例:
    在request域中存储name=张三,在session域中存储age=23
    获取语法:

    ${requestScope.name}
    ${sessionScope.age}
    ${sessionScope.haha}//没有的值在页面中只会显示空字符串。

    • 还有一种${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
      在这里插入图片描述
      在这里插入图片描述
    • 获取对象、List集合、Map集合的值
      对象:
      创建一个user,里面有name,age,birthday
      获取对象:

    ${requestScope.user}

    通过对象的属性获取值

    ${requestScope.user.name}
    ${user.age}
    ${user.birthday}

    List集合:
    ${域名称.键名[索引]}
    如果角标越界了,页面只会显示空字符
    Map集合:

    ${域名称.键名.Key名称}
    ${域名称.键名[“Key名称”]}

    JSTL

    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
    JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
    使用任何库,你必须在每个 JSP 文件中的头部包含 标签。
    JSTL作用
    用于简化和替换JSP页面上的java代码
    1.导入jstl相关的jar包点我去下载🚩
    2.引入标签库:taglib指令:

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

    3.使用标签
    常见的JSTL标签

    标签描述
    c:out用于在JSP中显示数据,就像<%= … >
    c:set用于保存数据
    c:remove用于删除数据
    c:catch用来处理产生错误的异常状况,并且将错误信息储存起来
    c:if与我们在一般程序中用的if一样
    c:choose本身只当做的父标签
    c:when的子标签,用来判断条件是否成立
    c:otherwise的子标签,接在标签后,当标签判断为false时被执行
    c:import检索一个绝对或相对 URL,然后将其内容暴露给页面
    c:forEach基础迭代标签,接受多种集合类型
    c:forTokens根据指定的分隔符来分隔内容并迭代输出
    c:param用来给包含或重定向的页面传递参数
    c:redirect重定向至一个新的URL.
    c:url使用可选的查询参数来创造一个URL

    三层架构

    是一种软件设计架构:
    Web(表现层): 主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。
    Service:(业务逻辑层) : Web层和Dao层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。
    Dao:(数据访问层): 与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些操作都是基于Web层的。用户的需求反映给界面(Web),Web反映给Service,Service反映给Dao,Dao进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)
    图示:
    在这里插入图片描述
    后期我们会学习的SpringMVC框架,它会简化Servlet的代码编写,MyBatis框架,简化我们对数据库的访问操作,Spring框架,简化我们业务逻辑层代码的编写


    结语

    以上就是今天要讲的内容,本文中讲解到了JavaWeb开发的JSP、EL、JSTL以及三层架构技术,为接下来JavaWeb更深入的学习做铺垫。
    谢谢大家的支持喔💕!

  • 相关阅读:
    Python对于时间相关模块的学习记录(time,datetime等模块)
    Java实现HTTP的上传与下载
    k8s CRD相关
    flowable工作流所有业务概念
    matplotlib详细教学
    (经典dp) hdu 递推求解专题练习
    jemalloc 库的编译(Linux 下面)
    shiny根据数据的长度设置多个色板
    Cobalt Strike基本使用
    如何判断去噪之后的变压器局部放电是内部还是外部信号
  • 原文地址:https://blog.csdn.net/XUHUANGHOST/article/details/128002252