一、引言
JSP介绍
1、JSP (JavaServer Pages)是一种将 Java 代码嵌入到 HTML 页面中的技术,它允许开发人员在网页中嵌入动态生成的内容。
2、JSP 页面中可以包含 Java 代码块、表达式和声明,这些代码会在服务器端执行,并生成动态的 HTML 内容,然后发送给客户端浏览器。
补充:Servlet 通常用于处理业务逻辑、数据处理和与数据库交互等任务。Servlet 接收来自客户端的请求,根据请求的内容进行相应的处理,然后生成响应并发送回客户端。
JSP和Servlet的关系
JSP和Servlet 是 Java Web 开发中的两个关键技术,Servlet 接收请求并调用适当的业务逻辑,然后将处理结果传递给 JSP,JSP 使用 Java 代码和标签来生成最终的 HTML 响应。
通常的开发模式是:
业务逻辑和数据处理等复杂的任务 ——> Servlet
展示和页面渲染的任务 ——> JSP
Servlet 负责处理请求和响应的底层逻辑,而 JSP 则负责展示和呈现数据,使得开发人员可以更容易地分离前端和后端的职责,并实现更高效的 Web 应用程序开发。
JSP和其他语言区别
-
JSP vs. HTML:
- JSP 是一种动态网页技术,允许在 HTML 页面中嵌入 Java 代码,以便生成动态内容。JSP 页面可以包含 Java 代码块、表达式和声明,用于处理业务逻辑和动态数据。
- HTML 是一种静态标记语言,用于定义网页的结构和内容。它主要用于静态网页的呈现,不具备动态生成内容的能力。
-
JSP vs. Servlet:
- JSP 是基于 Servlet 的技术,它通过将 Java 代码嵌入到 HTML 页面中,以一种更易读和易于维护的方式实现了动态网页的生成。JSP 最终会被编译为 Servlet,然后在服务器端执行。
- Servlet 是一种 Java 程序,用于接收客户端请求、处理业务逻辑和生成响应。Servlet 通过编程方式处理请求和响应,具备更高的灵活性和控制力,适用于处理复杂的业务逻辑和数据操作。
-
JSP/Servlet vs. HTML/CSS/JavaScript:
- JSP 和 Servlet :服务器端的动态处理和业务逻辑实现能力,适用于处理用户请求、数据处理和生成动态内容。
- HTML、CSS 和 JavaScript :客户端浏览器中执行,用于实现用户界面和交互效果。(前端技术,用于定义和呈现网页的结构、样式和交互)
二、JSP基本语法
1、JSP注释
显示注释:客户端点击显示源码后能看到的注释
<!-- 这是一个 HTML (显式)注释 -->
隐式注释:客户端点击显示源码后看不到的注释,其中Java注释是在Java段中才有效
1、JSP自己的注释: <%-- 这是一个 JSP (隐式)注释 --%>
2、继承Java风格的注释://这是一个Java单行注释
/*这是一个Java多行注释*/
2、Scriptlet
嵌入的HTML代码中的脚本小程序,可以写Java代码(不建议)
第一种:<% //可以写Java代码,定义局部变量、编写语句等 %>
生成的代码在Servlet中的service方法体中
第二种:<%! 声明全局变量、方法、类等 %>
生成的代码在Servlet的类体中
第三种:<%=数值%> 可以输出表达式
生成的代码在Servlet中的service方法体中,相当于out.printf()
3、JSP指令标签
一种将页面中重复的部分提取出来的技术
静态包含
<%@include file="文件地址"%>
内容直接替换,源码只有一个文件,所以两个文件不能有同名的变量
动态包含
<jsp:include page="文件地址"></jsp:include>
运行的时候才动态包含进来,相当于调用方法,生成多个源码文件
当不传递参数时,两个标签直接不要有任何内容(包括空格)
要传参数,中间加上:
<jsp:param name="xxx" value="xxx"/>
4、jsp中的跳转
服务端跳转:
<jsp:forward page="xxx"></jsp:forward>
客户端跳转:
<a href="xxx"></a>
5、
三、JSP中四大域对象
-
page 域(Page Scope):
- 属性范围:只在当前页面有效。
- 存储位置:存储在
pageContext
对象中。 - 访问方式:可以直接在当前页面的任何位置使用。
-
request 域(Request Scope):
- 属性范围:在同一个请求处理过程中有效,包括转发请求。
- 存储位置:存储在
request
对象中。 - 访问方式:可以在同一请求的不同页面、Servlet 或 JSP 中使用。
-
session 域(Session Scope):
- 属性范围:在用户会话期间有效,跨越多个请求和页面。
- 存储位置:存储在
session
对象中。 - 访问方式:可以在同一用户的不同请求和页面中使用。
-
application 域(Application Scope):
- 属性范围:在整个应用程序的生命周期中有效,跨越多个会话。
- 存储位置:存储在
ServletContext
对象中。 - 访问方式:可以在整个应用程序的不同请求和页面中使用。
四、EL表达式
EL(Expression Language)是一种用于在JSP中简化表达式的语言。EL表达式提供了一种简洁的方式来访问和操作JavaBean的属性、调用方法、访问集合和映射等,而不需要繁琐的使用request.getAttribute("xxx")。下面是一些常用的EL表达式语法:
-
访问JavaBean属性:
${user.name}
:访问User对象的name属性值。${user.getName()}
:调用User对象的getName()方法。
-
数组和列表访问:
${array[0]}
:访问数组array的第一个元素。${list[2]}
:访问列表list的第三个元素。
-
Map访问:
${map.key}
:访问Map中名为"key"的键对应的值。
-
空值检查:
${empty variable}
:检查变量是否为空,例如${empty user}
。
-
算术和逻辑运算:
${2 + 3}
:执行加法运算,结果为5。${user.age > 18}
:检查User对象的age属性是否大于18。
-
条件语句:
${user.age > 18 ? "成年人" : "未成年人"}
:根据User对象的age属性值选择不同的文本。
-
迭代和循环:
${for(item : userList)}
:迭代名为userList的集合中的每个元素。${while(count < 10)}
:执行循环,直到count变量的值小于10为止。
-
EL函数:
${fn:length(string)}
:调用内置函数,计算字符串的长度。例如${fn:length(user.name)}
。
这些只是EL表达式的一些常见用法示例,EL还提供了更多的功能和语法,如运算符、内置函数、隐式对象等。EL表达式的具体语法和用法可以参考相关的文档和教程。
五、JSTL
在以下页面下载对应的版本,把lib目录中的两个文件拷贝到IDEA项目中web/WEB-INF目录下的lib中去(没有则新建)
Index of /dist/jakarta/taglibs/standard/binaries (apache.org)
在JSP中使用JSTL必须要使用<%@taglib uri="Oracle Java Technologies | OracleOracle Java Technologies | Oracle" prefix="c" %>
<c:if></c:if>
test:条件判断,操作的是域对象,返回Boolean类型的值(必需)
var:限域变量名(存放在作用域中的变量名),用来接收判断结果
scope:指定var在什么域内有效(page、request等)
if标签 ——> 没有else
choose、when、otherwise
1. choose、otherwise没有属性,when有test属性(必须)
2. choose中只能由when、otherwise标签,不能出现if标签;而when、otherwise可以嵌套其他标签
3. 结构可以类比Switch-Case