JavaScript
JSP 简介
JavaServer Pages (JSP) 是一种基于 Java 的服务器端技术,用于开发动态网页。JSP 允许将 Java 代码嵌入 HTML 页面,通过 JSP 容器(如 Tomcat)编译为 Servlet 后执行。
JSP 工作原理
- 请求处理:客户端请求 JSP 页面时,服务器将 JSP 文件转换为 Servlet(Java 文件)。
- 编译执行:Servlet 被编译为字节码(.class 文件),由 JVM 执行并生成动态内容。
- 响应返回:生成的 HTML 内容返回给客户端浏览器。
JSP基础语法

JSP(JavaServer Pages)是一种动态网页技术,允许在HTML中嵌入Java代码。其核心语法包括脚本元素、指令、动作和内置对象。
JSP表达式
<%= new java.util.Date() %>
JSP脚本片段
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>JSP示例</title>
</head>
<body>
<%-- JSP注释(客户端不可见) --%>
<!-- HTML注释(客户端可见) -->
<%
// Java代码片段(Scriptlet)
String message = "Hello, JSP!";
out.println(message); // 输出到响应
%>
<%= "当前时间: " + new java.util.Date() %> <!-- 表达式(自动输出) -->
</body>
</html>
在代码中嵌入HTML元素
<% for(int i = 0; i < 5; i++) { %>
<p>hello, world <%=i%></p>
<% } %>
JSP声明
在JSP中,声明用于定义变量或方法,这些变量或方法将在生成的Servlet类中作为成员变量或成员方法存在。声明语法如下:
<%!
// 变量或方法声明
int count = 0;
String getMessage() {
return "Hello, World!";
}
%>
EL表达式
${user.name}
JSP指令
通过page指令的errorPage属性可以指定当前页面发生异常时跳转的错误处理页面。错误处理页面需通过isErrorPage="true"声明。
<%@ page errorPage="error.jsp" %>
<%@ page isErrorPage="true" %>
<html>
<body>
<h2>Error Occurred: <%= exception.getMessage() %></h2>
</body>
</html>
在web.xml中可配置全局错误页面,根据异常类型或HTTP状态码跳转:
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/notFound.jsp</location>
</error-page>
JSP指令概述
JSP(JavaServer Pages)指令用于向JSP容器提供页面级别的配置信息,控制页面的整体行为。指令在编译阶段生效,不会直接生成输出内容。JSP指令通过<%@ %>标签声明。
常见JSP指令类型
page指令
语法:<%@ page 属性="值" %>
功能:定义页面依赖属性,如脚本语言、内容类型、错误页面等。
常用属性:
language:指定脚本语言(默认为Java)。contentType:设置响应内容的MIME类型(如text/html;charset=UTF-8)。import:导入Java包或类(多个类用逗号分隔)。errorPage:指定当前页面发生异常时跳转的错误页面。isErrorPage:标记当前页面是否为错误处理页面(默认为false)。
示例:
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*, java.io.*" %>
include指令
语法:<%@ include file="文件路径" %>
功能:在编译阶段静态包含其他文件(如JSP、HTML),合并内容后一起编译。
特点:
- 适用于公共页眉、页脚等重复内容。
- 文件路径为相对路径或绝对路径。
示例:
<%@ include file="header.jsp" %>
taglib指令
语法:<%@ taglib uri="标签库URI" prefix="前缀" %>
功能:引入自定义标签库(如JSTL)。
参数说明:
uri:标签库的唯一标识符或路径。prefix:自定义标签的前缀(如c代表JSTL核心库)。
示例:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
注意事项
- 指令位置:通常放在JSP文件顶部,但除
page指令外,其他指令可出现在任意位置。 - 重复属性:
page指令的import属性可重复,其他属性不可重复声明。 - 动态包含:若需运行时动态包含内容,应使用
<jsp:include>动作标签而非include指令。
示例代码整合
以下是一个综合使用JSP指令的示例:
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.Date" %>
<%@ include file="header.jsp" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<body>
<h1>当前时间:<%= new Date() %></h1>
<c:out value="JSTL标签示例"/>
</body>
</html>
九大内置对象概述
在JSP(JavaServer Pages)中,九大内置对象是无需声明即可直接使用的对象,由JSP容器自动实例化和管理。这些对象简化了开发流程,提供了对请求、响应、会话等核心功能的便捷访问。
内置对象列表及功能
request对象
类型为javax.servlet.http.HttpServletRequest,封装客户端请求信息,如参数、头信息等。常用方法包括getParameter()、getAttribute()。
response对象
类型为javax.servlet.http.HttpServletResponse,用于向客户端发送响应。方法如setContentType()、sendRedirect()。
session对象
类型为javax.servlet.http.HttpSession,用于跟踪用户会话状态。支持setAttribute()、getAttribute()等方法。
application对象
类型为javax.servlet.ServletContext,代表整个Web应用上下文。可共享全局数据,方法如getInitParameter()。
out对象
类型为javax.servlet.jsp.JspWriter,用于向客户端输出内容。类似System.out,常用方法为print()、println()。
pageContext对象
类型为javax.servlet.jsp.PageContext,提供对页面所有对象及命名空间的访问。支持findAttribute()、forward()。
config对象
类型为javax.servlet.ServletConfig,封装JSP页面的配置信息。可通过getInitParameter()获取初始化参数。
page对象
类型为java.lang.Object,代表当前JSP页面实例,实际很少直接使用。
exception对象
类型为java.lang.Throwable,仅在错误页面(isErrorPage="true")中可用,用于捕获异常信息。
典型应用场景
数据传递
通过request.setAttribute()和session.setAttribute()在不同作用域共享数据。
页面跳转
使用response.sendRedirect()或pageContext.forward()实现页面重定向或转发。
日志记录
通过application.log()记录应用级日志信息。
异常处理
在错误页面中通过exception.printStackTrace()输出异常堆栈。
注意事项
- 内置对象作用域不同:
request仅限单个请求,session跨请求,application全局有效。 - 避免滥用
session,可能引发内存问题。 out对象与标准输出流性能不同,适合少量输出。
以上对象为JSP开发的核心工具,合理使用可显著提升开发效率。
JSP标签
JSP(JavaServer Pages)标签是一种嵌入在HTML中的特殊标记,用于简化Java代码在网页中的动态生成。JSP标签分为三类:指令标签、脚本标签和动作标签,每种标签有特定的语法和功能。
指令标签
指令标签以<%@开头,用于全局设置JSP页面的属性:
- page指令:定义页面属性,如编码、会话控制等。
<%@ page language="java" contentType="text/html; charset=UTF-8" %> - include指令:静态包含其他文件内容。
<%@ include file="header.jsp" %> - taglib指令:引入自定义标签库。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
脚本标签
脚本标签允许直接在JSP中嵌入Java代码:
- 声明标签
<%! %>:定义成员变量或方法。<%! int count = 0; %> - 脚本片段
<% %>:插入Java逻辑代码。<% for(int i=0; i<5; i++) { %> <p>Iteration <%= i %></p> <% } %> - 表达式标签
<%= %>:输出变量或表达式结果。<p>Current time: <%= new java.util.Date() %></p>
动作标签
动作标签以<jsp:开头,用于动态行为控制:
- include动作:运行时动态包含其他页面。
<jsp:include page="footer.jsp" /> - forward动作:将请求转发到其他页面。
<jsp:forward page="error.jsp" /> - useBean动作:创建或访问JavaBean对象。
<jsp:useBean id="user" class="com.example.User" scope="session" />
JSTL与EL表达式
- JSTL(JSP Standard Tag Library):通过
<c:if>、<c:forEach>等标签简化逻辑控制。<c:forEach items="${users}" var="user"> <p>${user.name}</p> </c:forEach> - EL(Expression Language):
${}语法直接访问数据。<p>Welcome, ${sessionScope.user.name}</p>
自定义标签
通过继承TagSupport或SimpleTagSupport实现自定义标签:
- 创建标签处理器类。
- 定义TLD(Tag Library Descriptor)文件。
- 在JSP中通过
taglib指令引入并使用。
注意事项
- 避免过度使用脚本标签,优先选择JSTL和EL。
- 指令标签在编译阶段处理,动作标签在运行时处理。
- 自定义标签需注意作用域(
page、request、session、application)。
JSTL表达式基础概念
JSTL(JavaServer Pages Standard Tag Library)是一组标准标签库,用于简化JSP页面的开发。它提供了常见的功能标签,如循环、条件判断、格式化等,避免在JSP中直接编写Java代码。
核心标签库(Core Tags)
核心标签库是最常用的JSTL标签,需通过以下指令引入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
常用标签示例:
- 变量设置:
<c:set var="name" value="John" />
- 条件判断:
<c:if test="${age > 18}">
Adult
</c:if>
- 循环遍历:
<c:forEach items="${userList}" var="user">
${user.name}
</c:forEach>
格式化标签库(Formatting Tags)
格式化标签库用于处理日期、数字和国际化,引入方式:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
示例:
- 日期格式化:
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd" />
- 数字格式化:
<fmt:formatNumber value="${price}" type="currency" />
函数标签库(Function Tags)
函数标签库提供字符串处理功能,引入方式:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
示例:
- 字符串长度:
${fn:length(text)}
- 字符串截取:
${fn:substring(text, 0, 5)}
EL表达式与JSTL结合
JSTL常与EL(Expression Language)表达式结合使用。EL用于访问数据,JSTL用于控制逻辑。
示例:
<c:set var="total" value="${price * quantity}" />
注意事项
- JSTL标签需依赖正确的URI和库文件。
- 避免在JSTL中嵌套过多逻辑,保持代码简洁。
- 格式化标签需注意本地化设置。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)