且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】(三)

更新时间:2022-09-16 23:02:45

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行为来包含文件,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>

现在我使用静态包含看看会发生什么,出现异常了。JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】(三)

出现异常的原因很简单,就是同一个文件中有两个相同的变量sJSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】(三)

使用动态包含就可以避免这种情况

JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】(三)JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】(三)

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>

看一下效果

JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】(三)

  • 如果我要传递参数,就要在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%>

效果如下图所示JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】(三)

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第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】(三)

  • 使用该指令可以让JSP页面更加美观
  • 使用scriptlet行为<jsp:scriptlet>替代<%%>是同样一个道理

javaBean行为

  • JSP还提供了操作javaBean对象的行为在这里就不详细说明了,后面会讲到的!现在记住JSP提供了javaBean行为来操作简单类即可!
    • <jsp:useBean id=""/>
    • <jsp:setProperty name="" property=""/>
    • <jsp:getProperty name="" property=""/>

如果文章有错的地方欢迎指正,大家互相交流。