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

news2025/4/19 12:41:08

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.coloradmin.cn/o/2337971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Beyond Compare 30天评估到期 解决方法

Beyond Compare 30天评估到期 解决方法 一、问题二、解决办法2.1 第一步&#xff1a;打开注册表2.2 第二步&#xff1a;删除cacheID 三、效果 一、问题 Beyond Compare提示评估到期&#xff0c;重装也无效&#xff0c;只需简单两步&#xff0c;轻轻松松出困境。 二、解决办法…

Arduino无线体感机器手——问题汇总

文章不介绍具体参数&#xff0c;有需求可去网上搜索。 特别声明&#xff1a;不论年龄&#xff0c;不看学历。既然你对这个领域的东西感兴趣&#xff0c;就应该不断培养自己提出问题、思考问题、探索答案的能力。 提出问题&#xff1a;提出问题时&#xff0c;应说明是哪款产品&a…

学习设计模式《一》——简单工厂

一、基础概念 1.1、接口 简单的说&#xff1a;接口是【用来实现类的行为定义、约束类的行为】&#xff08;即&#xff1a;定义可以做什么&#xff09;&#xff1b;接口可以包含【实例方法】、【属性】、【事件】、【索引器】或这四种成员类型的任意组合。 接口的优点&#xff1…

010数论——算法备赛

数论 模运算 一般求余都是对正整数的操作&#xff0c;如果对负数&#xff0c;不同编程语言结果可能不同。 C/javapythona>m,0<a%m<m-1 a<m,a%ma~5%32~-5%3 -21(-5)%(-3) -2~5%(-3)2-1正数&#xff1a;&#xff08;ab&#xff09;%m((a%m)(b%m))%m~正数&#xff…

NAT、代理服务、内网穿透

NAT、代理服务、内网穿透 1、NAT1.1、NAT过程1.2、NAPT2、内网穿透3、内网打洞3、代理服务器3.1、正向代理3.2、反向代理1、NAT 1.1、NAT过程 之前我们讨论了IPv4协议中IP地址数量不充足的问题。NAT技术是当前解决IP地址不够用的主要手段,是路由器的一个重要功能。 NAT能够将…

【unity实战】Unity动画层级(Animation Layer)的Sync同步和Timing定时参数使用介绍,同步动画层制作角色的受伤状态

文章目录 前言方案一&#xff1a;复制粘贴原有层级的状态机1、实现2、问题 方法二&#xff1a;勾选Sync同步动画层1、简单实现同步2、同步blend tree的问题3、动画状态的播放时长4、下层状态覆盖了上层状态 专栏推荐完结 前言 如何制作角色的受伤状态&#xff1f; 玩家角色在…

Uniapp调用native.js使用经典蓝牙串口通讯方法及问题解决

本人尝试在uniapp环境下开发一款安卓应用&#xff0c;需要与使用经典蓝牙协议的设备进行串口通讯&#xff0c;而uniapp官方给出的蓝牙操作接口目前只支持BLE&#xff08;低功耗蓝牙&#xff09;&#xff0c;用该接口无法正常获取到我想要连接的设备。 通过大量搜索&#xff0c…

C++23 新特性:行拼接前去除空白符 (P2223R2)

文章目录 1\. 什么是行拼接前去除空白符2\. 为什么需要这一特性3\. 示例代码输出结果 4\. 编译器支持5\. 优势与应用场景5.1 提高代码可读性5.2 减少潜在错误5.3 适用于多行字符串 6\. 其他相关特性7\. 总结 C 语言一直在不断进化&#xff0c;以满足现代软件开发的需求。C23 标…

【通过Zadig给鼠标适配器安装驱动后,鼠标动不了,无法恢复的解决办法】

【通过Zadig给鼠标适配器安装驱动后,鼠标动不了,无法恢复的解决办法 问题产生缘由感谢这位大佬提供的解决办法解决办法 问题产生缘由 通过Zadig给鼠标适配器安装USB GAMING MOUSE这个驱动后,鼠标动不了,无法恢复(重启电脑,卸载鼠标驱动再重装也不可以), 不过还好,我用的是笔记…

GoogleCodeUtil.java

Google动态验证码实现 GoogleCodeUtil.java package zwf;import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.security.SecureRandom;/** https://mvnrepository.com/artifact/commons-codec/…

Maven 简介(图文)

Maven 简介 Maven 是一个Java 项目管理和构建的工具。可以定义项目结构、项目依赖&#xff0c;并使用统一的方式进行自动化构建&#xff0c;是Java 项目不可缺少的工具。 Maven 的作用 提供标准化的项目结构&#xff1a;以前不同的开发工具创建的项目结构是不一样的&#xf…

2025Github介绍与注册(有图片讲解,保姆级)

为什么要注册Github账号 利于团队协作&#xff0c;特别是打比赛的队友 版本控制强大&#xff0c;代码安全 开源项目多&#xff0c;方便个人模仿或抄袭 方便托管&#xff0c;形成自动化工具链 教育福利&#xff0c;教育参与者暂时免费 讲解完了优势&#xff0c;下面讲注册 Gith…

RUI电视桌面中文版:下载安装教程及桌面固件包获取全攻略

在智能电视的使用过程中&#xff0c;一款出色的桌面系统能极大提升用户体验&#xff0c;RUI电视桌面中文版就是这样一个不错的选择。下面为大家详细介绍RUI电视桌面中文版的下载安装教程以及桌面固件包的获取方法。 一、桌面固件包获取 首先是获取桌面固件包。可以通过RUI官方…

OpenAI 34页最佳构建Agent实践

penAI发布O4&#xff0c;也发布34页最佳构建Agent实践&#xff0c;值得阅读。 什么是Agent&#xff1f; 传统软件使用户能够简化和自动化工作流程&#xff0c;而代理能够以高度独立的方式代表用户执行相同的工作流程。 代理是能够独立地代表您完成任务的系统。 工作流程是必…

HOOPS Exchange 与HOOPS Communicator集成:打造工业3D可视化新标杆!

一、概述 在工业3D开发、BIM建筑、数字孪生和仿真分析等高端应用场景中&#xff0c;数据格式复杂、模型体量庞大、实时交互体验要求高&#xff0c;一直是困扰开发者的难题。Tech Soft 3D旗下的HOOPS Exchange和HOOPS Communicator&#xff0c;正是解决这类问题的黄金搭档。二者…

C#进阶学习(六)单向链表和双向链表,循环链表(下)循环链表

目录 &#x1f4ca; 链表三剑客&#xff1a;特性全景对比表 一、循环链表节点类 二、循环链表的整体设计框架 三、循环列表中的重要方法&#xff1a; &#xff08;1&#xff09;头插法&#xff0c;在头结点前面插入新的节点 &#xff08;2&#xff09;尾插法实现插入元素…

Unity使用Newtonsoft.Json本地化存档

我是标题 1.依赖包2.原理&#xff1a;3.代码4.可用优化5.数据加密 1.依赖包 Newtonsoft请在PacakgeManager处下载。 参考&#xff1a;打工人小棋 2.原理&#xff1a; 把要存储的对象数据等使用JsonConvert.SerializeObject(object T)进行序列化为字符串&#xff0c;并且通过…

2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(六级)真题

青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;六级&#xff09; 分数&#xff1a;100 题数&#xff1a;38 答案解析&#xff1a;https://blog.csdn.net/qq_33897084/article/details/147341458 一、单选题(共25题&#xff0c;共50分) 1. 在tkinter的…

Python 浮点数运算之谜:深入解析round(0.675, 2)等输出异常

一、问题背景&#xff1a;当浮点数运算遇见 “反直觉” 结果 在 Python 开发中&#xff0c;以下代码输出常让开发者困惑&#xff1a; print(round(0.675, 2)) # 预期0.67&#xff0c;实际0.68||预期0.68&#xff0c;实际0.67 print(0.1 0.2) # 预期0.3&…

【C#】Html转Pdf,Spire和iTextSharp结合,.net framework 4.8

&#x1f339;欢迎来到《小5讲堂》&#x1f339; &#x1f339;这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。&#x1f339; &#x1f339;温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01;&#…