1. JSP的7个动作指令
动作指令是运行时的动作,动作指令通常可以替换成JSP脚本,它只是JSP脚本的标准化写发。
JSP动作指令只要有七个:
- jsp:forward:执行页面转向,将请求的处理转发到下一个页面。
- jsp:param:用于传递参数,必须与其他支持参数的标签以前使用。
- jsp:include:用于动态引入一个JSP页面。
- jsp:plugin:用于下载JavaBean或Applet到客户端执行。
- jsp:useBean:创建一个JavaBean的实例。
- jsp:setProperty:设置JavaBean实例的属性值。
- jsp:getProperty:输出JavaBean实例的属性值。
1.1 forward指令
forward指令用于将页面响应转发到另外的页面。既可以转发到静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet。
JSP的forward指令的格式:
JSP1.0
<jsp:forward page="{relativeURL|<%=expression%>}"/>
JSP1.1
<jsp:forward page="relativeURL|<%=expression%>">
{<jsp:param.../>}
</jsp:forward>
第二种方法可以在转发的时候增加参数,参数可以通过HttpServletRequest类的getParameter()方法获取。
例:
下面的代码是跳转的初始也面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>forward 原始页</title>
</head>
<body>
<h1>foward 原始页</h1>
<jsp:forward page="/forward-result.jsp">
<jsp:param name="age" value="25" />
</jsp:forward>
</body>
</html>
在该页面中,指定了转向的目标页“forward-result.jsp”和传递到目标也的参数:参数名“age”,值“25”。
接下来是跳转目标页代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>跳转目标页</title>
</head>
<body>
<%=request.getParameter("age") %>
</body>
</html>
在跳转目标页中,获取age参数并显示
由图可见,执行forward指令时,也面的地址没有发生变化,但是,页面的内容却已经被目标页面的内容替换掉了。
1.2 include指令
这里的include指令区分于之前编译指令中的include指令,在编译指令中include指令是静态指令,会将目标页面的所有内容包含进原页面中,这里的include指令是动态的include指令。动态include指令不会导入目标页面的编译指令,只是导入页面的body部分的内容到原页面。
include的语法格式:
<jsp:inlcude page="{relativeURL|<%expression%>}" flush=:"true">
或者
<jsp:include page="{relativeURL|<%expression%>}" flush=:"true">
<jsp:param value="parameterName" name="parameterValue"/>
</jsp:include>
flush属性用于指定输出缓存是否转移到被导入文件中,如果指定为true,则包含在被导入文件中;如果指定为false,则包含在原文件中。JSP1.1以前只能设置在原页面。
第二种格式,可以在被导入页面中加入请求参数。
动态include和静态include的区别:
- 静态导入是将被导入页面的代码完全融入,而动态导入则在Servlet中使用include方法来引入被导入页面的内容。
- 静态导入时被导入页面的编译指令会起作用,而动态导入时被导入页面的编译指令失去作用,只是导入body部分的内容。
- 动态导入可以增加额外的参数。
1.3 useBean、setProperty、getProperty指令
这三个指令都是与JavaBean有关的指令,其中useBean指令用于在JSP页面中初始化一个Java实例:setProperty指令用于为JavaBean实例的属性设置值;setProperty指令用于输出JavaBean实例的属性。
useBean的语法:
<jsp:useBean id="name" class="classname" scope="page|request|session|application"/>
其中,id属性是JavaBean的实例名,class属性确定JavaBean的实现类,scope属性指定JavaBean实例的作用范围,该范围有一下四个值:
- page:该JavaBean实例仅在该页有效。
- request:该JavaBean实例在本次请求中有效。
- session:该JavaBean实例在本次session内有效。
- application:该JavaBean实例在本应用内一直有效。
setProperty指令的语法格式:
<jsp:getProperty name="BeanName" property="propertyName" value="value"/>
其中,name属性确定需要设定JavaBean的实例名;property属性确定需要设置的属性名,value属性确定要设置的属性值。
getProperty的语法格式:
<jsp:getProperty name="BeanName" property="propertyName"/>
其中,name属性确定需要输出的JavaBean的实例名;property属性确定需要输出的属性名。
实例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<jsp:useBean id="p1" class="webDemo1.Persion" scope="page"></jsp:useBean>
<jsp:setProperty property="name" value="lisi" name="p1" />
<jsp:setProperty property="age" name="p1" value="23" />
<jsp:getProperty property="name" name="p1" />
<jsp:getProperty property="age" name="p1" />
</body>
</html>
Persion类是一个具有name、age两个属性,并且对name、age都实现了set、get方法的java类。
除了使用指令,也可以通过使用脚本的方式来实现相同的功能:
<%@page import="org.apache.tomcat.util.http.fileupload.RequestContext"%>
<%@page import="webDemo1.Persion"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<jsp:useBean id="p1" class="webDemo1.Persion" scope="page"></jsp:useBean>
<jsp:setProperty property="name" value="lisi" name="p1" />
<jsp:setProperty property="age" name="p1" value="23" />
<jsp:getProperty property="name" name="p1" />
<jsp:getProperty property="age" name="p1" />
<%
Persion p2 = new Persion();
p2.setName("zhangsan");
p2.setAge(12);
// 将p2放到页面作用域
pageContext.setAttribute("p2", p2);
// 将p2放到当前请求作用域
request.setAttribute("p2", p2);
// 将p2放到session作用域
session.setAttribute("p2", p2);
// 将p2放到application作用域
application.setAttribute("p2", p2);
out.print(p2.getName());
out.print(p2.getAge());
%>
</body>
</html>
使用Java脚本一样能实现指令的功能,并且使用Java脚本也能将实例设置到不同的作用域中去。
1.4 plugin指令
plugin指令主要用于下载服务器的JavaBean或者Applet到客户端执行。由于程序在客户端执行,因此客户端必须安装虚拟机。由于plugin指令使用的不多,就暂时不过多研究。
1.5 param指令
param指令用于设置参数值,这个指令本身不能单独使用,它可以与下面三个指令结合使用:
- jsp:include
- jsp:forward
- jsp:plugin
当与include使用时,param将参数传递给被导入页面;当与forward结合使用时,将参数传入到转向的目标页面;当与plugin结合使用时,将参数传递到JavaBean实例或Applet实例。
param指令语法
<jsp:param value="value" name="paramName"/>