当前位置: 首页 > 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

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

在这里插入图片描述

相关文章:

  • 【AI模型学习】关于写论文——论文的审美
  • 【RK3588 嵌入式图形编程】-SDL2-扫雷游戏-结束和重新开始游戏
  • 黑马V11版 最新Java高级软件工程师课程-JavaEE精英进阶课
  • AIP-236 策略预览
  • Linux简介
  • MapWindow GIS:开源的GIS程序 库和工具,适用于基于C#和.NET的应用程序
  • spring响应式编程系列:总体流程
  • Git-使用教程(新手向)
  • MCP Server驱动传统SaaS智能化转型:从工具堆叠到AI Agent生态重构,基于2025年技术演进与产业实践
  • 【mysql】mysql疑难问题:实际场景解释什么是排它锁 当前读 快照读
  • 【Linux】进程概念(二):PCB,ps 和 fork
  • excel解析图片pdf附件不怕
  • 一.学习python工具准备
  • spring cloud gateway前面是否必须要有个nginx
  • ARINC818协议(三)
  • CUDA Driver 安装与升级(CentOS 7)
  • 前端:uniapp框架中<scroll-view>r如何控制元素进行局部滚动
  • rancher 网红无法上传大视频,小于2m可以正常上传
  • vmware17 虚拟机 ubuntu22.04 桥接模式,虚拟机无法接收组播消息
  • 【AI插件开发】Notepad++ AI插件开发实践:支持配置界面
  • 3月赴美外国游客数量加速下滑
  • 李家超将率团访问浙江
  • 新华社经济随笔:把握不确定性中的确定性
  • 在没有穹顶的剧院,和春天的音乐会来一场约会
  • 恒安集团创始人许连捷逝世:白手起家缔造百亿纸品巨头,个人曾捐赠超10亿
  • 黄山旅游:去年黄山景区累计接待进山游客492.24万人,同比增长7.6%