zoukankan      html  css  js  c++  java
  • 【JSP】JSP Action动作标签

    Action动作标签简述

    JSP action是JSP技术体系内置的一组标签,使用无需导入,或者添加另外的库。JSP action标签都是对Java代码的逻辑的封装。主要使用的是下面这些。

    标签作用
    jsp:include 在页面被请求的时候引入一个文件。
    jsp:forward 把请求转到一个新的页面。
    jsp:useBean 寻找或者实例化一个JavaBean。
    jsp:setProperty 设置JavaBean的属性。
    jsp:getProperty 输出某个JavaBean的属性。

    <jsp:include>标签

     提示:为了深入理解这个标签,请先理解ServletDispatcher接口中的include方法,因为二者是同样的原理。可以看我的这篇文章

           jsp:include标签是执行时期的包含,也叫动态包含。被包含的页面会在服务器上运行产生响应数据,将响应的数据包含到本JSP响应中。因此,这个标签既可以包含Servlet,JSP动态资源,也可以包含HTML等静态资源。如果是包含了JSP或者Servlet,则是包含了 被包含页面执行后的输出结果(也就是是被包含页面的out对象输出的结果)。 如果包含的是静态内容,则其效果和使用<%@ page include %> 是一样的。这种情况下还是使用include指令比较高效。

     语法格式

    <!--语法格式-->
    <jsp:include page="relativeURL(被包含资源相对的路径)" flush="[false|true]" />
    
    <!--或者可以向被包含页面传递参数Parameter-->
    
    <jsp:include page="relativeURL"  flush="[false|true]" >
         <jsp:param name="name" value="value" />
         <jsp:param name="name2" value="value2" />
    </jsp:include>
    说明
    1、page属性是被包含的页面的相对路径,这个值可以是EL表达式如: page="${param.pagevalue}",因为EL是JSP转译层次的技术,而include action则实际上是一条java语句,是执行期被调用的。
    flush属性,如果设置为true,则在执行include语句时,先将原来的页面输出到响应正文中的缓存数据刷新,再处理被包含页面的数据。如果为false则不刷新,这样等到输出流对象自动默认刷新。flush属性是可选的,默认是false。
     
    2、<jsp:param> 设置的参数可以在被包含页面中通过request.getParamter()获取。

    <jsp:forward>标签

    提示:为了深入理解这个标签,请先理解ServletDispatcher接口中的forward方法,因为二者是同样的原理。可以看我的这篇文章

    将当前请求转发到另外一个资源上去,这个资源可以是Servlet,jsp,或者是HTML等静态资源。让另一个资源产生响应数据。使用转发时,之前写入到响应正文中的数据会被忽略,如果之前已经将响应提交,则使用转发将抛出IllegalStateException异常。因此,转发调用语句的前后都不要有响应输出语句,因为都会被忽略,没有作用。

    语法格式

    <jsp:forward page="relativeURL(被包含页面的相等URL)" />     
    
    <!--或者也可以通过jsp:param向被包含页面传递Parameter-->
    
    <jsp:forward page="relativeURL">
         <jsp:param name="name" value="value" />
    </jsp:forward>

    说明:

    1、page属性是被包含的页面的相对路径,这个值可以是EL表达式,如: page="${param.pagevalue}"

    2、<jsp:param> 设置的参数可以在被包含页面中通过request.getParamter()获取。

    <jsp:useBean>标签

    这个标签用来在JSP中设置和操作JavaBean 的标签。他会先从Scope中尝试取对应名称的Bean对象,如不存在,则new一个对应的Bean对象。
    通常它会配合<jsp:setProperty> 和 <jsp:getProperty> 一起使用。

    语法格式

    <!--在JSP页面中获取一个JavaBean-->
    < jsp:useBean id ="user" class= "model.User" scope = "page" />     
    
    
    <!--或者
    在JSP页面中获取一个JavaBean,如果这个对象是因为这个useBean标签的调用而new出来的,则执行子标签setProperty,如果是从以前设置的scope直接获取到的,则不执行子标签setProperty
    -->
    
    <jsp:useBean id="user" class="model.User" scope="page">
         <jsp:setProperty property="name" name="user" value="Jack"/>
    </jsp:useBean>
    说明
     
    id        : JavaBean对象的本地变量名,也就是这个Bean对象在_jspService方法中的局部变量名
    class   :指定了JavaBean的类的位置,必须是完整的包名。
    scope : Bean对象存储的范围 。可以取下面的四个值之一:page,request,session和application。默认值是page( PageContext的pageScope )。
    type    :将这个类型的JavaBean当做什么类型来使用。也就是type指定了强转类型。默认是class是什么类型,就当做什么类型来使用。

     

    例子

    index.jsp

    <%@ page contentType= "text/html; charset=UTF-8"   pageEncoding ="UTF-8" trimDirectiveWhitespaces= "true"
             session ="true"
    %>
    
    <!--在JSP页面的pageScope中创建一个变量名为user的JavaBean -->
    < jsp:useBean id ="user" class= "model.User" scope = "page" />
    
    <!--使用小脚本设置刚刚创建的JavaBean的 name属性 ,后面会介绍一个专门的标签setProperty可以设置属性-->
    <%
         ((model.User)pageContext.getAttribute( "user" )).setName("Bob" );
    %>
    
    <!--输出Bean的name属性,验证 -->
    刚刚使用的Bean的name属性值是:${pageScope.user.name}

    可以发现jsp:userBean标签 的实质操作步骤如下
     
    1、定义一个jsp:useBean标签中 type属性指定的变量,如果没有设置type属性,则默认使用class属性类型的变量,也就是本质类型。
    2、尝试去从scope属性指定的Scope中获取id属性指定的变量名的JavaBean对象赋值给1中定义的变量。
    3、如果在2步骤中获取到的对象为null,说明这是第一次在这个范围中使用这个Bean,则new一个实例(这种情况下,如果useBean有子标签jsp:setProperty,则setProperty子标签会执行,并将他存放到指定的Scope中,供后续的useBean标签使用,这样后续的useBean标签就无需再new了。

    <jsp:setProperty>标签

    这个标签用于设置JSP使用的JavaBean的属性。他配和useBean一起使用,通常作为useBean的子标签,而不是独立使用。程序员要保证被操作的某个Bean对象一定存在。

    使用语法

    <jsp:setProperty name="Bean的变量名" property="Bean的属性名" value="Bean的属性值" />
    
    
    <!--或者 将setProperty放在useBean的标签体中,只有new出Bean实例才会执行,如果是从以前设置的地方取的Bean,则不会执行-->
    <jsp:useBean id="user" class="model.User" >
         <jsp:setProperty name="user"  property="name" value="Bob"/>
    </jsp:useBean>

    说明

    name:就是要操作的JavaBean的变量名,也就是useBean中的id值。

    property:操作的JavaBean对象的属性名。

    value : 属性的值

    <%@ page contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8" trimDirectiveWhitespaces="true"
             session="true"%>
    <jsp:useBean id="user" class="model.User" scope="page">
         <jsp:setProperty property="name" name="user" value="Jack"/>
    </jsp:useBean>
    
    <%--输出Bean的name属性,验证 --%>
    刚刚使用的Bean的name属性值是:${pageScope.user.name}

    <jsp:getProperty>标签

    获取一个JavaBean的属性,通过JSP内置对象out将属性值输出到响应流中。

    语法:

    <jsp:getProperty name="JavaBean的变量名" property="属性名" />

    name:就是要操作的JavaBean的变量名,也就是useBean中的id值。

    property:操作的JavaBean对象的属性名。

    <%@ page contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8" trimDirectiveWhitespaces="true"
             session="true"%>
    <jsp:useBean id="user" class="model.User" scope="page">
         <jsp:setProperty property="name" name="user" value="Jack"/>
    </jsp:useBean>
    
    刚刚使用的Bean的name属性值是:<jsp:getProperty name="user" property="name" />

     欢迎转载,请注明出处:www.cnblogs.com/lulipro

     为了获得更好的阅读体验,请访问原博客地址。

    限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

    代码钢琴家

  • 相关阅读:
    go函数
    Linux 查看磁盘容量、查找大文件、查找大目录
    五分钟理解一致性哈希算法(consistent hashing)
    使用Java实现三个线程交替打印0-74
    Python实现IOC控制反转
    Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数
    Yandex Big Data Essentials Week1 Scaling Distributed File System
    Yandex Big Data Essentials Week1 Unix Command Line Interface Processes managing
    Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration
    Yandex Big Data Essentials Week1 Unix Command Line Interface File System exploration
  • 原文地址:https://www.cnblogs.com/lulipro/p/7473651.html
Copyright © 2011-2022 走看看