✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。
个人主页:Hhzzy99
个人信条:坚持就是胜利!
当前专栏:【JavaWeb】
本文内容:JSP的深入学习,EL表达式的学习,以及JSP的核心标签JSTL的学习
【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指令
是用来设置整个JSP页面相关的属性的,如网页的编码方式和脚本语言。
它语法格式如下:
<%@ directive attribute=“value” %>
指令
可以有很多个属性,它们以 键值对
的形式存在,并用逗号隔开。
JSP中的三种指令标签:
指令 | 描述 |
---|---|
<%@ page … %> | 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等 |
<%@ include … %> | 包含其他文件 |
<%@ taglib … %> | 引入标签库的定义 |
Page
指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
Page
指令的语法格式:
<%@ page attribute=“value” %>
属性 | 描述 |
---|---|
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 |
确定脚本元素能否被使用 |
JSP可以通过include
指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。
<%@ include file=“文件相对 url 地址” %>
include
指令中的文件名实际上是一个相对的 URL 地址。
如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。
top.jsp文件中加入
,在body.jsp中测试这是include头
测试结果:
JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
<%@ taglib uri=“uri” prefix=“prefixOfTag” %>
HTML注释:
:只能注释HTML代码片段
带有JSP表达式的注释:
在HTML注释中可以嵌入JSP表达式,注释格式如下:
包含该注释语句的 JSP 页面被请求后,服务器能够识别注释中的 JSP 表达式,从而来执行该表达式,而对注释中的其他内容不做任何操作。
当服务器将执行结果返回给客户端后,客户端浏览器会识别该注释语句,所以被注释的内容不会显示在浏览器中。
<%String name="XYQ";%>
欢迎登录:<%=name%>
访问该页面后,将会在客户端浏览器中输出以下内容:
欢迎登录:XYQ
通过查看HTML源代码,看到如下内容:
<table><tr><td>欢迎登录:XYQtd>tr>table>
隐藏注释:
<%--注释内容--%>
在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 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
前面的 JSP 页面中,我们经常使用 JSP 表达式
来输出变量或者页面之间传递的参数,大大降低了页面的可读性。
为了简化 JSP 页面,JSP 2.0 新增了 EL
(Expression Language)表达式语言。EL 提供了更为简洁、方便的形式来访问变量和参数,不仅可以简化 JSP 页面代码,还会使开发者的逻辑变得更加清晰 。
EL 表达式语法如下:
${EL表达式}
EL 表达式语法以${
开头,以}
结束,中间为合法的表达式。
示例
${param.name}
表示获取参数 name 的值,它等同于
<%=request.getParameter(‘name’) %>
算术运算符用来进行加、减、乘、除和求余,EL 表达式算术运算符如下:
EL算术运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
+ | 加 | ${5+2} | 7 |
- | 减 | ${5-2} | 3 |
* | 乘 | ${5*2} | 10 |
/ 或 div | 除 | ${5/2} | 2 |
% 或 mod | 求余 | ${5%2} | 1 |
注意:EL 的+
运算符与 Java 的+
运算符不一样,它无法实现两个字符串的连接运算。如果该运算符连接的两个值不能转换为数值型的字符串,则会拋出异常;反之,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 |
逻辑运算符两边的表达式必须是布尔型(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 中最常用的运算符,用来访问 JavaBean
中的属性和隐式对象的数据。一般情况下,.
用来访问 JavaBean 属性或 Map 类型的值,[ ]
用来访问数组或者列表的元素。
empty
empty
用来判断 EL 表达式中的对象或者变量是否为空。若为空或者 null,返回 true,否则返回 false。
条件运算符
EL 表达式中,条件运算符的语法和 Java 的完全一致,如下:
${条件表达式?表达式1:表达式2}
其中,条件表达式用于指定一个判定条件,该表达式的结果为 boolean 类型。如果该表达式的运算结果为 true,则返回表达式 1 的值;反之,返回表达式 2 的值。
注意:
jsp默认支持EL表达式,如果要忽略EL表达式则:
isELIgnored="true"
忽略当前jsp页面中所有的EL表达式\${表达式}
:忽略当前这个EL表达式EL表达式只能从域对象中获取值
语法:
${域名称.键名}
:从指定域中获取指定键的值
pageScope
⇒pageContext
request
⇒request
sessionScope
⇒session
applicationScope
⇒application(ServletContext)
举例:
在request域中存储name=张三,在session域中存储age=23
获取语法:
${requestScope.name}
${sessionScope.age}
${sessionScope.haha}//没有的值在页面中只会显示空字符串。
${requestScope.user}
通过对象的属性获取值
${requestScope.user.name}
${user.age}
${user.birthday}
List集合:
${域名称.键名[索引]}
如果角标越界了,页面只会显示空字符
Map集合:
${域名称.键名.Key名称}
${域名称.键名[“Key名称”]}
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 | |
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更深入的学习做铺垫。
谢谢大家的支持喔!