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
(有name
和age
属性,及对应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
非常感谢您的阅读,喜欢的话记得三连哦 |