JSP_5th_动作指令jsp:include

一、jsp:include/jsp:param
1)用于动态包含JSP程序或HTML文件等。
2)除非这个指令会被执行到,否则它不会被Tomcat等JSP Engine编译。
3)格式:
<jsp:include page="URLSpec" flush="true" />

<jsp:include page="URLSpec" flush="true">
	<jsp:param name="ParamName" value="ParamValue">
</jsp:include>

4)jsp:param用来设定include文件时的参数和对应的值。

5)举例
include.jsp如下所示:
<html>
<head>
	<title>include test</title>
</head>
<body>
	The current date and time are<br>
	<%@ include file="date.jsp" %>
	<jsp:include page="date.jsp" flush="true" />	
</body>
</html>

date.jsp如下所示:
<%@ page import="java.util.*" %>
<%= (new Date()).toLocaleString() %>

页面效果:

总结:
可以看到date.jsp被包含了两次。

下面举一个计算器小例子,来对比一下动作指令jsp:include和编译指令include之间的区别:

Computed.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Compute</title>
</head>
<body>
	<div align="center">
		<form method="post" action="Compute.jsp">
			<p>选择要做的运算
				<input type="radio" name="compute" value="div" checked="checked" />除法  
				<input type="radio" name="compute" value="mul" />乘法
			</p>
			<p>			
				被除数(被乘数)<input type="text" name="value1" />  
				除数(乘数)<input type="text" name="value2" />
			</p>
			<input type="submit" name="Submit" value="计算结果" >
		</form>		
	</div>
</body>
</html>

页面提交以后,跳转到Compute.jsp如下所示,首先拿到提交的数据,然后判断应该进行除法计算还是乘法计算,从而确定应该执行哪个文件中的代码:
<%
	String value1 = request.getParameter("value1");
	String value2 = request.getParameter("value2");
%>

<%	if(request.getParameter("compute").equals("div")) { %>
		<jsp:include page="div.jsp" flush="true">
			<jsp:param name="v1" value="<%=value1 %>" />
			<jsp:param name="v2" value="<%=value2 %>" />
		</jsp:include>
		
<% } else { %>
		<%@include file="mul.jsp" %>
<% } %>

如果是执行div.jsp中的代码,如下,则拿到jsp:param中设置的属性值:
<%@ contentType="text/html; charset=UTF-8"%>
<html>
<body>
	<h1 align="center">
	<%
		double div1 = Double.parseDouble(request.getParameter("v1"));
		double div2 = Double.parseDouble(request.getParameter("v2"));
		
		try {
			double result = div1 / div2;
	%>
			<%= result %>
	<%			
		} catch (Exception e) {
			out.println("不合法的除数");
		}
	%>
	</h1>
</body>
</html>

如果是执行mul.jsp中的代码如下所示,这里会出错,因为v1和v2的值是在if中被设置的,则mul1和mul2为null:
<%@ contentType="text/html; charset=UTF-8"%>
<html>
<body>
	<h1 align="center">
	<%
		double mul1 = Double.parseDouble(request.getParameter("v1"));
		double mul2 = Double.parseDouble(request.getParameter("v2"));
		
		try {
			double result = mul1 * mul2;
	%>
			<%= result %>
	<%			
		} catch (Exception e) {
			out.println("不合法的数字");
		}
	%>
	</h1>
</body>
</html>

改成如下所示即可:
double mul1 = Double.parseDouble(request.getParameter("value1"));
double mul2 = Double.parseDouble(request.getParameter("value2"));

这里拿到的不是null,因为是同一个request对象,不论是<jsp:include page="div.jsp" flush="true">还是<%@include file="mul.jsp" %>,在执行到这一行时,都是原封不动的执行指定文件中的代码,可以看成是写在同一个页面中的代码。

总结:
动作指令jsp:include和编译指令include的区别:
①include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入。
②include不能带参数,而<jsp:include>可以。


下面看一下页面效果:

输入要计算的数,然后点击计算结果:


已经计算出了结果,看出地址栏访问的是Compute.jsp,而非div.jsp,div.jsp的内容是在运行期间被动态的载入Compute.jsp的。


再来试一下乘法:


地址栏也是访问的是Compute.jsp,而非mul.jsp,mul.jsp的内容是在转译期间被嵌入Compute.jsp,然后再一起编译、运行的。



为了更好的理解,来看一下Compute_jsp.java中的service方法的部分代码:



看起来好像jsp:include被转换成了一个include方法,那到这方法内部不就不能访问到外面的request中的value1和value2了吗,但是可以发现,request和response对象已经被传入该方法了:







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值