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

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

在这里插入图片描述

相关文章:

  • Tracepoints for the VFS?
  • 通过docker create与export来分析诊断故障镜像
  • 8 编程笔记全攻略:Markdown 语法精讲、Typora 编辑器全指南(含安装激活、基础配置、快捷键详解、使用技巧)
  • day46——两数之和-输入有序数组(LeetCode-167)
  • PHP怎样连接MySQL数据库?
  • python函数之间嵌套使用yield
  • sqli-labs之Less-7 GET注入写shell
  • CPU与GPU之间的交互
  • 【C++】新手入门指南(上)
  • Linux-进度条小程序
  • webpack 中 chunks详解
  • 论文降重GPT指令-实侧有效从98%降低到8%
  • SQL注入相关知识
  • 【解决】torch引入过程中的ImportError: __nvJitLinkAddData_12_1, version libnvJitLink.so.12
  • 阿里云Clickhouse 冷热数据分层存储 实战记录
  • 递归下降 ll(1) 型文法 识别二元组文法分析
  • 从零开始学习 Lucene.Net:.NET Core 中的全文搜索与索引管理
  • [密码学基础]GMT 0002-2012 SM4分组密码算法 技术规范深度解析
  • Windows系统C盘深度清理指南
  • 指令与权限
  • 接续驰援,中国政府援缅卫生防疫队出发赴缅
  • 伊朗艺术中的中国风
  • 历史学家许福谦逝世,长期致力于魏晋南北朝史研究
  • 张巍|另眼看古典学⑩:再创作让古希腊神话重获生机——重述厄勒克特拉
  • 新华每日电讯写在浦东开发开放35周年之际:改革开放为笔,绘就崭新传奇
  • 锦州4名少年偷手机89部还发视频炫耀,店主:贼抓了又放,手机向谁要