Jsp技术入门指南【六】jsp脚本原理及隐式对象

Jsp技术入门指南【六】jsp脚本原理及隐式对象

  • 前言
  • 一、JSP 脚本元素
    • 1.1 声明
    • 1.2 表达式
    • 1.3 脚本标签
  • 二、JSP 的隐式对象是什么
  • 三、隐式对象详解
    • out
    • request
    • session
    • application
    • config
    • exception


前言

  • 在之前的博客中,我们已经介绍了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 脚本元素

1.1 声明

  • 在 JSP 里,声明用于定义变量与方法。这些声明会被转换为 Servlet 类的成员变量和方法。声明的语法格式如下:
<%!// 变量声明int count = 0;// 方法声明public void incrementCount() {count++;}
%>

在上述示例中,count 是成员变量,incrementCount 是成员方法。

1.2 表达式

表达式用于在 JSP 页面输出值。它会被转换为 Servlet 中 out.print() 方法的调用。表达式的语法格式如下:

<%= 表达式 %>

示例如下:

<%int num = 10;
%>
<p>数字是: <%= num %></p>

上述代码会输出 数字是: 10

1.3 脚本标签

脚本标签用于在 JSP 页面中嵌入 Java 代码。它会被转换为 Servlet 中 _jspService 方法的一部分。脚本标签的语法格式如下:

<%// Java 代码int a = 5;int b = 3;int sum = a + b;out.print("两数之和是: " + sum);
%>

二、JSP 的隐式对象是什么

  • JSP 隐式对象指的是在 JSP 页面里无需显式声明就能够使用的对象
  • 这些对象是由 JSP 容器自动创建并提供的,在 JSP 页面中可以直接使用。常见的隐式对象有 outrequestresponsesessionapplicationconfigpagepageContextexception

三、隐式对象详解

out

out 对象属于 JspWriter 类的实例,用于向客户端输出内容。示例如下:

<%out.print("欢迎访问本页面!");
%>

request

request 对象是 HttpServletRequest 类的实例,用于获取客户端发送的请求信息,像请求参数、请求头、请求方法等。示例如下:

<%String username = request.getParameter("username");out.print("你输入的用户名是: " + username);
%>

session

session 对象是 HttpSession 类的实例,用于在多个请求之间跟踪用户会话。在一个会话里,session 是唯一的。

<%--Created by IntelliJ IDEA.User: DELLDate: 2025/4/10Time: 19:09To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%out.print("hello111");int a; // 这里声明了变量 a,但未使用String username = request.getParameter("uesename");if (username != null && username.equals("admin")) {session.setAttribute("username", username);System.out.println("-----" + session.getId());response.sendRedirect("../body.jsp");}
%></body>
</html>

这段代码的功能如下:

  1. 向客户端输出 hello111
  2. 从请求参数中获取 username
  3. 检查 username 是否为 admin,若为 admin,就将 username 存入 session 中,打印 session 的 ID,然后重定向到 ../body.jsp 页面。

application

application 对象是 ServletContext 类的实例,用于在整个 Web 应用程序中共享数据。可以在 web.xml 里配置初始化参数,然后在 JSP 页面中通过 application 对象获取。

web.xml 配置示例

<context-param><param-name>appName</param-name><param-value>MyWebApp</param-value>
</context-param>

JSP 页面获取参数示例

<%String appName = application.getInitParameter("appName");out.print("应用程序名称是: " + appName);
%>

config

config 对象是 ServletConfig 类的实例,用于获取 Servlet 的配置信息。可以在 web.xml 里配置 Servlet 的初始化参数,然后在 JSP 页面中通过 config 对象获取。

exception

exception 对象是 Throwable 类的实例,用于处理 JSP 页面中出现的异常。要使用 exception 对象,需要在 <%@ page %> 指令中设置 isErrorPage="true"

示例

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head><title>错误页面</title>
</head>
<body><h1>发生错误</h1><p>错误信息: <%= exception.getMessage() %></p>
</body>
</html>

综上所述,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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76325.shtml

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

相关文章

vue3推荐的移动table库

vxe-table https://gitee.com/js-class/vxe-table#https://gitee.com/link?targethttps%3A%2F%2Fvxetable.cn 文档api https://vxetable.cn/#/component/table/other/bookkeepingVoucher 引入步骤 安装 npm install xe-utils vxe-tablenext 在项目main.js引入 import …

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

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

《软件设计师》复习笔记(14.3)——设计模式

目录 一、设计模式分类 1. 创建型模式&#xff08;Creational Patterns&#xff09; 2. 结构型模式&#xff08;Structural Patterns&#xff09; 3. 行为型模式&#xff08;Behavioral Patterns&#xff09; 真题示例&#xff1a; 一、设计模式分类 架构模式 高层设计决…

HarmonyOS:使用Refresh组件实现页面下拉刷新上拉加载更多

一、前言 可以进行页面下拉操作并显示刷新动效的容器组件。 说明 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。该组件从API Version 12开始支持与垂直滚动的Swiper和Web的联动。当Swiper设置loop属性为true时&…

55、⾸屏加载⽩屏怎么进⾏优化

答&#xff1a; &#xff08;1&#xff09;使⽤CDN 减⼩代码体积&#xff0c;加快请求速度&#xff1b; (2)SSR通过服务端把所有数据全部渲染完成再返回给客⼾端&#xff1b; (3) 路由懒加载&#xff0c;当⽤⼾访问的时候&#xff0c;再加载相应模块&#xff1b; (4) 使⽤外…

什么是Python单例模式

什么是Python单例模式 Python单例模式是一种创建型设计模式,目的是确保一个类仅有一个实例,并提供一个全局访问点来获取该实例。以下从作用和示例进行介绍: 作用 控制资源使用:避免对系统资源的重复消耗,像数据库连接、文件句柄等稀缺资源,只创建一个实例来管理使用,防…

Java 2025:解锁未来5大技术趋势,Kotlin融合AI新篇

各位Java开发者们好&#xff01;&#x1f680; 2025年的Java世界正在经历一场前所未有的技术变革。作为深耕Java领域多年的技术博主&#xff0c;今天我将带大家深入探索Java生态即将迎来的5大技术趋势&#xff0c;特别是Kotlin的深度融合和AI技术的新篇章。准备好了吗&#xff…

计算机视觉cv2入门之车牌号码识别

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识&#xff0c;这里我们以车牌号码识别这一案例来实操一下。 大致思路 车牌号码识别的大致流程可以分为这三步&#xff1a;图像预处理-寻找车牌轮廓-车牌OCR识别 接下来我们按照这三步来进行讲解。 图像预处理 …

CExercise_13_1排序算法_3快速排序算法,包括单向分区以及双向分区

题目&#xff1a; 请手动实现快速排序算法&#xff0c;包括单向分区以及双向分区&#xff1a; // 单向分区快速排序算法 void quick_sort_one_way(int arr[], int len); //双向分区快速排序算法 void quick_sort_two_way(int arr[], int len); 关键点 分析&#xff1a; &#x…

FPGA-VGA

目录 前言 一、VGA是什么&#xff1f; 二、物理接口 三、VGA显示原理 四、VGA时序标准 五、VGA显示参数 六、模块设计 七、波形图设计 八、彩条波形数据 前言 VGA的FPGA驱动 一、VGA是什么&#xff1f; VGA&#xff08;Video Graphics Array&#xff09;是IBM于1987年推出的…

Linux和Ubuntu的驱动适配情况

旧 一、Linux Yocto3.0 二、Ubuntu 1.驱动 1.rtc正常 2.led正常 3.加密芯片正常 4.硬件看门狗不行&#xff0c;驱动已经适配好&#xff0c;等硬件修复后&#xff0c;直接使用脚本就可以 5.千兆网口可以&#xff0c;两个百兆网口不行 6.USB上面和下面都可以&#xff08;插u盘…

Python 文本和字节序列(处理文本文件)

本章将讨论下述话题&#xff1a; 字符、码位和字节表述 bytes、bytearray 和 memoryview 等二进制序列的独特特性 全部 Unicode 和陈旧字符集的编解码器 避免和处理编码错误 处理文本文件的最佳实践 默认编码的陷阱和标准 I/O 的问题 规范化 Unicode 文本&#xff0c;进行安全的…

【Android学习记录】工具使用

文章目录 一. 精准找视图资源ID1. 准备工作2. 使用 uiautomator 工具2.1. 获取设备的窗口内容2.2. Pull XML 文件2.3. 查看 XML 文件 3. 直接使用 ADB 命令4. 使用 Android Studio 的 Layout Inspector总结 二. adb shell dumpsys activity1. 如何使用 ADB 命令2. 输出内容解析…

Kafka系列之:计算kafka集群topic占的存储大小

Kafka系列之:计算kafka集群topic占的存储大小 topic存储数据格式统计topic存储大小定时统计topic存储大小topic存储数据格式 单位是字节大小 size_bytes{directory="/data/datum/kafka/optics-all" } 782336计算topic存储大小脚本逻辑是: 计算指定目录或文件的大小…

C# 高级编程:Lambda 表达式

在 C# 的高级编程中,Lambda 表达式是一个强大而灵活的工具,广泛应用于 LINQ 查询、委托、事件处理以及函数式编程等多个领域。它不仅使代码更简洁、表达更直接,而且在某些场景中能极大提高代码的可读性与可维护性。本文将从 Lambda 表达式的基本语法入手,深入探讨其原理、常…

《软件设计师》复习笔记(11.5)——测试原则、阶段、测试用例设计、调试

目录 1. 测试基础概念 2. 测试方法分类 3. 测试阶段 真题示例&#xff1a; 题目1 题目2 题目3 4. 测试策略 5. 测试用例设计 真题示例&#xff1a; 6. 调试与度量 真题示例&#xff1a; 1. 测试基础概念 定义&#xff1a;系统测试是为发现错误而执行程序的过程&…

方案解读:虚拟电厂标杆项目整体建设方案【附全文阅读】

在电力市场背景下,传统电力现货市场存在电能定价不合理、分布式电源并网困难等问题。本虚拟电厂标杆项目旨在研究全时间尺度虚拟电厂智能管控关键技术,通过研制虚拟电厂控制器样机、开发运行管理平台,实现对分布式能源的合理优化配置。项目内容涵盖虚拟调控、建设目标、建设…

PyTorch 深度学习实战(37):分布式训练(DP/DDP/Deepspeed)实战

在上一篇文章中&#xff0c;我们探讨了混合精度训练与梯度缩放技术。本文将深入介绍分布式训练的三种主流方法&#xff1a;Data Parallel (DP)、Distributed Data Parallel (DDP) 和 DeepSpeed&#xff0c;帮助您掌握大规模模型训练的关键技术。我们将使用PyTorch在CIFAR-10分类…

OpenAI重返巅峰:o3与o4-mini引领AI推理新时代

引言 2025年4月16日&#xff0c;OpenAI发布了全新的o系列推理模型&#xff1a;o3和o4-mini&#xff0c;这两款模型被官方称为“迎今为止最智能、最强大的大语言模型&#xff08;LLM&#xff09;”。它们不仅在AI推理能力上实现了质的飞跃&#xff0c;更首次具备了全面的工具使…

【AI插件开发】Notepad++ AI插件开发实践:支持配置界面

一、引用 此前的系列文章已基本完成了Notepad的AI插件的功能开发&#xff0c;但是此前使用的配置为JSON配置文件&#xff0c;不支持界面配置。 本章在此基础上集成支持配置界面&#xff0c;这样不需要手工修改配置文件&#xff0c;直接在界面上操作&#xff0c;方便快捷。 注…