JSP基本语法
- JSP基本语法的学习包括JSP页面的基本结构、JSP的脚本元素、JSP的指令和JSP的常用动作。
4. JSP常用动作
- 当客户请求JSP页面时,可以利用JSP动作动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面。动作元素名和属性名都是大小写敏感的。JSP规范定义了一系列标准动作,使用 jsp 作为前缀。其中常用的动作有
<jsp:param>、<jsp:include>、<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>、<jsp:forward>
。
(1)<jsp:param>
动作
<jsp:param>
动作可以用于<jsp:include>、<jsp:forward>
动作体中,为其它动作传送一个或多个参数。<jsp:param>
动作的语法格式为:<jsp:param name = "参数名" value = "参数值"/>
。
name属性 | name属性用于指定参数名称,不可以接受动态值 |
---|---|
value属性 | value属性用于指定参数值,可以接受动态值 |
(2)<jsp:include>
动作
<jsp:include>
动作用来把指定文件动态插入正在生成的页面中。该动作的语法格式为:<jsp:include page = "文件名" flush = "true"/>
或者为
<jsp:include page = "文件名" flush = "true">
<jsp:param name = "参数" value = "参数值"/>
</jsp:include>
page属性 | page属性指定所包含资源的相对路径,可以接受动态值 |
---|---|
flush属性 | flush属性指定在包含目标资源之前是否刷新输出缓冲区,默认值为false,不可以接收动态值 |
-
<jsp:include>
动作允许包含静态文件和动态文件,这两种包含文件的效果是不同的。如果包含文件是静态文件,那么这种包含仅仅是把包含文件的内容添加到JSP文件中去,这个文件不会被JSP编译器执行;如果包含文件是动态的,那么这个被包含文件也会被JSP编译器执行。 -
include 指令和 include 动作都能实现将外部文档包放到JSP文档中的功能,名称相似,但也有区别。如下:
include 指令 include 指令可以在JSP页面转换成Servlet 之前,将JSP代码插入其中 include 动作 include 动作是当主页面被请求时,将其他页面的输出包含进来 区别 根本不同在于它们调用的时间,动作是在页面请求间被激活,指令是在页面转换期间被激活。动作比指令容易维护,指令比动作的功能更强大、执行速度也稍快
(3)<jsp:useBean>
动作
<jsp:useBean>
动作用来加载在JSP页面中使用到的JavaBean。这个功能能实现JavaBean组件的重用。<jsp:useBean>
动作的语法格式为:<jsp:useBean id="Bean实例名称" scope="page|request|session|application" class="JavaBean类" type="对象变量的类型" beanName = "Bean名字"/>
3.1:id 属性
- id 属性指定该 JavaBean 的实例名称,不可接受动态值。如果能够找到 id 和 scope 相同的 Bean 实例,
<jsp:useBean>
动作将会使用已有的 Bean 实例而不是创建新的实例。
3.2:scope 属性
- scope 属性指定Bean的作用域,一个作用域内 id 属性的值是唯一的,即一个作用域内不能有两个一样的 id 值,不可以接受动态值,可选作用域有 page、request、session 和 application。
- 默认值是 page ,表示该 Bean 只在当前页面内可用(保存在当前页面的 PageContent 内);request 表示该 Bean 在当前的客户请求内有效(保存在 ServletRequest 对象内);session 表示该 Bean 对当前 HttpSession 内的所有页面都有效,即会话作用域;application 表示该 Bean 在任何使用相同的 application 的JSP页面中有效,即整个程序范围内有效。
3.3:class 属性
- class 属性指定 Bean 的类路径和类名,不可接受动态值,这个 class 不能是抽象的。
3.4:type 属性
- type 属性指定应用该对象的变量的类型,它必须是 Bean 类的名字、超类名字、该类所实现的接口名字之一。变量的名字是由 id 属性决定的。
3.5:beanName 属性
- beanName 属性用于指定 Bean 的名字,可以接受动态值。beanName 属性必须与 type 属性结合使用,不能与 class 属性同时使用。举个例子:
<body>
<hr>
<jsp:useBean id = "time" type = "java.io.Serializable" beanName = "java.util.Date"/>
现在时间:<%=time%>
<hr>
</body>
(4)<jsp:setProperty>
动作
<jsp:setProperty>
动作用来设置、修改已实例化 Bean 中的属性值。该动作的语法格式为:<jsp:setProperty name = "Bean的名称" property = "*"|property = "属性"[param = "属性"|value = "值"]/>
4.1:name 属性
- name 属性是必需的,表示要设置的是哪个 Bean 的,不可接受动态值。
4.2:property 属性
- property 属性是必需的。表示要设置哪个属性。如果 property 的值是 *,表示所有的名字和 Bean 属性名字匹配的请求参数都将被传递给相应属性的 set 方法。
4.3:param 属性
- param 属性是可选的。指定用哪个请求参数作为 Bean 属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把 null 传递给 Bean 属性的 set 方法。因此,可以让Bean自己提供默认属性值,只有在请求参数明确指定了新值时才修改默认属性值。
<body>
<hr>
<jsp:useBean id = "time" class = "java.util.Date">
<jsp:setProperty name = "time" property = "hours" param = "hh"/>
<jsp:setProperty name = "time" property = "minutes" param = "mm"/>
<jsp:setProperty name = "time" property = "seconds" param = "ss"/>
</jsp:useBean>
</body>
4.4:value 属性
- value 属性是可选的。该属性用来指定 Bean 属性的值。value 和 param 不能同时使用,但可以使用其中任意一个。
(5)<jsp:getProperty>
动作
<jsp:getProperty>
动作获取指定的 Bean 属性值并转换成字符串输出。该动作的语法格式为:<jsp:getProperty name = "Bean 的名称" property = "Bean 的属性">
- 该动作可以获取 Bean 的属性值,并可以将其使用或显示在JSP页面中。在使用该动作之前,必须用
<jsp:useBean>
创建实例化对象。
5.1:name 属性
- name 属性指定要获取的 Bean 名称,不能接受动态值。
5.2:property 属性
- property 属性指定要获取的 Bean 属性名,不能接受动态值。
5.3:举个例子
(6)<jsp:forward>
动作
<jsp:forward>
动作用于转发客户端的请求到另一个页面或者另一个Servlet 文件中去。该动作的语法格式为:<jsp:forward page = "地址或者页面"/>
<jsp:forward>
动作可以包含一个或多个<jsp:param>
子动作,用于向要引导进去的页面传递参数。当<jsp:forward>
动作发生时,如果已经有文本被写入输出流而且页面没有设置缓冲,将抛出异常。- page 属性指定资源的相对路径,可接受动态值。