JSP 动作元素
JSP动作元素在请求处理阶段起作用,由XML语法写成。
利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。
动作元素只有一种语法,它符合XML标准:
<jsp:动作 属性="value" 属性="value"······ />
JSP基本动作包括:
- jsp:include 向当前页面中包含其他的文件(包括动态&&静态)
- jsp:useBean 寻找或者实例化一个JavaBean
- jsp:setProperty 设置JavaBean的属性。
- jsp:getProperty 输出某个JavaBean的属性。
- jsp:forward 把请求转到一个新的页面。
- jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。
- jsp:param 为其他标识传递参数
<jsp:include>动作(包含文件)
把指定文件插入正在生成的页面,插入文件的时间是在页面被请求的时候。
<jsp:include page="相对 URL 地址" flush="true/false" />
或者
<jsp:include page="相对 URL 地址" flush="true/false" >
子动作标识<jsp:param>
</jsp:include>
- page:插入到页面中的文件的相对URL地址。
- flush:在包含资源前是否刷新缓存区,默认为false。(可选)
- 子动作标识<jsp:param>:用于向被包含的动态页面中传递参数。
示例:使用<jsp:include>动作元素在test04.jsp中插入test04_data.jsp
test04.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:include page="test04_data.jsp" flush="true"/>
</body>
</html>
test04_data.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
<jsp:param>
<jsp:param> 可以作为其他标识的子标识,用于为其他标识传递参数。
<jsp:param name="参数名" value="参数值"/>
示例:通过<jsp:param>标识为<jsp:forward>标识传递参数
<jsp:forward page="test.jsp">
<jsp:param name="userId" value="kris"/>
</jsp:forward>
上述代码在请求转发到test.jsp页面的同时,传递了参数userId,其值为kris
说明:通过<jsp:param>动作标识指定的参数,将以“参数名=值”的形式被加入到请求中,它的功能与在文件名后面直接加“?参数名=参数值”是相同的。
<jsp:useBean>动作
jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean。
jsp:useBean动作最简单的语法为:
<jsp:useBean id="name" class="package.class" />
语法含义:创建一个由class属性指定的类的实例,然后将它绑定到其名字由id属性给出的变量上。
<jsp:useBean>的五个属性:
- id:命名采用该 Bean 的变量,如果能够找到 id 和 scope 相同的 Bean 实例,<jsp:useBean>动作将使用已有的 Bean 实例而不是创建新的实例。
- class:指定 Bean 的完整包名
- scope:指定 Bean 在哪种上下文可用,可以取page、request、session、application四个值之一。默认为 page,表示该 Bean 只在当前页面可用(保存在当前页面的PageContext内)。
- type:指定引用该对象的变量类型,它必须是Bean类的名字、超类的名字、该类所实现的接口名字之一。(变量的名字是由id指定的)
- beanName:指定Bean的名字。
实例:创建个Student.java的 JavaBean,该类定义了三个属性。代码如下
package com.health;
public class Student {
private String name;
private String grade;
private String major;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
}
创建一个JSP页面student.jsp,在该页使用<jsp:useBean>载入该JavaBean。代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test useBean</title>
</head>
<body>
<jsp:useBean id="stu" scope="page" class="com.health.Student">
<%
stu.setName("小丽");
stu.setGrade("17软工4班");
stu.setMajor("软件工程");
%>
</jsp:useBean>
<h2 align="center">显示javaBean中的信息</h2>
<hr>
<%=stu.getName() %>
<%=stu.getGrade() %>
<%=stu.getMajor() %>
</body>
</html>
<jsp:forward>动作(请求转发)
jsp:forward动作把请求转到另外的Web资源(页面,Servlet等),执行请求转发后当前页面将不再被执行。jsp:forward标记只有一个属性page,page的值既可以直接给出,也可以在请求的时候动态计算。语法格式如下所示:
<jsp:forward page="相对 URL 地址" />
实例:在test05.jsp中使用<jsp:forward>重定向请求到test04_data.jsp
test05.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>我是test05</h1>
<jsp:forward page="test04_data.jsp"/>
<h1>我是test05</h1>
</body>
</html>
test04_data.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
<jsp:setProperty>和<jsp:getProperty>动作
jsp:setProperty用来设置已经实例化的Bean对象的属性。
jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。
这两个动作必须 <jsp:useBean>动作一起使用,且要在<jsp:useBean>后面使用
1.<jsp:setProperty>
<jsp:setProperty>的 name 的值应当和<jsp:useBean>中的 id 的值相同
该动作有四个属性:
- name:name属性是必需的。它表示要设置属性的是哪个Bean。
- property:property属性是必需的。它表示要设置哪个 javaBean 属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
- value:value 属性是可选的。该属性用来指定Bean属性的值。
- param:param 是可选的。它指定用哪个请求参数 (request对象中的参数名) 作为Bean属性的值。
注意:value和param不能同时使用,但可以使用其中任意一个。
实例:输入信息,使用<jsp:setProperty>存取信息并回显出来
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="test06.jsp" method="post">
姓名:<input type="text" name="name"/><br/>
班级:<input type="text" name="grade"/><br/>
专业:<input type="text" name="major"/><br/>
<input type="submit" value="提交"/>
<input type="reset" value="取消"/>
</form>
</body>
</html>
test06.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test setProperty</title>
</head>
<body>
<jsp:useBean id="stu" scope="page" class="com.health.Student"/>
<jsp:setProperty property="*" name="stu"/>
<!--上述使用"*"与下面这三行,效果相同
<jsp:setProperty property="name" name="stu"/>
<jsp:setProperty property="grade" name="stu"/>
<jsp:setProperty property="major" name="stu"/>
-->
<!-- Tomcat中对于post方法提交的表单采用的默认编码为ISO-8859-1,而这种编码格式不支持中文字符 -->
姓名:<%=new String(stu.getName().getBytes("ISO-8859-1"), "utf-8")%>
班级:<%=new String(stu.getGrade().getBytes("ISO-8859-1"), "utf-8")%>
专业:<%=new String(stu.getMajor().getBytes("ISO-8859-1"), "utf-8")%>
</body>
</html>
2.<jsp:getProperty>
该动作提取指定Bean属性的值,转换成字符串,然后输出。
例如,下面两段代码效果是相同的
姓名:<%=stu.getName() %>
班级:<%=stu.getGrade() %>
专业:<%=stu.getMajor() %>
<jsp:getProperty property="name" name="stu"/>
<jsp:getProperty property="grade" name="stu"/>
<jsp:getProperty property="major" name="stu"/>
上述代码中 name 是JavaBean的名字,即 <jsp:useBean>中 id 的值;property是所指定的JavaBean的属性名。