【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&EL&JSTL

  • 【JavaWeb从零到一】系列文章目录
  • 前言
  • 一、JSP
    • 1.JSP中的指令
      • page指令
      • page指令有如下属性值:
      • Include指令
      • Include指令的语法格式如下:
      • Taglib指令
      • Taglib指令的语法:
    • 2.JSP中的注释
    • 3.JSP中的内置对象
  • 二、MVC开发模式
  • EL表达式
    • EL算术表达式
    • EL比较运算符
    • EL逻辑运算符
    • EL其它运算符
    • EL表达式获取值
  • JSTL
  • 三层架构
  • 结语


前言

在我的上一篇文章中我已经大致的将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中测试
【JavaWeb从零到一】JSP&EL&JSTL_第1张图片
测试结果:
【JavaWeb从零到一】JSP&EL&JSTL_第2张图片

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>

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

3.JSP中的内置对象

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

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

二、MVC开发模式

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

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

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}//没有的值在页面中只会显示空字符串。

  • 还有一种${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
    【JavaWeb从零到一】JSP&EL&JSTL_第5张图片
    在这里插入图片描述
  • 获取对象、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进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)
图示:
【JavaWeb从零到一】JSP&EL&JSTL_第6张图片
后期我们会学习的SpringMVC框架,它会简化Servlet的代码编写,MyBatis框架,简化我们对数据库的访问操作,Spring框架,简化我们业务逻辑层代码的编写


结语

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

你可能感兴趣的:(【JavaWeb】,java,servlet,开发语言)