1. jsp: java server page
-
- jsp: java server page
-
- JSP的由来:
-
- JSP元素包括:
-
- JSP内置对象
-
- 问题:为什么第一次访问某个jsp资源,速度比较慢?
-
- EL 表达式
-
- 自定义标签库
JSP(Java Server Pages)是一种用于创建动态Web页面的Java技术。它允许开发人员将Java代码嵌入到HTML页面中,从而动态生成内容,而不必编写大量的Java代码。JSP具有易于学习和使用、易于维护、高度可定制化、安全可靠等优点,因此被广泛用于Web开发领域。
2. JSP的由来:
早期的Web开发主要采用CGI(Common Gateway Interface)技术,这种技术需要将请求发送给服务器,服务器执行程序并返回结果。由于CGI技术的效率较低,而JSP技术可以通过将动态内容嵌入HTML页面来避免重复生成页面,因此JSP技术应运而生。
- 在java代码中,编写html非常困难!易错!引号!
因为需要把html的内容,一句一句地,调用writer.println()方法,放到参数中!
最后输出给浏览器,浏览器解析Html的字符串,渲染得到页面!- 思路是,如果结果中,大部分都是Html,只有少量的java代码,按照java代码中输出html的方式很困难。
- jsp的设计思路:“与其在java中写html,不如在html中写java”.
- 延伸出jsp的解析的语法规则。jsp元素
- tomcat,根据jsp的语法规则,把jsp“翻译”成java,再进行编译成“servlet”,再调用service方法!
3. JSP元素包括:
- 指令(Directive):指令用于设置页面属性,如引入其他页面、设置页面语言等。指令以“<%@”开头,“%>”结束,如下所示:
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
- 脚本(Scriptlet):脚本是JSP中嵌入的Java代码块,用于动态生成HTML页面。脚本以“<%”开头,“%>”结束,如下所示:
<% for (int i = 0; i < 10; i++) { %>
<p>Hello World</p>
<% } %>
- 表达式(Expression):表达式用于在HTML页面中嵌入Java表达式的结果。表达式以“<%=”开头,“%>”结束,如下所示:
<p>当前时间是:<%= new java.util.Date() %></p>
- 声明(Declaration):声明用于定义Java方法和变量。声明以“<%!”开头,“%>”结束,如下所示:
<%!
public void sayHello() {
System.out.println("Hello World");
}
%>
- 注释(Comment):注释用于在JSP页面中添加注释信息,不会在页面中显示。注释以“<%–”开头,“–%>”结束,如下所示:
<%-- 这是一个注释 --%>
4. JSP内置对象
-
request:用于表示HTTP请求对象,包括请求的头部、请求参数等信息。
-
response:用于表示HTTP响应对象,包括响应头、响应状态等信息。
-
session:用于表示HTTP会话对象,可以存储和检索与会话相关的信息。
-
application:用于表示Servlet上下文对象,可以在整个Web应用程序范围内存储和检索信息。
-
out:用于向客户端发送输出,常用于输出HTML代码或动态生成的内容。
-
pageContext:用于表示JSP页面上下文对象,可以访问其他内置对象。
-
config:用于表示Servlet配置对象,包括Servlet初始化参数等信息。
-
exception:用于表示Servlet异常对象,可以访问异常信息和栈轨迹等信息。
除了上述内置对象外,JSP还提供了一些隐式对象,这些对象不需要明确声明即可使用,包括:
-
page:用于表示当前JSP页面对象。
-
requestScope、sessionScope、applicationScope:用于访问不同作用域的对象。
-
param、paramValues:用于获取请求参数的值。
-
header、headerValues:用于获取请求头部信息的值。
-
cookie:用于获取Cookie信息。
-
initParam:用于获取Servlet初始化参数。
5. 问题:为什么第一次访问某个jsp资源,速度比较慢?
- tomcat识别访问
- 把jsp源文件“翻译”成java
- 把java文件编译成class
- 调用class文件中的service()方法。
第二次:
只要执行第4步!
6. EL 表达式
EL 表达式(Expression Language)是一种在 JSP 页面中使用的表达式语言,用于简化对数据的访问和处理。EL 表达式可以用来访问和操作 JSP 页面中的各种对象,如请求参数、会话属性、应用程序属性等。
在 JSP 页面中,EL 表达式通常使用 ${} 进行包含,例如${user.name},表示获取名为 user 的对象中的 name 属性。以下是一些 EL 表达式的示例:
${param.name} // 获取请求参数 name 的值
${sessionScope.user.name} // 获取会话对象中名为 user 的对象的 name 属性值
${applicationScope.data} // 获取应用程序对象中名为 data 的属性值
${empty users} // 判断名为 users 的对象是否为空
${fn:length(names)} // 获取名为 names 的对象的长度
EL 表达式支持的操作符包括算术运算符、比较运算符、逻辑运算符、条件运算符等。以下是一些操作符的示例:
${2 + 3} // 加法运算
${10 > 5} // 大于运算
${true && false} // 逻辑与运算
${empty users ? 'No users' : 'Has users'} // 条件运算
除了基本的表达式语言之外,EL 还支持访问 JavaBean 属性、调用 Java 方法、访问数组和列表等操作。以下是一些示例:
${user.name} // 获取名为 user 的对象的 name 属性
${utils.formatDate(date)} // 调用名为 utils 的对象的 formatDate 方法
${array[0]} // 获取数组的第一个元素
${list[1]} // 获取列表的第二个元素
总的来说,EL 表达式是一种非常方便的表达式语言,可以用于在 JSP 页面中获取和操作各种对象,简化了 JSP 页面的编写过程。
7. 自定义标签库
JSTL(JavaServer Pages Standard Tag Library)是一组自定义标签库,用于简化在 JSP 页面中的常见操作。其中,c 标签库是 JSTL 标签库中的一个,用于处理 JSP 页面中的控制结构,如条件语句、循环语句等。
以下是一些 c 标签的示例:
- if 标签
if 标签用于实现条件判断,以下是一个示例:
<c:if test="${user.age >= 18}">
Welcome, ${user.name}!
</c:if>
上述代码中,如果名为 user 的对象中的 age 属性大于等于 18,则输出欢迎消息。
2. choose 标签
choose 标签用于实现多路分支,以下是一个示例:
<c:choose>
<c:when test="${user.gender == 'male'}">
Hello, Mr. ${user.name}!
</c:when>
<c:when test="${user.gender == 'female'}">
Hello, Ms. ${user.name}!
</c:when>
<c:otherwise>
Hello, ${user.name}!
</c:otherwise>
</c:choose>
上述代码中,根据名为 user 的对象中的 gender 属性,分别输出不同的欢迎消息。
- forEach 标签
forEach 标签用于实现循环遍历,以下是一个示例:
<c:forEach items="${users}" var="user">
${user.name}, ${user.age}
</c:forEach>
上述代码中,遍历名为 users 的对象(可以是数组、列表等),将每个元素赋值给变量 user,并输出用户的姓名和年龄。
- set 标签
set 标签用于设置变量的值,以下是一个示例:
<c:set var="result" value="${2 + 3}" />
上述代码中,将表达式 2 + 3 的结果赋值给名为 result 的变量。
总的来说,c 标签库是 JSTL 标签库中的一个常用标签库,用于简化在 JSP 页面中的控制结构的处理,提高了 JSP 页面的开发效率。
class Outer{
private String name = "外部类";
public void run(){
System.out.println("外部类奔跑");
}
class Inner{
public void say(){
System.out.println(name);
run();
}
}
}