JSP学习6-JSP动作元素

JSP动作元素

与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。

可用的标准动作元素如下:

语法描述
jsp:include在页面被请求的时候引入一个文件。
jsp:useBean寻找或者实例化一个JavaBean。
jsp:setProperty设置JavaBean的属性。
jsp:getProperty输出某个JavaBean的属性。
jsp:forward把请求转到一个新的页面。
jsp:plugin根据浏览器类型为Java插件生成OBJECT或EMBED标记。
jsp:element定义动态XML元素
jsp:attribute设置动态定义的XML元素属性。
jsp:body设置动态定义的XML元素内容。
jsp:text在JSP页面和文档中使用写入文本的模板

动作元素的属性

所有的动作要素都有两个共有属性:id属性和scope属性。

  • id属性:

    id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用。

  • scope属性:

    该属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命。

    以这个JavaBean元素为例来讲解:

    <jsp:useBean id="user" class="com.example.User" scope="session" />
    

    scope属性有四个可能的值:

    • page:在当前 JSP 页面内可见,Bean 的生命周期与页面相同。当页面处理完毕后,Bean 将被销毁。
      • 适用于只需要在单个 JSP 页面中使用的临时数据。
    • request:在同一次 HTTP 请求中可见,Bean 的生命周期与请求相同。当请求完成后,Bean 将被销毁。
      • 适用于处理表单提交或其他请求数据。适用于在多个 JSP 页面中共享数据,特别是在转发请求或包含页面的场景。
    • session:在用户的整个会话中可见,Bean 的生命周期与用户的会话相同。会话通常在用户关闭浏览器或超时后结束。
      • 适用于需要跨多个页面保持用户状态的数据,例如用户登录信息或购物车内容。
    • application:在整个 web 应用程序中可见,Bean 的生命周期与应用程序相同。适用于需要在所有用户和请求之间共享的数据。
    • 适用于存储全局配置信息或共享资源,例如数据库连接池或应用级别的统计信息。
  • class属性

  • type属性

  • beanName属性

  • ……


<jsp:include>动作元素

定义与语法

<jsp:include>动作元素用来包含静态和动态的文件。

前面提到了include指令,它是在JSP文件被转换成Servlet的时候引入文件。与include指令不同,该动作把指定文件插入正在生成的页面,插入文件的时间是在页面被请求的时候。

前者是编译时包含,包含的内容是静态部分,不会被动态加载,也就意味着每次请求不会处理;后者是运行时包含,每次请求时都会执行被包含页面的代码,并可以传递请求参数和上下文信息。(这里用的是JSP生命周期的知识)

语法格式如下:

<jsp:include page="相对 URL 地址" flush="true" />

动作属性

属性描述
page包含在页面中的相对URL地址。
flush布尔属性,定义在包含资源前是否刷新缓存区。

实例

编写两个文件date.jspmain.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<p>
   今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSP学习</title>
</head>
<body>

<h2>include 动作元素实例</h2>
<jsp:include page="date.jsp" flush="true" />

</body>
</html>

检查代码,路径是同一根路径,所以直接写date.jsp即可正确找到。

结果可想而知,能够正确包含:

image-20241101205656149


<jsp:useBean>动作元素

定义与语法

这也是另一个非常有用的动作元素,用来加载一个将在JSP页面中使用的JavaBean,使得我们可以发挥 Java 组件复用的优势。

语法如下:

jsp:useBean动作最简单的语法为:

<jsp:useBean id="name" class="package.class" />

在类载入后,我们就可以通过 jsp:setPropertyjsp:getProperty 动作来修改和检索bean的属性。

动作属性

相关属性如下:

属性描述
class指定Bean的完整包名。
type指定将引用该对象变量的类型。
beanName通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字。

实例

一共用到一个.java文件和一个JSP文件:

一个TestBean.java和一个useBean.jsp

TestBean.java
package com.test;

public class TestBean{
	private String message="你好呀周六";
	private int num=0;
	
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message=message;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	
}

千万别忘记把.java文件编译到WEB-INF的classes文件夹下,否则jsp在编译执行后会报ClassNotFoundException的错误,因为虚拟机无法直接执行.java代码,必须是字节码!

useBean.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>useBean动作测试</title>
</head>
<body>
<h2>调用JavaBean实例...</h2>

<jsp:useBean id= "test" class ="com.test.TestBean"/>

<jsp:setProperty name="test" 
				 property="message"
				 value="你好呀周五"/>
<jsp:setProperty name="test" 
				 property="num"
				 value="42"/> 
    
<h2>这是输出信息:</h2>
<jsp:getProperty name="test" property="message"/>
 

</body>
</html>
  • 对于基本数据类型(例如 intboolean 等),JSP 会尝试将传入的字符串转换为相应的基本类型。
  • 这是因为 JSP 的标签库是基于字符串处理的,JSP 的类型转换是通过字符串和 JavaBean 的 setter 方法进行的。
  • 如果传入的字符串不能被转换为目标类型(比如传入了非数字的字符串赋值给整型属性),会导致 NumberFormatException 等运行时错误。
  • 对于复杂的类型或需要特定格式的对象,你可能需要在 JSP 中进行额外处理,比如解析字符串或使用 JavaScript 在客户端进行验证。

<jsp:setProperty>动作元素

定义与语法

用于设置已经实例化的bean对象属性

根据使用位置不同分为 useBean外设置 和 useBean内设置

  • 在bean元素内部设置

    这种方式默认只会在新建Bean实例时候才会执行,如果是已经现存的Bean实例则不会受此语句影响。

    <jsp:useBean id="myName" ... >
    ...
       <jsp:setProperty name="myName" property="someProperty" .../>
    </jsp:useBean>
    
  • 在bean元素外设置

    和第一个方法不同,显而易见的是此种设置方式对于所有的Bean实例都有效,不论是已经存在的,还是新创建的,都会受到影响。

    <jsp:useBean id="myName" ... />
    ...
    <jsp:setProperty name="myName" property="someProperty" .../>
    

属性

属性描述
namename属性是必需的。它表示要设置属性的是哪个Bean。
propertyproperty属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
valuevalue 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。   value和param不能同时使用,但可以使用其中任意一个。
paramparam 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

实例

见useBean实例


<jsp:getProperty>动作元素

定义与语法

用于获取指定Bean属性的值,转换成字符串,然后输出(注意了!不同于getter,这个动作元素是直接输出了)。

语法格式如下:

<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>

属性

属性描述
name要检索的Bean域名称。Bean必须已定义。
property表示要提取Bean域的值

实例

见useBean实例


<jsp:forward> 动作元素

定义与语法

用于把请求转到另外的界面

语法格式如下所示:

<jsp:forward page="相对 URL 地址" />

动作属性

只有一个属性,即要跳转的界面的URL

属性描述
pagepage属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算,可以是一个JSP页面或者一个 Java Servlet.

实例

在第一个include元素处我们使用了两个jsp文件date.jspmain.jsp,其中前者保持不变,我们来改变main.jsp,把包含改成转发:

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSP学习</title>
</head>
<body>

<h2>forward 动作实例</h2>
<jsp:forward page="date.jsp" />

</body>
</html>

再次访问


<jsp:plugin>动作元素

定义和语法

用于生成浏览器插件嵌入代码的一个标准标签。它主要用于生成对 Java Applet 或其他插件的 HTML 代码,使得客户端能够在浏览器中正确加载和运行这些插件。

<jsp:plugin type="..." ...=... ... />

动作属性

属性描述
type指定要嵌入的插件类型,通常是 “applet”。
code表示插件的主类(Applet)的全限定名。
codebase指定查找插件类和资源的基本 URL。
width指定插件的宽度,以像素为单位。
height指定插件的高度,以像素为单位。
archive指定包含插件或 Java Applet 代码的 JAR 文件的 URL,用于优化加载。
alt当浏览器不支持插件时,显示的替代文本。
align插件的对齐方式,例如 left、right、top 等。

实例

<jsp:plugin type="applet" code="com.example.MyApplet" codebase="/applet" width="300" height="200">  
    <jsp:params>  
        <jsp:param name="param1" value="value1" />  
        <jsp:sparam name="param2" value="value2" />  
    </jsp:params>  
    <jsp:fallback>  
        <p>请安装 Java 插件以查看此内容。</p>  
    </jsp:fallback>  
</jsp:plugin>

<jsp:element><jsp:attribute><jsp:body>动作元素

这三个元素用于动态定义XML元素(在编译时是动态生成的,也就是标签),它们用于支持自定义标签的创建和使用。这些元素通常在用户定义的标签库中使用,允许开发者以更加灵活和动态的方式处理标签的属性和内容。

  • <jsp:element>:用于动态创建XML元素。
  • <jsp:attribute>:用于设置自定义标签的属性。
  • <jsp:body>:用于定义标签的主体内容。

运行实例参考↓

image-20241102151136882


<jsp:text>动作元素

用于在JSP页面中输出文本内容。它通常用于与自定义标签(Tag)搭配使用,以便输出不需要转换的文本。

nt>jsp:attributejsp:body`动作元素

这三个元素用于动态定义XML元素(在编译时是动态生成的,也就是标签),它们用于支持自定义标签的创建和使用。这些元素通常在用户定义的标签库中使用,允许开发者以更加灵活和动态的方式处理标签的属性和内容。

  • <jsp:element>:用于动态创建XML元素。
  • <jsp:attribute>:用于设置自定义标签的属性。
  • <jsp:body>:用于定义标签的主体内容。

运行实例参考↓

[外链图片转存中…(img-ukQB6fhx-1731553540612)]


<jsp:text>动作元素

用于在JSP页面中输出文本内容。它通常用于与自定义标签(Tag)搭配使用,以便输出不需要转换的文本。

不详细讲述,后面自定义标签中会学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值