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

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

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.xdnf.cn/news/27271.html

相关文章:

  • 怎么查看LLM Transformer 架构进行并行计算和设备映射
  • 海量聊天数据处理:基于Spring Boot与SharingJDBC的分库分表策略及ClickHouse冷热数据分离
  • React 第三十三节 ReactRouter 中 useSearchParams 使用详解及注意事项
  • 【数据结构】二叉搜索树
  • SQL注入相关知识
  • 深度解析接口:构建代码规范与实现多态的基石
  • docker转移镜像
  • db中查询关于null的sql该怎么写
  • 测试模板1
  • Linux—I/O复用---select、poll、epoll
  • 学习笔记十八——Rust 封装
  • mysql8.0.17以下驱动导致mybatis blob映射String乱码问题分析与解决
  • 实现AWS Lambda函数安全地请求企业内部API返回数据
  • 嵌入式单片机开发 - 嵌入式系统中 Flash(闪存)与 RAM(随机存储器)
  • 《JVM考古现场(二十三):归零者·重启奇点的终极奥义》
  • 【Java面试系列】Spring Boot微服务架构下的分布式事务处理与性能优化 - 2025-04-19详解 - 3-5年Java开发必备知识
  • JVM 系列:JVM 内存结构深度解析
  • 基础数学知识-线性代数
  • 蓝桥杯之递归二
  • 洛谷题目:P8624 [蓝桥杯 2015 省 AB] 垒骰子 题解 (本题简)
  • 纯FPGA实现AD9361控制的思路和实现 UART实现AXI_MASTER
  • 实现Azure Synapse Analytics安全地请求企业内部API返回数据
  • @EnableAsync+@Async源码学习笔记之二
  • @EnableAsync+@Async源码学习笔记之三
  • 系统思考:危机中的转型机遇
  • STM32单片机入门学习——第43节: [12-3] 读写备份寄存器实时时钟
  • STM32 外部中断EXTI
  • 爬虫入门与requests库的使用——python爬虫
  • XCVU13P-2FHGA2104I Xilinx Virtex UltraScale+ FPGA
  • 额外篇 非递归之美:归并排序与快速排序的创新实现