当前位置: 首页 > news >正文

Jsp技术入门指南【五】详细讲解jsp结构页面

Jsp技术入门指南【五】详细讲解jsp结构页面

  • 前言
  • 一、JSP页面的结构
  • 二、JSP页面的部件
    • 1. 指令(核心控制部件)
    • 2. 动作(页面交互部件,了解即可)
    • 3. 脚本(Java逻辑嵌入部件)
  • 三、JSP指令详解
    • 1.1 JSP指令的标记是什么?
    • 1.2 page指令:页面级配置核心
      • page指令的属性及作用
      • 代码示例:复杂page指令配置
    • 1.3 include指令:静态页面包含
      • 指令的作用
      • 语法与示例
        • 案例:包含页脚文件
      • 静态包含 vs 动态包含(<jsp:include>动作)


前言

  • 在之前的博客里,我们讲了JSP的环境构建以及如何找JSP的编译文件、JSP的生命周期等。
  • 接下来,我们将深入剖析JSP页面的核心结构,揭秘动态页面开发的底层逻辑。
  • 掌握JSP页面结构是高效开发动态Web应用的关键,本文将从基础部件到核心指令逐步解析,助你夯实JSP开发基础

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482


一、JSP页面的结构

JSP页面是静态HTML内容与动态Java代码的混合体,其核心结构可分为三部分:

  1. 静态模板:包含HTML/CSS/JS等前端代码,定义页面布局和展示样式。
  2. 动态内容:通过JSP元素(指令、动作、脚本)嵌入Java逻辑,实现数据交互和页面动态渲染。
  3. 元信息:通过指令声明页面属性(如编码、导入包、错误处理等),控制JSP运行行为。

一个典型的JSP页面示例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><title>JSP结构示例</title>
</head>
<body><h1>静态标题</h1><%-- 动态脚本:输出当前时间 --%><p>当前时间:<%= new java.util.Date() %></p><%-- 包含其他页面 --%><%@ include file="footer.jsp" %>
</body>
</html>

二、JSP页面的部件

JSP页面通过三大核心部件实现动态功能,分别是指令动作脚本

1. 指令(核心控制部件)

  • 作用:定义JSP页面的全局属性、导入依赖、控制编译行为等。
  • 语法:以<%@ 指令名 属性=值 %>形式声明,贯穿页面全局。

2. 动作(页面交互部件,了解即可)

  • 作用:以XML标签形式实现页面跳转、组件调用、数据传递等功能,简化动态逻辑编写。
  • 常见类型
    • <jsp:include>:动态包含其他页面(运行时合并)。
    • <jsp:forward>:转发请求到其他资源。
    • <jsp:useBean>:实例化JavaBean组件。

3. 脚本(Java逻辑嵌入部件)

  • 作用:在HTML中直接嵌入Java代码,实现数据处理、逻辑控制等功能。
  • 三种形式
    1. 脚本段(Scriptlet)<% 代码逻辑 %>,用于编写多行Java代码。
      <% int count = 0;for (int i = 0; i < 5; i++) {count += i;}
      %>
      
    2. 表达式(Expression)<%= 表达式 %>,直接输出数据到页面。
      <p>计算结果:<%= count %></p> <!-- 输出脚本段中的count值 -->
      
    3. 声明(Declaration)<%! 声明代码 %>,定义类成员(变量、方法)。
      <%! // 声明全局方法public String getMessage() {return "Hello, JSP!";}
      %>
      <p><%= getMessage() %></p> <!-- 调用声明的方法 -->
      

三、JSP指令详解

JSP指令分为三大类:page(页面配置)、include(静态包含)、taglib(标签库,后续专题讲解),其中前两者是开发中最常用的核心指令。

1.1 JSP指令的标记是什么?

所有JSP指令均以<%@ %>作为标记,不同指令通过名称区分功能。

1.2 page指令:页面级配置核心

page指令的属性及作用

属性名说明示例
language指定脚本语言(默认java,目前仅支持Java)。<%@ page language="java" %>
extends指定JSP生成的Servlet的父类(极少使用,默认由Tomcat自动生成)。<%@ page extends="org.example.CustomServlet" %>
import导入Java包(可多次声明,支持通配符)。<%@ page import="java.util.Date, java.util.List" %>
<%@ page import="java.util.*" %>
session是否启用HTTP会话(默认true,设为false可禁用Session)。<%@ page session="false" %>
buffer输出缓冲区大小(默认8kb,设为none禁用缓冲区)。<%@ page buffer="16kb" %>
autoflush缓冲区满时是否自动刷新(默认truebuffer="none"时必须为true)。<%@ page autoflush="false" %>
isThreadSafe是否支持多线程(默认true,设为false强制单线程处理请求)。<%@ page isThreadSafe="false" %>
errorPage指定错误处理页面(相对路径,捕获异常时跳转)。<%@ page errorPage="/error.jsp" %>
isErrorPage声明当前页面为错误处理页面(可使用exception内置对象)。<%@ page isErrorPage="true" %>
contentType设置响应内容类型和编码(核心属性,必须声明)。<%@ page contentType="text/html;charset=UTF-8" %>

代码示例:复杂page指令配置

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*, org.example.dao.*" session="true" buffer="32kb" autoflush="true" errorPage="/common/error.jsp"
%>

1.3 include指令:静态页面包含

指令的作用

  • 静态包含:在JSP编译阶段将目标文件内容直接合并到当前页面,生成一个统一的Servlet类。
  • 适用场景:包含固定不变的静态资源(如页眉、页脚、公共样式)。

语法与示例

<%@ include file="相对路径" %> <!-- 注意:路径不带上下文根,如"footer.jsp" -->
案例:包含页脚文件

当前页面index.jsp

<html>
<body><!-- 主体内容 --><%@ include file="footer.jsp" %> <!-- 静态包含页脚 -->
</body>
</html>

被包含的footer.jsp

<footer><p>版权所有 © 2025</p>
</footer>

静态包含 vs 动态包含(jsp:include动作)

特性静态包含(include指令)动态包含(jsp:include动作)
合并时机编译阶段合并代码运行阶段合并响应内容
参数传递不支持支持通过<jsp:param>传递参数
独立性被包含文件与主文件耦合度高被包含文件可独立运行
适用场景静态资源(HTML/CSS/固定片段)动态内容(如根据参数加载不同数据)

以上就是这篇博客的全部内容,下一篇我们将继续探索JSP的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

http://www.xdnf.cn/news/9433.html

相关文章:

  • 【含文档+PPT+源码】基于Python爬虫二手房价格预测与可视化系统的设计与实现
  • 论文阅读:2024 arxiv AI Safety in Generative AI Large Language Models: A Survey
  • 自然语言处理入门7——注意力机制
  • 数据结构——顺序表(C语言实现)
  • [250418] 智谱 AI 发布新一代模型,同时推出新域名 Z.ai
  • yocto编译使用共享缓存
  • IntelliSense 已完成初始化,但在尝试加载文档时出错
  • 前端单元测试实战:如何开始?
  • Vue2+Vue3 130~180集学习笔记
  • Google Colab测试部署Qwen大模型,实现PDF转MD场景OCR 识别(支持单机环境)
  • 迭代器模式:统一不同数据结构的遍历方式
  • ctf.show—Web(1-10)详细通关教程
  • 2025年行业AI Agent选型专业指南
  • RT-Thread RTThread studio 初使用
  • 零基础玩转AI数学建模:从理论到实战
  • LINUX学习——守护进程的含义及编程实现
  • Function Calling的机制 (含示例)
  • Sqlite3交叉编译全过程
  • 2025妈妈杯数学建模B题完整分析论文
  • 游戏引擎学习第233天
  • 【go】什么是Go语言中的GC,作用是什么?调优,sync.Pool优化,逃逸分析演示
  • 深度学习神经网络全连接笔记day1
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(四级)真题
  • python flask 项目部署
  • 源码分析之Leaflet中Point
  • CSS 美化页面(五)
  • TikTok流量变现全攻略:免费与付费玩法解析
  • 【项目管理】第19章 配置与变更管理-- 知识点整理
  • 嵌入式ARM RISCV toolchain工具 梳理arm-none-eabi-gcc
  • 第八篇:系统分析师第三遍——3、4章