JSP动作元素用来控制JSP的行为,执行一些常用的JSP页面动作。通过动作元素可以实现使用多行Java代码能够实现的效果,如包含页面文件、实现请求转发等。
<jsp:include>动作元素
在JSP页面中,为了把其他资源的输出内容插入到当前JSP页面的输出内容中,JSP技术提供了<jsp:include>动作元素,<jsp:include>动作元素的具体语法格式如下所示。
<jsp:include page="relativeURL" flush="true|false" />
在上述语法格式中
page属性用于指定被引入资源的相对路径;
flush属性用于指定是否将当前页面的输出内容刷新到客户端若为true,则将当前页面在包含语句之前的输出内容先输出,不管被包含的内容是否编译处理完成;若为false,则要求当前页面的输出内容等待被包含内容编译处理完成后一起输出。
默认情况下,flush属性的值为false。
<jsp:include>包含的原理是将被包含的页面编译处理后将结果包含在页面中。当浏览器第1次请求一个使用<jsp:include>包含其他页面的页面时,Web 容器首先会编译被包含的页面,然后将编译处理后的返回结果包含在页面中,之后编译包含页面,最后将两个页面组合的结果回应给浏览器。
<jsp:include>动作元素使用
①创建included.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include动作元素</title>
</head>
<body>
<%Thread.sleep(5000); %>
included.jsp内的中文
<br>
</body>
</html>
②创建dynamicInclude.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>dynamicInclude</title>
</head>
<body>
<br>
dynamicInclude.jsp内的中文
<jsp:include page="included.jsp" flush="true" />
</body>
</html>
在浏览器访问dynamicInclude.jsp页面
先显示了dynamicInclude.jsp页面中的内容,5秒后才显示了Included.jsp页面中的内容
修改dynamicInclude.jsp中的flush属性为false,再次运行,等到5秒后,两者的输出内容同时输出
需要注意的是:用eclipse访问本代码会出现无论flush属性设置什么,都会同时输出两者内容
<jsp:include>与include指令的区别
需要注意的是,虽然include指令和<jsp:include>标签都能够包含一个文件,但它们之间有很大的区别,具体如下。
• <jsp:include>标签中要引入的资源和当前JSP页面是两个彼此独立的执行实体,即被动态引入的资源必须能够被Web容器独立执行。而include指令只能引入遵循JSP格式的文件,被引入文件与当前JSP文件需要共同合并才能翻译成一个Servlet源文件。
• <jsp:include>标签中引入的资源是在运行时才包含的,而且只包含运行结果。而include指令引入的资源是在编译时期包含的,包含的是源代码。
• <jsp:include>标签运行原理与RequestDispatcher.include()方法类似,即被包含的页面不能改变响应状态码或者设置响应头,而include指令没有这方面的限制。
<jsp:forward>动作元素
<jsp:forward>动作元素将当前请求转发到其他Web资源(HTML页面、JSP页面和Servlet等),在执行请求转发之后的当前页面将不再执行,而是执行该元素指定的目标页面。其具体语法格式如下所示。
<jsp:forward page="relativeURL" />
在上述语法格式中,page属性用于指定请求转发到的资源的相对路径,该路径是相对于当前JSP页面的URL。
<jsp:forward>动作元素使用案例
①创建用于实现转发功能的jspforward.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jspforward</title>
</head>
<body>
<jsp:forward page="welcome.jsp" />
</body>
</html>
②创建用于显示当前时间的welcome.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
当前时间为:
<%
out.print(new java.util.Date());
%>
</body>
</html>
注:用于请求转发是服务器端的操作,浏览器并不知道请求的页面,所以浏览器的地址栏不会发生变化。