JSP 自我学习笔记2
一 .学习目标
主要学习jsp中的jsp:include,jsp:forward,jsp:param
二 .讲解内容
jsp:include动作
jsp:include动作是在主页面被请求时,将次级页面的输出包含进来。尽管被包含的页面的输出中不能含有JSP,但这些页面可以是其他资源所产生的 结果。服务器按照正常的方式对指向被包含资源的URL进行解释,因而这个URL可以是Servlet或JSP页面。服务器以通常的方式运行被包含的页面, 将产生的输出放到主页面中,这种方式与RequestDispatcher类的include方法一致。它的优点是在被包含的页面发生更改时,无须对主页 面做出修改。它的缺点是所包含的是次级页面的输出,而非次级页面的实际代码,所以在被包含的页面中不能使用任何有可能在整体上影响主页面的JSP构造。
语法:<jsp:include page="sample.jsp" flush="true"> <jsp:param name="name" value="value"/> </jsp:include>
其中参数设置可以没有,如果没有参数设置,则必须采用
<jsp:include page="sample.jsp" flush="true"/>
jsp:forward动作
用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)。
标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象.标签以下的代码,将不能执行。
你能够向目标文件传送参数和值,在这个例子中我们传递的参数名为username,值为scott,如果你使用了标签的话,目标文件必须是一个动态的文件,能够处理参数。
如果你使用了非缓冲输出的话,那么使用时就要小心。如果在你使用之前,jsp文件已经有了数据,那么文件执行就会出错。
forward属于服务器端跳转。
语法:<jsp:forward page={"relativeURL" | "<%= expression %>"} />
或者
<jsp:forward page={"relativeURL" | "<%= expression %>"} >
<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />+
</jsp:forward>
3.jsp:param动作
操作被用来以“名-值”对的形式为其他标签提供附加信息。它和 jsp:include , jsp:forward , jsp:plugin 一起使用。
语法:
<jsp:param name="paramName" value="paramValue"/>
其中,name为与属性相关联的关键词,value为属性的值。
三 . 注意事项
<@ include >与 区别
1.include指令
include可以在JSP页面转换成Servlet之前,将JSP代码插入其中。它的主要优点是功能强大,所包含的代码可以含有总体上影响主页面的JSP构造,比如属性、方法的定义和文档类型的设定。它的缺点是难于维护只要被包含的页面发生更改,就得更改主页面,这是因为主页面不会自动地查看被包含的页面是否发生更改。
2.include动作
jsp:include动作是在主页面被请求时,将次级页面的输出包含进来。尽管被包含的页面的输出中不能含有JSP,但这些页面可以是其他资源所产生的 结果。服务器按照正常的方式对指向被包含资源的URL进行解释,因而这个URL可以是Servlet或JSP页面。服务器以通常的方式运行被包含的页面, 将产生的输出放到主页面中,这种方式与RequestDispatcher类的include方法一致。它的优点是在被包含的页面发生更改时,无须对主页 面做出修改。它的缺点是所包含的是次级页面的输出,而非次级页面的实际代码,所以在被包含的页面中不能使用任何有可能在整体上影响主页面的JSP构造。
- 使用include动作还是include指令?
使用include指令,如果被包含的文件发生改变,那么,用到它的所有Jsp页面都需要更新。
仅当include动作不能满足要求时,我们才应该使用include指令。
有些开发人员认为include指令生成的代码执行起来比使用include动作的代码更快。尽管原则上由可能的确如此,但性能上的差异很小,以致难以测 量,同时,include动作在维护上的优势十分巨大,当两种方法都可以使用时,include动作几乎肯定是首选的方法。
对于文件包含,应该尽可能地使用include动作。仅在所包含的文件中定义了主页面要用到的字段或方法,或所包含的文件设置了主页面的响应报头时,才应该使用include指令。
四 .实验案例
实验要求:
编写四个JSP 页面:one.jsp 、two.jsp、three.jsp和error.jsp。one.jsp 、two.jsp和three.jsp页面都含有一个导航条,以便让用户方便地单击超链接访问这三个页面,要求这三个页面通过使用include动作标记动态加载导航条文件head.txt。
导航条文件head.txt的内容如下所示:
<%@ page contentType="text/html;charset=GB2312" %>
<table cellSpacing="1" cellPadding="1" width="60%" align="center" border="0" >
<tr valign="bottom">
<td><A href="one.jsp"><font size=3>one.jsp页面</font></A></td>
<td><A href="two.jsp"><font size=3>two.jsp页面</font></A></td>
<td><A href="three.jsp"><font size=3>three.jsp页面</font></A></td>
</tr>
</Font>
</table>
(1)one.jsp的具体要求
要求one.jsp页面有一个表单,用户使用该表单可以输入一个1~100之间的整数,并提交给该页面;如果输入的整数在50~100之间(不包括50)就转向three.jsp,如果在1~50之间就转向two.jsp;如果输入不符合要求就转向error.jsp。要求forward标记在实现页面转向时,使用param子标记将整数传递到转向的two.jsp或three.jsp页面,将有关输入错误传递到转向的error.jsp页面。
(2)two.jsp、three.jsp和error.jsp的具体要求
要求two.jsp和three.jsp能输出one.jsp传递过来的值。error.jsp页面能显示有关的错误信息。
实验代码:
one.jsp
<%@ page language="java" import="java.util.*,java.lang.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>One_form_JSP</title>
</head>
<body>
<br>
<center><jsp:include page="head.txt"></jsp:include></center>
<br>
<form method="post" ><center><table>
<tr>
<td>Please Input Number 1-100,</td>
<td>Submit Number</td>
</tr>
<tr>
<td><input type="text" name="numbers"></td>
<td><input type="submit" value="submit" name=submit></td>
</tr>
</table></center></form>
<% String st=request.getParameter("numbers");
int nums;
try{
if(st==null){
st="0";
}
nums=Integer.parseInt(st);
if(nums>=1&&nums<50){
out.print(nums);%>
<jsp:forward page="two.jsp"><jsp:param value="<%=nums%>" name="numbers"/></jsp:forward>
<%
}else if(nums>=50&&nums<=100){
out.print("elif :"+nums);%>
<jsp:forward page="three.jsp"><jsp:param value="<%=nums%>" name="numbers"/></jsp:forward>
<%} else if(nums<0||nums>100){%>
<jsp:forward page="error.jsp"><jsp:param value="<%=nums%>" name="numbers"/></jsp:forward>
<% }
}catch(Exception e){%>
<jsp:forward page="error.jsp"><jsp:param value="<%=e.toString()%>" name="numbers"/></jsp:forward>
<% }%>
</body>
</html>
two.jsp
<%@ page language="java" import="java.util.*,java.lang.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>One_form_JSP</title>
</head>
<body>
<br>
<center><jsp:include page="head.txt"></jsp:include></center>
<br>
<form method="post" ><center><table>
<tr>
<td>Please Input Number 1-100,</td>
<td>Submit Number</td>
</tr>
<tr>
<td><input type="text" name="numbers"></td>
<td><input type="submit" value="submit" name=submit></td>
</tr>
</table></center></form>
<% String st=request.getParameter("numbers");
int nums;
try{
if(st==null){
st="0";
}
nums=Integer.parseInt(st);
if(nums>=1&&nums<50){
out.print(nums);%>
<jsp:forward page="two.jsp"><jsp:param value="<%=nums%>" name="numbers"/></jsp:forward>
<%
}else if(nums>=50&&nums<=100){
out.print("elif :"+nums);%>
<jsp:forward page="three.jsp"><jsp:param value="<%=nums%>" name="numbers"/></jsp:forward>
<%} else if(nums<0||nums>100){%>
<jsp:forward page="error.jsp"><jsp:param value="<%=nums%>" name="numbers"/></jsp:forward>
<% }
}catch(Exception e){%>
<jsp:forward page="error.jsp"><jsp:param value="<%=e.toString()%>" name="numbers"/></jsp:forward>
<% }%>
</body>
</html>
three.jsp
<%@ page language="java" import="java.util.*,java.lang.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Three ForwardTo</title>
</head>
<body>
<br>
<center><jsp:include page="head.txt"></jsp:include></center>
<p>
<center><table>
<%
String numbers=request.getParameter("numbers");
out.println("The number is "+numbers+". It`s OK,this page is three.jsp");
%>
</table></center>
</body>
</html>
error.jsp
<%@ page language="java" import="java.util.*,java.lang.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Error ForwardTo</title>
</head>
<body>
<br>
<center><jsp:include page="head.txt"></jsp:include></center>
<p>
<center><table>
<%
String numbers=request.getParameter("numbers");
out.println("Error: "+numbers+".Illegal input.");
%>
</table></center>
</body>
</html>
来源:CSDN
作者:yakumoyukarilan
链接:https://blog.csdn.net/Yakumoyukarilan/article/details/53348187