Jsp技术入门指南【七】JSP动作讲解

news2025/5/11 3:07:41

Jsp技术入门指南【七】JSP动作讲解

  • 前言
  • 一、什么是JSP动作?
  • 二、核心JSP动作详解
    • 1. jsp:include:动态包含其他页面
      • 与<%@ include %>的区别
    • 2. jsp:forward:请求转发到另一个页面
    • 3. jsp:param:为动作传递参数
    • 4. jsp:useBean:创建或获取JavaBean对象
    • 5. jsp:setProperty:设置JavaBean属性值
    • 6. 作用域:四个核心对象的范围


  • 在之前的博客中,我们已经深入剖析了JSP页面的核心结构,从基础语法到动态交互的实现,逐步揭示了动态网页开发的底层逻辑
  • 通过这些内容的学习,相信我们已经对JSP的开发有了更清晰的认识,并且掌握了高效开发动态Web应用的关键技能。
  • 接下来,我们将继续深入JSP的世界,探索JSP动作的奥秘
  • JSP动作是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动作是JSP提供的一组XML风格的标签(以<jsp:开头),用于实现页面动态交互、组件调用等功能。常见动作包括页面包含、跳转、传参、操作JavaBean等。

二、核心JSP动作详解

1. jsp:include:动态包含其他页面

作用
将另一个JSP/HTML文件的内容“动态插入”到当前页面,执行时合并内容。
特点:两个页面独立执行,共享请求(request),但各自有独立的作用域。

语法

<jsp:include page="被包含的页面路径" /> <!-- 简单用法 -->
<!-- 带参数时(参数会传递给被包含页面) -->
<jsp:include page="demo2.jsp">
    <jsp:param name="参数名" value="参数值" />
</jsp:include>

代码示例

  • demo1.jsp(主页面)
    <!DOCTYPE html>
    <html>
    <head>
        <title>主页面</title>
    </head>
    <body>
        <h1>这是主页面demo1.jsp</h1>
        <!-- 动态包含demo2.jsp,会先执行demo2.jsp的逻辑,再合并内容 -->
        <jsp:include page="demo2.jsp" /> 
    </body>
    </html>
    
  • demo2.jsp(被包含页面)
    <p>这是被包含的demo2.jsp内容</p>
    

与<%@ include %>的区别

特性<jsp:include>(动态包含)<%@ include %>(静态包含)
执行时机运行时合并内容(先执行被包含页)编译时合并代码(直接拼接文件)
独立性两个页面独立,可传递参数合并后为一个文件,无法单独传参
使用场景内容动态变化(如用户登录状态)内容固定(如页面底部版权信息)

2. jsp:forward:请求转发到另一个页面

作用
将当前请求“转发”到另一个页面,用户浏览器地址栏不变(服务器端跳转),且可传递参数。
特点:两个页面共享同一个请求(request),可通过request.setAttribute()共享数据。

语法

<jsp:forward page="目标页面路径">
    <jsp:param name="参数名" value="参数值" /> <!-- 可选:传递参数 -->
</jsp:forward>

代码示例

  • demo1.jsp(转发页面)
    <!DOCTYPE html>
    <html>
    <body>
        <%
            // 转发前可在request中存储数据(供目标页面使用)
            request.setAttribute("message", "来自demo1的消息"); 
        %>
        <!-- 转发到demo2.jsp,并传递参数age=18 -->
        <jsp:forward page="demo2.jsp">
            <jsp:param name="age" value="18" />
        </jsp:forward>
    </body>
    </html>
    
  • demo2.jsp(目标页面)
    <!DOCTYPE html>
    <html>
    <body>
        <!-- 获取转发时传递的参数 -->
        年龄:<%= request.getParameter("age") %> <br>
        <!-- 获取request中存储的数据 -->
        消息:<%= request.getAttribute("message") %>
    </body>
    </html>
    

注意

  • 转发后,当前页面后续代码不再执行(类似Java的return)。
  • response.sendRedirect()的区别:
    • forward是服务器端跳转(地址栏不变,共享request);
    • redirect是客户端跳转(地址栏改变,需重新发起请求)。

3. jsp:param:为动作传递参数

作用
单独作为标签使用,必须嵌套在<jsp:include><jsp:forward>中,用于传递参数。

语法

<jsp:param name="参数名" value="参数值" /> <!-- 值可以是静态字符串或表达式 -->

示例

<jsp:include page="search.jsp">
    <jsp:param name="keyword" value="Java" /> <!-- 传递搜索关键词 -->
</jsp:include>

4. jsp:useBean:创建或获取JavaBean对象

作用
用于实例化JavaBean(Java类对象),并指定其作用域(页面、请求、会话、应用)。
JavaBean要求:类必须有无参构造方法,属性通过setter/getter方法访问。

语法

<jsp:useBean id="对象名" class="类全路径" scope="作用域" />
  • id:对象在作用域中的唯一标识(如user)。
  • scope:作用域(page/request/session/application,默认page)。

代码示例
假设存在Java类com.User(有nameage属性,及对应setter/getter):

<!-- 创建User对象,作用域为request -->
<jsp:useBean id="user" class="com.User" scope="request" />

5. jsp:setProperty:设置JavaBean属性值

作用
配合<jsp:useBean>使用,为JavaBean的属性赋值。

语法

<!-- 方式1:通过参数名匹配属性名(自动赋值) -->
<jsp:setProperty name="对象名" property="属性名" /> 

<!-- 方式2:指定具体值(静态值或表达式) -->
<jsp:setProperty name="对象名" property="属性名" value="值" /> 

示例

<jsp:useBean id="user" class="com.User" />
<!-- 从请求参数中获取名为“name”的值,赋值给user的name属性 -->
<jsp:setProperty name="user" property="name" /> 
<!-- 直接设置age属性为20 -->
<jsp:setProperty name="user" property="age" value="20" /> 

6. 作用域:四个核心对象的范围

JSP中属性可存储在4个作用域对象中,范围从小到大依次为:
pageContext(当前页面) < request(一次请求) < session(一次会话) < application(整个应用)。

代码示例

  • 设置属性(假设在demo1.jsp)

    <%
        // pageContext作用域:仅当前页面有效
        pageContext.setAttribute("pageKey", "pageValue"); 
        // request作用域:一次请求内有效(转发时共享)
        request.setAttribute("requestKey", "requestValue"); 
        // session作用域:用户登录后直到会话结束(关闭浏览器或超时)
        session.setAttribute("sessionKey", "sessionValue"); 
        // application作用域:整个应用运行期间有效(所有用户共享)
        application.setAttribute("applicationKey", "applicationValue"); 
    %>
    
  • 获取属性(在demo2.jsp,通过请求转发到达)

    <body>
        <!-- 按作用域从小到大获取 -->
        pageContext属性:<%= pageContext.getAttribute("pageKey") %> <br>
        request属性:<%= request.getAttribute("requestKey") %> <br>
        session属性:<%= session.getAttribute("sessionKey") %> <br>
        application属性:<%= application.getAttribute("applicationKey") %> <br>
    </body>
    
  • 注意

  • pageContext只能在当前页面使用,转发后失效。

  • request属性在请求转发(forward)时有效,但若使用重定向(redirect)则失效(因为重定向是新请求)。


以上就是这篇博客的全部内容,下一篇我们将继续探索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/2338606.html

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

相关文章

10软件测试需求分析案例-查询学习信息

用户登录系统后&#xff0c;进入查询学生信息界面&#xff0c;输入查询字段值&#xff0c;点击查询按钮后&#xff0c;展示查询到的学生信息&#xff0c;可以重新输入字段值进行查询。 查询学生信息属于学生信息管理的子菜单&#xff0c;可以根据学号、姓名、性别查询。老师登录…

基于尚硅谷FreeRTOS视频笔记——6—滴答时钟—上下文切换

FreeRTOS滴答 FreeRTOS需要有一个时钟参照&#xff0c;并且这个时钟不会被轻易打断&#xff0c;所以最好选择systick 为什么需要时间参照 就是在高优先级任务进入阻塞态后&#xff0c;也可以理解为进入delay&#xff08;&#xff09;函数后&#xff0c;需要有一个时间参照&…

MCP服务,阿里云百炼,Cline,mysql-mcp-server,MCP通信原理

简介 MCP&#xff08;Model Context Protocol&#xff09;&#xff0c;模型上下文协议&#xff0c;是一种开放标准&#xff0c;用于将AI模型与外部数据源和工具建立安全的双向连接&#xff0c;它就像AI领域的USB-C接口&#xff0c;为AI模型提供了一种标准化方式来连接不同的数…

一个项目中多个Composer的使用方法

composer是依赖管理工具。 有时我们会在一个项目中使用到多个composer&#xff0c;且每个版本不同。 前提&#xff1a;例如项目xyz根目录vendor中存在阿里云的对应代码。我现在需要再composer腾讯云短信发送的SDK。 1、随便找个位置新建文件夹&#xff0c;存储腾讯云短信发送…

MCP 应用案例-网络设备批量管理

案例背景 需求痛点 企业需管理数百台跨地域网络设备&#xff08;交换机/路由器&#xff09;&#xff0c;传统方式存在&#xff1a; 人工SSH登录效率低脚本维护成本高&#xff08;不同厂商CLI语法差异&#xff09;状态监控依赖独立监控系统 解决方案 通过MCP协议构建智能网络…

国产之光DeepSeek架构理解与应用分析02

本专栏 国产之光DeepSeek架构理解与应用分析-CSDN博客 国产之光DeepSeek架构理解与应用分析02-CSDN博客 前置的一些内容理解 GPU TPU NPU的区别&#xff1f; 设计目的 GPU&#xff1a;最初是为了加速图形渲染而设计的&#xff0c;用于处理图像和视频数据&#xff0c;以提供高…

对美团leaf的初步学习

我的项目中使用的雪花算法生成的全局订单号。但是考虑到了雪花算法可能会由于时钟回拨导致生成的全局id重复。于是去研究了美团的leaf服务&#xff1a;Leaf——美团点评分布式ID生成系统 - 美团技术团队&#xff0c;并总结出该文章。 自己项目中的应用 由于对订单表做了分表&…

Nacos深度剖析与实践应用之-负载均衡

&#x1f4a1;简介 Nacos不仅提供服务注册与发现功能&#xff0c;还内置了强大的负载均衡能力。Nacos的负载均衡机制主要应用于服务消费者从服务注册中心获取服务实例列表后&#xff0c;如何选择其中一个实例进行调用的过程。 &#x1f9e0; 学习目的 这篇文章我们将探讨负载…

Photoshop安装与配置--简单攻略版

下载地址:Photoshop软件工具下载 安装完成后&#xff0c;即可运行Photoshop.exe&#xff1b;打开工具页面后&#xff0c;按照下面简单配置即可 1.编辑-》首选项-》常规 或者直接快捷键CtrlK 暂存盘&#xff1a;一定要设置为非C盘 2.性能 3.文件处理 以上配置比较基础&#xf…

桌面级OTA测试解决方案:赋能智能网联汽车高效升级

一、前言 随着智能网联汽车的快速发展&#xff0c;OTA&#xff08;Over-The-Air&#xff09;技术已成为汽车软件更新和功能迭代的关键手段。为确保OTA升级的可靠性、安全性和效率&#xff0c;构建一套高效、便捷的桌面级OTA测试解决方案至关重要。 本方案基于Vector先进的软硬…

PG,TRPO,PPO,GRPO,DPO原理梳理

强化学习方法的分类 一、基础概念 Policy Model&#xff08;Actor Model&#xff09;&#xff1a;根据输入文本&#xff0c;预测下一个token的概率分布&#xff0c;输出下一个token也即Policy模型的“动作”。该模型需要训练&#xff0c;是我们最终得到的模型&#xff0c;并由上…

Cursor新版0.49.x发布

小子看到 Cursor 0.49.x 版本正式发布&#xff0c;截止今天已经有两个小patch版本&#xff01;本次更新聚焦于 自动化Rules生成、改进的 Agent Terminal 以及 MCP 图像支持&#xff0c;并带来了一系列旨在提升编码效率和协作能力的改进与修复。 以下是本次更新的详细内容&…

每日算法-250419

每日算法 - 2024年4月19日 记录今天完成的LeetCode算法题。 1710. 卡车上的最大单元数 题目描述 思路 贪心 解题过程 目标是最大化卡车可以装载的单元总数。根据贪心策略&#xff0c;我们应该优先装载单位体积&#xff08;每个箱子&#xff09;包含单元数 (numberOfUnitsPerB…

PDF转excel+json ,vue3+SpringBoot在线演示+附带源码

在线演示地址&#xff1a;Vite Vuehttp://www.xpclm.online/pdf-h5 源码gitee前后端地址&#xff1a; javapdfexcel: javaPDF转excelhttps://gitee.com/gaiya001/javapdfexcel.git 盖亚/vuepdfhttps://gitee.com/gaiya001/vuepdf.git 后续会推出 前端版本跟nestjs版本 识别复…

如何高效使用 Text to SQL 提升数据分析效率?四个关键应用场景解析

数据分析师和业务人员常常面临这样的困境&#xff1a;有大量数据等待分析&#xff0c;但 SQL 编写却成为效率瓶颈。即使对于经验丰富的数据分析师来说&#xff0c;编写复杂 SQL 查询也需要耗费大量时间&#xff1b;而对于不具备 SQL 专业知识的业务人员&#xff0c;数据分析则更…

分享一个DeepSeek+自建知识库实现人工智能,智能回答高级用法。

这个是我自己搞的DeepSeek大模型自建知识库相结合到一起实现了更强大的回答问题能力还有智能资源推荐等功能。如果感兴趣的小伙伴可以联系进行聊聊&#xff0c;这个成品已经有了实现了&#xff0c;所以可以融入到你的项目&#xff0c;或者毕设什么的还可以去参加比赛等等。 1.项…

jangow靶机笔记(Vulnhub)

环境准备&#xff1a; 靶机下载地址&#xff1a; https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova kali地址&#xff1a;192.168.144.128 靶机&#xff08;jangow&#xff09;地址&#xff1a;192.168.144.180 一.信息收集 1.主机探测 使用arp-scan进行主机探…

PyTorch `flatten()` 和 `squeeze()` 区别

PyTorch flatten() 和 squeeze() 区别 在 PyTorch 里,flatten() 和 squeeze(0) 是两个不同的张量操作, 1. flatten() 方法 flatten() 方法用于把一个多维张量展开成一维张量。它会将张量里的所有元素按顺序排列成一个一维序列。 语法 torch.flatten(input, start_dim=

wordpress SMTP配置qq邮箱发送邮件,新版QQ邮箱授权码获取方法

新版的QQ邮箱界面不同了&#xff0c;以下是新版的设置方法&#xff1a; 1. 进入邮箱后&#xff0c;点右上角的设置图标&#xff1a; 2. 左下角的菜单里&#xff0c;选择“账号与安全” &#xff1a; 3. 然后如下图&#xff0c;开启SMTP 服务&#xff1a; 4. 按提示验证短信&am…

2025年最新版 Git和Github的绑定方法,以及通过Git提交文件至Github的具体流程(详细版)

文章目录 Git和Github的绑定方法与如何上传至代码仓库一. 注册 GitHub 账号二.如何创建自己的代码仓库&#xff1a;1.登入Github账号&#xff0c;完成登入后会进入如下界面&#xff1a;2.点击下图中红色框选的按钮中的下拉列表3.选择New repostitory4.进入创建界面后&#xff0…