JSP提供了一种称之为Action的元素,在JSP页面中使用Action元素可以完成各种通用的JSP页面功能。Action元素采用XML元素的语法格式,所以,干脆将Action元素称之为JSP标签。
1、<jsp:include>标签
<jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。简单理解是:翻译当前JSP页面时,遇到这条语句,调用一个include方法,把引入文件包含进来,并不会把引入的文件翻译后的Servlet代码包含在当前JSP页面翻译的Servlet中。其语法如下:
<code class="hljs erb" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style=""><</span></span><span class="hljs-name" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-name" style="">jsp:include</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style=""> </span></span><span class="hljs-attr" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-attr" style="">page</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style="">=</span></span><span class="hljs-string" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-string" style="">"relativeURL | <%=</span></span></span></span></span></span><span class="ruby" style="">表达式</span><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-string" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-string" style="">%>"</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style=""> </span></span><span class="hljs-attr" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-attr" style="">flush</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style="">=</span></span><span class="hljs-string" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-string" style="">"true | false"</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style=""> /></span></span></span></span></code>
其中,page属性用于指定被引入资源的相对路径,也可以通过执行一个表达式来获得,flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面已输出的内容刷新到客户端,其默认值是false,表示先不刷新已输出的内容。
<jsp:include>标签与include指令的比较:
<jsp:include>标签的作用类似RequestDispatcher.include方法,被引入页面不能改变响应状态码,也不能设置响应头。include指令没有这方面限制。
<jsp:include>标签的执行效率低于include指令,但灵活性要好很多。
<jsp:include>标签对JSP引擎翻译JSP页面的过程没有影响,例如,引入页面的page指令不影响被引入页面的page指令。include指令则对JSP引擎翻译JSP页面的过程起作用。
详细:http://www.jb51.net/article/47606.htm
注意:<jsp:include>标签的page属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前Web应用程序的根目录,否则表示相对于当前页面的访问路径(不是相对于文件的硬盘路径)。
<jsp:include>标签的特性
included.jsp
<code class="hljs erb" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style=""><</span></span><span class="hljs-name" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-name" style="">%</span></span></span></span></span></span><span class="ruby" style=""><span class="ruby" style="">@ page contentType=</span><span class="hljs-string" style=""><span class="ruby" style=""><span class="hljs-string" style="">"text/html;charset=GB2312"</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style="">%></span></span></span><span class="xml" style="">
</span><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style=""><</span></span><span class="hljs-name" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-name" style="">%</span></span></span></span></span></span><span class="ruby" style=""><span class="ruby" style="">Thread.sleep(</span><span class="hljs-number" style=""><span class="ruby" style=""><span class="hljs-number" style="">5000</span></span></span><span class="ruby" style="">);</span></span><span class="xml" style=""><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style="">%></span></span></span><span class="xml" style="">
included.jsp内的中文</span><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style=""><</span></span><span class="hljs-name" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-name" style="">br</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style="">></span></span></span></span></code>
dynamicInclude.jsp
<code class="hljs erb" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style=""><</span></span><span class="hljs-name" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-name" style="">%</span></span></span></span></span></span><span class="ruby" style=""><span class="ruby" style="">@ page contentType=</span><span class="hljs-string" style=""><span class="ruby" style=""><span class="hljs-string" style="">"text/html;charset=GB2312"</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style="">%></span></span></span><span class="xml" style="">
dynamicInclude.jsp内的中文</span><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style=""><</span></span><span class="hljs-name" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-name" style="">br</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style="">></span></span></span><span class="xml" style="">
</span><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style=""><</span></span><span class="hljs-name" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-name" style="">jsp:include</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style=""> </span></span><span class="hljs-attr" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-attr" style="">page</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style="">=</span></span><span class="hljs-string" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-string" style="">"included.jsp"</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style=""> </span></span><span class="hljs-attr" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-attr" style="">flush</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style="">=</span></span><span class="hljs-string" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-string" style="">"true"</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style=""> /></span></span></span></span></code>
用浏览器访问dynamicInclude.jsp页面,浏览器首先显示出dynamicInclude.jsp页面输出的内容,等待5秒后,才又显示出included.jsp页面的输出内容。
修改dynamicInclude.jsp文件,去掉flush属性设置,用浏览器重新访问dynamicInclude.jsp页面,浏览器等待5秒以后同时显示出了dynamicInclude.jsp和included.jsp页面的内容。
总结:
RequestDispatcher.include方法:调用该方法前后,写入到缓冲区的内容可以被输出到客户端。
RequestDispatcher.forward方法(不能有内容已经被输出到客户端):调用该方法前,写入到缓冲区的内容被清空,调用该方法后,写入操作被忽略。所以在调用者程序中写入到缓冲区的内容都不会被输出到客户端。
Request.sendRedirect方法(不能有内容已经被输出到客户端):在调用该方法前后写入到缓冲区的内容都会被清空。
2、<jsp:forward>标签
<jsp:forward>标签用于把请求转发给另外一个资源,其语法如下:
<code class="hljs erb" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="xml" style=""><span class="hljs-tag" style=""><</span></span><span class="hljs-name" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-name" style="">jsp:forward</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style=""> </span></span><span class="hljs-attr" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-attr" style="">page</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style="">=</span></span><span class="hljs-string" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-string" style="">"relativeURL | <%=</span></span></span></span></span></span><span class="ruby" style="">表达式</span><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-string" style=""><span class="xml" style=""><span class="hljs-tag" style=""><span class="hljs-string" style="">%>"</span></span></span></span><span class="xml" style=""><span class="hljs-tag" style=""> /></span></span></span></span></code>
其中,page属性用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式来获得。
<jsp:forward>标签实际上被翻译成了调用PageContext.forward方法的语句,并在调用forward方法后使用return语句结束了service方法的执行流程,从而不再执行<jsp:forward>标签后面的语句。