5.2 新知识点——JSP动作指令、<jsp:include>
在 JSP 中,还存在另外一类标记,其符合XML 的语法格式。利用这些标记可以达到控制 Servlet 引擎的作用,如动态地插入文件、调用JavaBean、页面重定向等,这类标记称为JSP 动 作标记。
JSP的常用动作标记有<jsp:include>、<jsp:useBean>、<jsp:setProperty>、 <jsp:getProperty>、<jsp:forward>、<jsp:plugin>、<jsp:params>等。
常用的 JSP 动作见表2-2。
动作名称 | 动作说明 |
---|---|
<jsp:include> | 包含一个静态的或者动态的文件 |
<jsp:useBean> | 用来在JSP页面中创建一个bean实例并指定它的名字以及作用范围 |
<jsp:setProperty> | 用来设置bean的属性值 |
<jsp:getProperty> | 获取bean的属性的值并将之转化为一个字符串,然后将其插入输出的页面中 |
<jsp:forward> | 重定向一个静态html/jsp的文件,或者是一个程序段 |
<jsp:params> | 用于传递参数,必须与其他支持参数的标签一起使用 |
<jsp:plugin> | 用于下载JavaBean或Applet到客户端执行 |
<jsp:include> 指令可以完成JSP 的动态包含操作,可以在当前的 JSP 文件中包含TXT 文件、JSP 文件、HTML 文件、Servlet 文件等。
<jsp:include> 动作指令在进行JSP 网站开发 时,是被广泛使用的动作指令之一。
其动作指令的语法格式为:
<jsp:include page="被包含的文件路径 | <%=表达式%>"flush="true|false"/> 或 <jsp:include page="被包含的文件路径 | <%=表达式%>"flush="true|false'> <jsp:param name="paraml"value="value1"/> <jsp:param name="param2"value="value2"/> </jsp:include>
在上述语法格式中,page 属性表示被包含文件的相对路径或相对路径的表达式。
flush ="true"表示是否在包含目标之前先刷新输出缓冲区,默认值为true。
<jsp:param> 表示传递参数,即需要传递给被包含文件的参数,可以传递多个参数。
name 属性为参数名,value 属 性为参数值。
<jsp:include> 动作指令第一种语法格式在项目4任务实现时已经使用。
<jsp:include> 动作指令第二种语法格式,即带参数的语法格式,使用方法见程序2-11。
【 程序2-11】exam5_2_index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 显示传递参数的包含文件 <jsp:include page="exam5_2_include.jsp"> <jsp:param value="Tom" name="stu"/> </jsp:include> </body> </html>
代码分析:程序中,采用<jsp:include> 动作指令包含了文件 exam5 2 include.jsp, 其 主要代码为:
<jsp:include page="exam5_2_include.jsp"> <jsp:param value="Tom" name="stu"/> </jsp:include>
在包含后,exam5 2 include.jsp 需要获取 stu 变量并显示,因此采用第二种包含形式。
通 过<jsp:param>动作指令传递了参数stu, 其值为Tom。
【 程序2-12】 exam5_2_include.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% String stu=request.getParameter("stu"); out.println("姓名:"+stu); %> </body> </html>
代码分析:该文件为被包含文件,因其需要显示一个传递的参数,因此需要从调用它的页 面获取stu 变量。
代码中request.getParameter()为JSP内置对象request 调用了其获取变量的 方 法 getParameter() 。out.println() 为 JSP 内置对象out 调用了输出的方法println()。
运 行exam5_2_index.jsp, 显示文件被包含后的效果,如图2-7所示。
查看网页源代码
5.3 扩 展——<jsp:forward> 的使用
<jsp:forward>动作指令表示把当前的页面控制权转向另外一个对象,该对象可以是一个 HTML 文 件 、JSP 文件或者一个Servlet文件。
<jsp:forward> 的语法格式:
<jsp:forward page="转向的文件路径 | <%=表达式%>"/> 或者 <jsp:forward page="转向的文件路径 | <%=表达式%>"> <jsp:param name="paraml" value="valuel"/> <jsp:param name="param2" value="value2"/> </jsp:forward>
在上述格式中,page 属性为一个字符串或者一个表达式,用来表示转向文件的路径; <jsp:param>子句指令为传递参数的指令,name 指定参数名,value指定参数值。
<jsp:forward> 的使用示例如下:
【 程序2- 13】 exam5_3_forward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>跳转指令应用</title> </head> <body> <h1> 跳转指令应用:</h1> <jsp:forward page="exam5_3_forward2.jsp"/> </body> </html>
代码分析:该程序采用<jsp:forward> 动作指令,重定向到文件exam5 3 forward2.jsp。
【程序2-14】 exam5 3 forward2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 重定向后的文件 </body> </html>
代码分析:该页面进行了简单显示。
运 行exam5_3_forward.jsp, 效果如图2-8所示。
从运行效果可以看出,浏览器的地址栏 中地址不显示变化,但内容显示为重定向后的内容,即在exam5 3 forward.jsp 当前文件中的 内容没有输出,而只输出了转向后的文件exam5 3 forward2.jsp 中的内容。
查看执行结果页面的源代码发现:
直接执行重定向后的文件:
查看此文件是否被跳转:看地址栏的文件地址和输出内容是否对应。
一致:该文件未跳转
不一致:该文件被跳转了