日期:2014-05-16  浏览次数:20357 次

JSP相关技术详解八(Jsp基础语法-Jsp的七个动作指令)
  动作指令与编译指令不间,编译指令是通知 Servlet 引擎的处理消息,而动作指令只是运行时的脚本动作。编译指令在将JSP 编译成 Servlet 时起作用:处理指令通常可替换成 Java脚本,是 JSP脚本的标准化写法。

JSP7 个 动作指令如下 :

jsp:forward: 执行页面转向,将请求的处理转发到下一个页面。
jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用。
jsp:include: 用于动态引入一个 JSP 页面。
jsp:p1ugin: 用于下载 JavaBean 或 Applet 到客户端执行。
jsp:useBean: 使用 JavaBean。
jsp:setProperty: 修改 JavaBean 实例的属性值。
jsp:getProperty: 获取 JavaBean 实例的属性值。

forward指令  
forward指令用于将页面响应转发给另外的页面。既可以转发给静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet。  

JSP的forward指令的格式如下。  
对于JSP 1.0,使用如下语法:  

<jsp:forward page="{relativeURL|<%=expression%>}"/>   
对于JSP 1.1以上,可使用如下语法:  
<jsp:forward page="{relativeURL|<%=expression%>}">  
{<jsp:param.../>}   
</jsp:forward>  

第二种语法用于在转发时增加额外的请求参数。增加的请求参数的值可以通过HttpServletRequest类的getParameter()方法获取。  
下面示例页面使用了forward动作指令来转发用户请求。  

<jsp:forward page="forward-result.jsp">  
<jsp:param name="age" value="29"/>  
</jsp:forward>  

将客户端请求转发到forward-result.jsp页面,转发请求时增加了一个请求参数:参数名为age,参数值为29。  
在forward-result.jsp页面中,使用request内置对象(request内置对象是HttpServletRequest的实例)来获取增加的请求参数值。  

<!-- 使用request内置对象获取age参数的值 -->  
<%=request.getParameter("age")%>  
 
执行forward指令转发请求时,客户端的请求参数不会丢失。
执行forward指令转发请求时,用户请求的地址没有发生变化,但页面内容完全变为被forward目标页的内容。
  
include指令  

include指令是一个动态include指令,也用于导入某个页面,它不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。  

下面是include动作指令的语法格式:  
<jsp:include page="{relativeURL│<%=expression%>}" flush="true"/>   
或者  
<jsp:include page="{relativeURL│<%=expression%>}" flush="true">   
<jsp:param name="parameterName" value="patameterValue"/>   
</jsp:include>  

flush属性用于指定输出缓存是否转移到被导入文件中。如果指定为true,则包含在被导入文件中;如果指定为false,则包含在原文件中。对于JSP 1.1旧版本,只能设置为false。  
对于第二种语法格式,则可在被导入页面中加入额外的请求参数。  
下面页面使用了动态导入语法来导入指定JSP页面。  

<!-- 使用动态include指令导入页面 -->  
<jsp:include page="scriptlet.jsp" />  

上面页面中粗体字代码使用了动态导入语法来导入了scriptlet.jsp。表面上看,该页面的执行效果与使用静态include导入的页面并没有什么不同。但查看jsp-include.jsp页面生成Servlet的源代码,可以看到如下片段:  
//使用页面输出流,生成HTML标签内容  
out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\ ">\r\n");  
out.write("<HTML>\r\n");  
out.write("<HEAD>\r\n");  
out.write("<TITLE>jsp-include测试</TITLE>\r\n");  
out.write("</HEAD>\r\n");  
out.write("<BODY>\r\n");  
//动态导入,直接引入scriptlet.jsp页面  
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response,   
"scriptlet.jsp", out);  
out.write("\r\n");  
out.write("</BODY>\r\n");  
out.write("</HTML>\r\n");  
out.write("\r\n");  
上面代码片段中粗体字代码显示了动态导入的关键:动态导入只是使用一个include方法来插入目标页面的内容,而不是将目标页面完全融入本页面中。
  
归纳起来,静态导入和动态导入有如下两点区别:
 

?   静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容。
  
?   静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。  
除此之外,执行include动态指令时,还可增加额外的请求参数。