一、动作元素语法:
与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。
利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。
<jsp:action_name attribute="value" />
动作元素基本上都是预定义的函数,JSP规范定义了一系列的标准动作,它用JSP作为前缀,可用的标准动作元素如下:
语法 | 描述 |
---|---|
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对象的寿命。 scope属性有四个可能的值: (a) page, (b)request, (c)session, 和 (d) application。
(一)jsp:include 动作标记
该动作把指定文件插入正在生成的页面。
语法如下:
<jsp:include page="{相对URL地址|<%=expression%>}" flush="true|false" />
或
<jsp:include page="{relativeURL|<%=expression%>}"
flush="true|false">
<jsp:param name="parameterName"
value="{parameterValue|<%=expression%>}"/>
</jsp:include>
参数可以从另外一个页面的getParameter方法获取。
page属性:指定要包含的文件的位置
flush属性:指示在读入包含内容之前是否清空如何现有的缓冲区。
jsp:include 动作 与 include指令不一样,插入文件的时间是在页面被请求的时候。
(二)jsp: forward 动作标记
jsp:forward动作把请求转到另外的页面。jsp:forward标记只有一个属性page。语法如下:
<jsp:forward page="相对 URL 地址" />
jsp:forward的转发操作都是在服务端进行的,不会引起客户端的二次请求。
<jsp:forward>实际上是调用了PageContext的forward方法。
示例如下:
<jsp:forward page="success.jsp">//跳转至success.jsp
<jsp:param name="user" value="<%=name%>" />//携带参数"user"
</jsp:forward>
(三)jsp:plugin 动作标记
此操作是用来产生客户端浏览器的特别标签(Object或者embed),可以使用它来插入Applet或者JavaBean。
一般来说<jsp:plugin>元素指定的对象是Applet还是Bean,同样也会指定class的名字,另外还会指定将从哪里下载这个Java插件。
示例如下:
<jsp:plugin type=applet code="efly.testMyApplet.class" codebase=".">
<jsp:params>
<jsp:param name="aParameterName" value="aParameterNameValue"/>
</jsp:params>
<jsp:fallback>
<p>Unable to load applet.</p>
</jsp:fallback>
</jsp:plugin>
<fallback>元素是一个新元素,在组件出现故障的错误是发送给用户错误信息。
(四)jsp:param 动作标记
此标记用来以"键-值"对的形式为其他标记提供附加信息。它和 < jsp : include>、 < jsp : forward>、<jsp:plugin>一起使用。
语法如下:
<jsp:param name="parameterName"
value="{parameterValue|<%=expression%>}"/>
(五)jsp:useBean 动作标记o
jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean。
语法如下:
<jsp:useBean id="name" class="package.class" scope="{page\request\session\application}"/>
id属性:指定此JavaBean实例对象的名称。
class属性: 指定此JavaBean类的全路径限定名(包名+类名)
scope属性: 指定此JavaBean 实例对象的存在范围(默认值page)
示例如下:
1.创建一个javaBean(UserName.java),代码如下:
package cn.edu.test;
public class UserBean {
public UserBean(){}
private String userName;
private String password;
private int age;
public String getUserName(){
return userName;
}
public void setUserName(String userName){
this.userName=userName;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password=password;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
}
2.创建一个注册页面reg.html提交表单到javabean.jsp,代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>用户信息</h1>
<hr>
<form action="javabean.jsp" method="post">
<label for="username">用户名:</label>
<input id="username" type="text" name="userName" placeholder="请输入用户名">
<br>
<label for="password">密 码:</label>
<input id="password" type="password" name="password" placeholder="请输入密码">
<br>
<label for="age">年 龄:</label>
<input id="age" type="text" name="age" placeholder="请输入年龄">
<br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
3.javabean.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="user" scope="page" class="cn.edu.test.UserBean"></jsp:useBean>
<jsp:setProperty property="*" name="user"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>javaBean示例</title>
</head>
<body>
<h1>注册成功</h1>
<hr>
<p><jsp:getProperty property="userName" name="user"/></p>
<p><jsp:getProperty property="password" name="user"/></p>
<p><jsp:getProperty property="age" name="user"/></p>
</body>
</html>
4.运行结果如下:
(六)jsp:setProperty 动作标记
jsp:setProperty用来设置已经实例化的Bean对象的属性。
第一种用法:jsp:useBean元素的外面(后面)使用jsp:setProperty。此时,不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行。
<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>
第二种用法:把jsp:setProperty放入jsp:useBean元素的内部。此时,jsp:setProperty只有在新建Bean实例时才会执行,如果是使用现有实例则不执行jsp:setProperty。
<jsp:useBean id="myName" ... >
...
<jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>
jsp:setProperty动作有下面四个属性,如下表:
属性 | 描述 |
---|---|
name | name属性是必需的。它表示要设置属性的是哪个Bean。 |
property | property属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。 |
value | value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。 value和param不能同时使用,但可以使用其中任意一个。 |
param | param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。 |
(七)jsp:getProperty 动作标记
jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。
语法如下:
<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>
(八)jsp:element/attribute/body/text 动作标记
<jsp:element> 、 <jsp:attribute>、 <jsp:body>动作元素动态定义XML元素。动态是非常重要的,这就意味着XML元素在编译时是动态生成的而非静态。
<jsp:text>动作元素允许在JSP页面和文档中使用写入文本的模板