JSP行为
JSP行为(JSP Actions)是一组JSP内置的标签,只书写少量的标记代码就能够使用JSP提供丰富的功能,JSP行为是对常用的JSP功能的抽象和封装。
为什么我不把它直接称为JSP标签呢?我把这些JSP内置的标签称之为JSP行为,能够和JSTL标签区分开来。当然了,你也可以把它称之为JSP标签,你不要搞混就行了。我个人喜欢把这些JSP内置标签称之为JSP行为。
include行为
- 上面已经提及到了,include指令是静态包含,include行为是动态包含。其实include行为就是封装了request.getRequestDispatcher(String url).include(request,response)
- include行为语法是这个样子的
<jsp:include page=""/>
- 我们先来使用一下把,在1.jsp页面中也将页头和页尾包含进来。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>包含页头和页尾进来</title> </head> <body> <jsp:include page="head.jsp"/> <jsp:include page="foot.jsp"/> </body> </html>
访问1.jsp页面看一下效果:
使用jsp行为来包含文件,jsp源文件是这样子的:
- jsp行为包含文件就是先编译被包含的页面,再将页面的结果写入到包含的页面中(1.jsp)
- 当然了,现在有静态包含和动态包含,使用哪一个更好呢?答案是:动态包含。
- 动态包含可以向被包含的页面传递参数(用处不大),并且是分别处理包含页面的(将被包含页面编译后得出的结果再写进包含页面)【如果有相同名称的参数,使用静态包含就会报错!】!
- 模拟一下场景吧,现在我的头页面有个名为s的字符串变量
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>页头</title> </head> <body> <% String s = "zhongfucheng"; %> 我是页头呀 <br> <br> <br> </body> </html>
我的页尾也有个名为s的字符串变量
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>页尾</title> </head> <body> <% String s = "zhongfucheng"; %> 我是页尾呀 </body> </html>
现在我使用静态包含看看会发生什么,出现异常了。
出现异常的原因很简单,就是同一个文件中有两个相同的变量s
使用动态包含就可以避免这种情况
param行为
-
当使用jsp:include和jsp:forward行为引入或将请求转发给其它资源时,可以使用jsp:param行为向这个资源传递参数。
forward行为
- 在讲解request对象的时候,我们使用request.getRequestDispatcher(String url).forward(request,response)进行跳转。其实forward行为就是对其封装!
- 我们来看一下forward的语法:
<jsp:forward page=""/>
- 好的,我们来使用一下吧。访问1.jsp页面就跳转到head.jsp页面中
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>访问1.jsp就跳转到head.jsp</title> </head> <body> <jsp:forward page="head.jsp"/> </body> </html>
看一下效果
-
如果我要传递参数,就要在forward行为嵌套param行为
- 在跳转到head.jsp时传入参数username值为zhongfucheng
<jsp:forward page="head.jsp"> <jsp:param name="username" value="zhongfucheng"/> </jsp:forward>
在head.jsp页面中获取到传递过来的参数
<% String ss = request.getParameter("username"); %> 获取到的参数是: <%=ss%>
效果如下图所示
directive行为
-
directive的中文意思就是指令。该行为就是替代指令<%@%>的语法的
- 相当于<%@include file="" %>
- jsp:directive.page/ 相当于<%@page %>
- jsp:directive.taglib/ 相当于<%@taglib %>
- 我们来试一下能不能用的
<jsp:directive.include file="head.jsp"></jsp:directive.include> <jsp:directive.include file="foot.jsp"></jsp:directive.include>
看下效果,正常可以包含页面:
-
使用该指令可以让JSP页面更加美观!
- 使用scriptlet行为
<jsp:scriptlet>
替代<%%>是同样一个道理
javaBean行为
-
JSP还提供了操作javaBean对象的行为,在这里就不详细说明了,后面会讲到的!现在记住JSP提供了javaBean行为来操作简单类即可!
-
<jsp:useBean id=""/>
-
<jsp:setProperty name="" property=""/>
-
<jsp:getProperty name="" property=""/>
-
如果文章有错的地方欢迎指正,大家互相交流。