1.1了解jsp页面
1.1.1jsp页面的基本构成
JSP(JavaServer Pages)是一种用于创建动态Web页面的技术,它允许开发者通过在HTML中嵌入Java代码来生成动态内容。以下是一个基本的JSP页面示例和构成:
<!DOCTYPE html>
<html>
<head>
<title>My First JSP Page</title>
</head>
<body>
<h1>Hello, <%= request.getParameter("name") %>!</h1>
<p>Today is <%= new java.util.Date() %>.</p>
</body>
</html>
该页面由HTML标签和JSP脚本构成。其中,<%= ... %>
表示输出表达式的结果,而<% ... %>
则表示执行一段Java代码。
页面各部分的含义如下:
-
<!DOCTYPE html>
:定义文档类型为HTML。 -
<html>
、<head>
和<title>
:常规HTML标签,用于定义页面的结构和标题。 -
<body>
:包含了页面的主要内容。 -
<h1>
和<p>
:用于定义标题和段落的HTML标签。 -
<%= request.getParameter("name") %>
:使用JSP表达式输出HTTP请求参数中名为"name"的值。 -
<%= new java.util.Date() %>
:使用JSP表达式输出当前时间。
1.1.2jsp程序的运行原理
JSP(JavaServer Pages)是一种基于Java技术的Web开发技术,它提供了一种简单的方式来创建动态Web页面。JSP程序的运行原理可以概括为以下几个步骤:
-
客户端发送HTTP请求到Web服务器。请求可能包含一些参数,例如查询字符串或表单数据。
-
Web服务器接收到请求后,会把它交给Servlet容器进行处理。
-
Servlet容器根据URL中的扩展名判断该请求是否需要被JSP引擎处理。如果需要,就将请求交给JSP引擎处理。
-
JSP引擎首先解析JSP文件并生成相应的Java源代码,然后编译并加载该Java源代码。这个过程只在第一次访问JSP页面时进行,之后就会直接使用已编译的类。
-
当有新请求到达时,JSP引擎会实例化一个新的Servlet,并且向其中插入处理该请求的Java代码。这些代码包括静态内容和动态内容,动态内容通常由JSP表达式、脚本和自定义标签组成。
-
最终,Servlet生成响应并将其返回给客户端浏览器。响应可能包含HTML、CSS、JavaScript等各种类型的内容,以及动态生成的内容。
总的来说,JSP程序的运行原理是:当客户端请求JSP页面时,JSP引擎将JSP文件翻译成Java代码并编译运行,最终生成HTML等内容返回给客户端。这个过程中,JSP引擎和Servlet容器协同工作,共同实现了Web应用程序的动态生成和处理。
1.2脚本标识
1.2.1jsp表达式
JSP (JavaServer Pages) 表达式是一种在 JSP 页面中使用的简单语法,它允许开发人员在 HTML 页面中插入动态值。JSP 表达式通常用于将 Java 对象中的数据显示到网页上。
JSP 表达式的语法如下:
<%= expression %>
其中 expression
是要求值并输出到页面的 Java 表达式。JSP 引擎会计算表达式的值,并将其转换为字符串,然后将其插入到生成的 HTML 中。
例如,下面的 JSP 代码示例将会在网页上显示当前时间:
<html>
<head>
<title>Current Time</title>
</head>
<body>
The current time is <%= new java.util.Date() %>.
</body>
</html>
在这个例子中,new java.util.Date()
是一个 Java 表达式,它将会被计算并输出当前时间。
1.2.2声明标识
在 JSP 页面中,声明标识用于定义一个方法或变量,该方法或变量可以在页面的其他部分中使用。
JSP 声明标识的语法如下:
<%! declaration; %>
其中 declaration
是 Java 代码片段,可以是类、接口、方法或变量的声明。
例如,下面的 JSP 代码示例定义了一个名为 greeting
的变量,并将其设置为字符串 “Hello, world!”:
<%@ page language="java" %>
<html>
<head>
<title>Declaration Example</title>
</head>
<body>
<%!
String greeting = "Hello, world!";
%>
<h1><%= greeting %></h1>
</body>
</html>
在这个例子中,第 7 行的声明标识定义了一个名为 greeting
的字符串变量。然后,在第 10 行的表达式中,使用 <%= %>
标识符输出该变量的值。
JSP 声明标识通常用于定义在整个页面中需要使用的共享变量或方法,以避免在每个代码段中重复定义它们。声明标识也可以用于定义自己的 Java 类或接口。
1.2.3脚本程序
在 JSP 页面中,脚本程序块用于编写 Java 代码,可以包括任意的 Java 语句、变量声明和表达式。脚本程序块的语法如下:
<% java code %>
其中 java code
是要执行的 Java 代码片段。
例如,下面的 JSP 代码示例使用脚本程序块计算并输出两个整数的和:
<html>
<head>
<title>Scriptlet Example</title>
</head>
<body>
<%
int num1 = 5;
int num2 = 10;
int sum = num1 + num2;
%>
The sum of <%= num1 %> and <%= num2 %> is <%= sum %>.
</body>
</html>
在这个例子中,第 7-9 行的脚本程序块定义了三个整数变量,并将它们相加并赋值给 sum
变量。然后,在第 11 行的表达式中,使用 <%= %>
标识符输出每个变量的值。
脚本程序块也可以嵌套在其他标记中,例如循环、条件语句或函数调用中,以实现更复杂的逻辑。需要注意的是,脚本程序块中的代码会在页面被处理时执行,因此应该避免在其中包含过多的复杂逻辑和长时间运行的操作。
1.3page指令
在 JSP 页面中,<%@ page %>
指令用于定义页面的属性和配置信息。该指令通常放置在页面的顶部,并包含各种属性及其值。
以下是一些常见的 <%@ page %>
属性:
-
language
:指定页面使用的编程语言,默认为 Java。 -
contentType
:指定页面内容类型,如文本、HTML 等。 -
pageEncoding
:指定页面编码方式,默认为 ISO-8859-1。 -
import
:导入其他 Java 类或包。 -
session
:指定是否启用会话跟踪。 -
errorPage
:指定错误处理页面,用于捕获和处理页面发生的异常。 -
isErrorPage
:指定当前页是否为错误处理页面。 -
buffer
:指定页面缓冲区大小。 -
autoFlush
:指定是否自动刷新缓冲区。 -
isThreadSafe
:指定当前页是否线程安全。
例如,下面的 JSP 代码示例使用 <%@ page %>
指令指定了页面的编程语言、内容类型和编码方式:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
<title>Page Directive Example</title>
</head>
<body>
<!-- 页面内容 -->
</body>
</html>
在这个例子中,第 1 行的 <%@ page %>
指令指定了页面的编程语言为 Java,内容类型为 HTML(使用 UTF-8 编码方式)。这些属性可以确保页面内容正确显示,并允许在页面中使用 Java 代码。
需要注意的是,<%@ page %>
指令只能出现一次,并且必须放置在 JSP 页面的顶部。指令的各个属性之间用空格分隔。
1.4包含指令
在 JSP 页面中,<%@ include %>
指令可以使用静态包含和动态包含两种方式。
静态包含指的是在编译时将指定的文件内容插入到当前页面中,即使被包含的文件发生了变化,也不会影响已经编译好的页面。这种方式可以提高页面的性能和可维护性,适用于一些稳定的、不常变化的文件。
以下是静态包含的示例:
<%@ include file="header.jsp" %>
<html>
<head>
<title>Static Include Example</title>
</head>
<body>
<!-- 页面内容 -->
</body>
</html>
<%@ include file="footer.jsp" %>
动态包含指的是在运行时根据需要将指定的文件内容包含到当前页面中,即每次请求都会重新加载被包含的文件。这种方式可以实现页面之间的动态交互,但同时也会降低页面的性能和可维护性。
以下是动态包含的示例:
<html>
<head>
<title>Dynamic Include Example</title>
</head>
<body>
<!-- 动态包含导航栏 -->
<jsp:include page="navbar.jsp" />
<!-- 页面内容 -->
<!-- 动态包含页脚 -->
<jsp:include page="footer.jsp" />
</body>
</html>
在这个例子中,<jsp:include>
标签会在请求页面时动态地加载指定的文件,并将其内容插入到当前页面中。因此,每次请求都会重新加载 navbar.jsp
和 footer.jsp
文件。
需要注意的是,静态包含和动态包含的使用场景不同,在实际开发中应该根据具体情况选择适当的方式。
1.5跳转指令
在 JSP 页面中,<jsp:forward>
和 <jsp:include>
标签用于实现页面之间的跳转和包含。
<jsp:forward>
标签用于将当前请求转发到另一个资源(JSP 页面或 Servlet),使得客户端浏览器重新请求该资源。该标签通常用于实现页面之间的流程控制和重定向。
以下是 <jsp:forward>
标签的语法:
<jsp:forward page="url" />
其中 page
属性指定要转发到的资源的 URL。这个 URL 可以是相对路径或绝对路径。例如:
<jsp:forward page="/login.jsp" />
该标签可以放置在任何位置,但是必须位于 <body>
和 </body>
标记之间。
<jsp:include>
标签用于将另一个 JSP 页面或 Servlet 的输出包含到当前页面中。该标签通常用于实现页面之间的模块化和代码重用。
以下是 <jsp:include>
标签的语法:
<jsp:include page="url" />
其中 page
属性指定要包含的资源的 URL。这个 URL 可以是相对路径或绝对路径。例如:
<jsp:include page="/navbar.jsp" />
该标签会在当前页面被处理时动态地执行指定资源,并将其内容嵌入到当前页面中。
需要注意的是,<jsp:forward>
和 <jsp:include>
标签都是由 JSP 引擎处理的。因此,在使用这些标签时,应该确保目标资源存在,并且不会出现无限循环等问题。