与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。利用JSP动作可以动态地插入文件,重用JavaBean组件,把用户重定向到另外的页面,为Java插件生成HTML代码。
1.<jsp:include>
include动作用于在JSP页面中包含其他的动态或是静态资源,一般称为动态包含。使用规则如下:
<jsp:include page="relativeURL" flush="true|false"/>
其中,page属性是必须的,表示需要包含的页面资源路径;flush属性可选,表示在引入其他资源前是否将当前页面的输出流中的内容输出,并清空缓冲区。默认为false。
通过<jsp:include>动作包含进来的资源和通过include指令<%@include file= ""%>包含进来的资源工作原理不一样,主要区别如下:
(1)include指令包含的内容会在JSP页面翻译阶段被替换到所包含的JSP页面中。
(2)include动作中,包含的资源是在请求处理阶段被添加到当前页面的响应输出流中,也就是说包含的资源是作为被执行以后的输出信息被添加到当前页。
【例2.5】新建两个页面date.jsp和main.jsp,在main.jap中动作包含date.jsp页面,显示日期。
(1)在WebContent目录下新建date.jsp和main.jsp,其内容分别如下所示。
date.jsp内容如下:
main.jsp内容如下:
(2)启动Tomcat,在浏览器地址栏输入http://localhost:8080/JSP_Demo/main.jsp,运行结果如图2.13所示。
图2.13 include动作指令运行结果(www.xing528.com)
下面以上述例子说明指令包含和动作包含的区别:
访问main.jsp时,在执行到<jsp:include>标签时,JSP引擎会首先处理date.jsp页面,即将date.jsp转换成Servlet代码,然后执行。在date.jsp页面显示结果只有“今天是:2018-9-7 16:42:43”,所以此时“今天是:2018-9-7 16:42:43”被加到main.jsp输出流中,接下来继续执行main.jsp中余下的代码。
如果将include动作换成include指令包含<%@ include file= "date.jsp"%>,对于页面的显示没有区别,但在处理的时候不同。date.jsp文件中的<%=(new java.util.Date()).toLocaleString()%>将直接会被加到main.jsp文件当中,替代<%@ include file="date.jsp"%>位置,中间不会对date.jsp进行单独编译和执行。
通过<jsp:include>动作包含的文件,Web服务器将会根据包含的文件个数,生成多个相对应的Servlet文件。而通过<%@ include file="date.jsp"%>指令包含的文件,无论包含的文件个数多少,服务器编译时只会生成一个目标Servlet类。
另外,由于include指令包含的页面是在编译阶段导入的,所以不能在此指令中使用JSP表达式,例如<%@include file="<%=expression%>"%>是不能被正确执行的。但是使用<jsp:include>动作则没有这个限制。
2.<jsp:forward/>
在JSP中如果需要将请求转发到其他的Web组件,则可以使用下列标签:<jsp:forward page="relativeURL"/>,page属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算,可以是一个JSP页面或者一个Java Servlet。
【例2.6】将例2.5中main.jsp的包含指令替换为<jsp:forward page="date.jsp"/>,
然后在浏览器地址栏输入http://localhost:8080/JSP_Demo/main.jsp,运行结果如图2.14所示。
图2.14 forward指令运行结果
3.<jsp:param/>
<jsp:param/>标签只能用在<jsp:include/>与<jsp:forward/>标签内部,用来向包含的文件或者转向的资源传递参数。例如:
表示向test.jsp传递名为username,值为john参数。在包含或是转发的页面当中可以通过request.getParameter("username");方法获取它的对应的值。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。