前言:编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作。
JSP动作指令主要有如下7个。
- jsp:forward:执行页面转向,将请求的处理转发到下一个页面。
- jsp:param:用于传递参数,必须与其他支持参数的标签一起使用。
- jsp:include:用于动态引入一个JSP页面。
- jsp:plugin:用于下载JavaBean或Applet到客户端执行。
- jsp:useBean:创建一个JavaBean的实例。
- jsp:setProperty:设置JavaBean实例的属性值。
- jsp:getProperty:输出JavaBean实例的属性值。
1. forward指令
<jsp:forward page="{relativeURL|<%=expression%>}">
{<jsp:param.../>}
</jsp:forward>
转发参数请求
<jsp:forward page="forward-result.jsp">
<jsp:param name="age" value="29"/>
</jsp:forward>
结果页获取参数值
<%=request.getParameter("age")%》
执行forward指令转发请求时,客户端的请求参数不会丢失。
2. include指令
include指令是一个动态include指令,也用于包含某个页面,他不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。
<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
<jsp:param name="parameterName" value="parameterValue"/>
</jsp:include>
动态导入只是使用一个include方法来插入目标页面的内容,而不是将目标页面完全融入本页面中。
静态导入和动态导入有如下区别:
- 静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来导入被导入页面的内容。
- 静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容
- 动态包含还可以增加额外的参数。同forward指令
forward指令和include指令十分相似,他们的区别在于:执行forward时,被forward的页面将完全代替原有页面;而执行include时,被include的页面只是插入原有页面。简而言之,forward那不表页面代替原有页面,而include则拿目标页面插入原有页面。
3. useBean、setProperty、getProperty指令
这三个指令都是与JavaBean相关的指令,其中useBean指令用于在JSP页面中初始化一个Java实例;setProperty指令用于为JavaBean实例的属性设置值;getProperty指令用于输出JavaBean实例的属性。
<jsp:useBean id="name" class="classname" scope="page|request|session|application"/>
其中id属性是JavaBean的实例名,class属性确定JavaBean的实现类。scope属性用于指定JavaBean实例的作用范围,该范围有以下4个值。
- page:该JavaBean实例仅在该页面有效。
- request:该JavaBean实例在本次请求有效。
- session:该JavaBean实例在本次session内有效。
- application:该JavaBean实例在本应用内一直有效。
setProperty语法如下
<jsp:setProperty name="BeanName" property="propertyName" value="value"/>
gerProperty语法如下
<jsp:getProperty name="BeanName" property="propertyName"/>
<@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Java Bean测试</title>
</head>
<body>
<!-- 创建Person的实例,该实力的实例名为p1-->
<jsp:useBean id="p1" class="Person" scope="page"/>
<!-- 设置p1的name属性值 -->
<jsp:setProperty name="p1" property="name" value="XYB"/>
<!-- 输出p1的name属性值 -->
<jsp:getProperty name="p1" property="name"/>
</body>
</html>
注:Person类省略,Person类中有name字段和setName() getName()方法
以上代码还可以如下表示
<@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Java Bean测试</title>
</head>
<body>
<%
//实例化JavaBean实例,实现类为Person,该实例的实例名为p1
Person p1=new Person();
//将p1放入page范围中
pageContext.setAttribute("p1",p1);
//设置p1的name属性值
p1.setName("wawa");
%>
<!-- 输出p1的name属性值 -->
<%=p1.getName()%>
</body>
</html>
//将p1放入page的生存范围内
pageContext.setAttribute("p1",p1);
//将p1放入request的生存范围内
request.setAttribute("p1",p1);
//将p1放入session的生存范围内
session.setAttribute("p1",p1);
//将p1放入application的生存范围中
application.setAttribute("p1",p1);
4. plugin指令
plugin指令主要用于下载服务器端的JavaBean或Applet到客户端执行
5. param指令
param指令必须与以下三个指令结合使用
- jsp:include
- jsp:forward
- jsp:plugin
当与include指令结合使用时,param指令用于将参数值传入被导入的页面;当与forward指令结合使用时,param指令用于将参数值传入被转向的页面;当与plugin指令结合使用时,则用于将参数传入页面中的JavaBean实例或Applet实例。
语法格式参考前面的示例。