JSP简单入门(2)

六、行为元素(JSP标签,简述)

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>标签后面的语句。

本文分享自微信公众号 - Java帮帮(javahelp)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-12-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JSP简单入门(1)

    JSP页面中可以包含模板元素、脚本元素、EL表达式、注释、指令、和行为元素(JSP标签)等内容。有三种类型的脚本元素:JSP脚本片断、JSP表达式和JSP声明,...

    奋斗蒙
  • JSP简单入门(3)

    3、<jsp:param>标签 当使用<jsp:include>标签和<jsp:forward>标签引入或将请求转发给的资源是一个能动态执行的程序时,还可以使用...

    奋斗蒙
  • Java基础-day07-知识点相关题-自定义数据类型;ArrayList

    Java基础-day07-知识点相关题 一、定义类:包含main()方法,按以下要求编写程序: 1)实例化一个ArrayList,只存储String数据: 2)...

    奋斗蒙
  • JSP简单入门(1)

    JSP页面中可以包含模板元素、脚本元素、EL表达式、注释、指令、和行为元素(JSP标签)等内容。有三种类型的脚本元素:JSP脚本片断、JSP表达式和JSP声明,...

    奋斗蒙
  • JSP简单入门(3)

    3、<jsp:param>标签 当使用<jsp:include>标签和<jsp:forward>标签引入或将请求转发给的资源是一个能动态执行的程序时,还可以使用...

    奋斗蒙
  • Caffe学习:Blobs, Layers, and Nets

    -注意:网络结构是设备无关的,Blob和Layer=隐藏了模型定义的具体实现细节。定义网络结构后,可以通过Caffe::mode()或者Caffe::set_m...

    bear_fish
  • Linux下,删除大于固定大小的文件

    十四君
  • Java源码之ThreadLocal

    详细介绍一下ThreadLocal是如何实现为线程提供变量副本的,方便下面源码的理解: 首先我们要知道每个线程下都有一个私有变量map,当我们使用Thread...

    每天学Java
  • Huginn 环境搭建

    Huginn 是一个可以通过构建 agents 来帮你实现在线自动化任务的系统。它们可以理解 web,监听事件,按你所需地去执行一些行为。Huginn 的 ag...

    huginn 中文网
  • Atom主题插件美化教程

    对应的Themes就是可更换的主题。在这一共分为两块,UI Theme和Syntax Theme,一个是UI的,一个是文件语法的,这里可以选择相应的主题。

    慕白

扫码关注云+社区

领取腾讯云代金券