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

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

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

代码钢琴家

【JSP】JSP Action动作标签的更多相关文章

  1. jsp中的动作标签

    和html标签一样,使用尖括号'<>'包裹起来. 用于在jsp页面中处理业务逻辑,避免在jsp中过多的使用java脚本. <jsp:forward>用于请求转发,它与Reque ...

  2. 重温JSP学习笔记--JSP动作标签

    上一篇笔记写的是jsp的三个指令九个内置对象,这篇随笔开始写jsp的动作标签,动作标签是由服务器(Tomcat)来解释执行,与java代码一样,都是在服务器端执行的,jsp动作标签有十几多个,这里只写 ...

  3. JSP动作标签

    动作标签是一种特殊的标签,它影响JSP运行时的功能. (1)include动作标签 <jsp:include page=”文件的名字” />           <%--   不可有 ...

  4. JavaBean用JSP调用和使用JSP动作标签的区别

    javabean的类可以用jsp动作标签实例化并使用. <!-- 下面这句是对Javabean类person的引用,引用的实例是p2 --> <jsp:useBean id=&quo ...

  5. jsp动作标签概述

    *Jsp动作标签概述: >动作标签的作用是用来简化java脚本 >jsp动作标签是JavaWeb内置的动作标签,它们是已经定义好的动作标签,我们可以拿来直接使用. >JavaWeb一 ...

  6. JavaWeb笔记——Jsp的指令、内置对象和动作标签

    JSP三大指令   一个jsp页面中,可以有0~N个指令的定义! 1. page --> 最复杂:<%@page language="java" info=" ...

  7. jsp 三大指令和动作标签

    jsp三大指令 一个jsp页面中可以有0-N个指令 1.page--->最复杂:<%@page language="" ...%> *pageEncoding和c ...

  8. jsp forward 动作标签

    forward 动作标签: <jsp:forward page="要转向的页面"> </jsp:forward> 或 <jsp:forward pag ...

  9. JSP动作标签flush属性值

    在JSP动作标签<jsp:include flush="true"/>,flush属性可以为true或false.flush默认值为false,当把flush属性赋值为 ...

随机推荐

  1. pwnable.kr random 之 write up

    ---恢复内容开始--- 首先看源代码: #include <stdio.h> int main(){ unsigned int random; random = rand(); // r ...

  2. javascript编程解决黑化的牛牛问题

    问题描述 时间限制:1秒 空间限制:32768K 牛牛变得黑化了,想要摧毁掉地球.但他忘记了开启地球毁灭器的密码.牛牛手里有一个字符串S,牛牛还记得从S中去掉一个字符就恰好是正确的密码,请你帮牛牛求出 ...

  3. Python中的可变对象和不可变对象

    Python中的可变对象和不可变对象 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一 ...

  4. Spring Boot整合Dubbo使用及开发笔记

    一.概述: Spring Dubbo是我开发的一个基于spring-boot和dubbo,目的是使用Spring boot的风格来使用dubbo.(即可以了解Spring boot的启动过程又可以学习 ...

  5. Git时光机穿梭之管理修改

    现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...

  6. dotnet core部署方式两则:CLI、IIS

    最近在使用dotnet core研究整个开发过程,使用下面两种方式部署: 一,使用 dotnet run 命令运行 在项目路径,shift+右键,选择 “在此处打开命令窗口”,在CMD窗口中运行“do ...

  7. [算法题] Remove Duplicates from Sorted Array ii

    题目内容 本题来源LeetCode Follow up for "Remove Duplicates": What if duplicates are allowed at mos ...

  8. Hotkeys.js 2.0.2 发布,捕获键盘输入和输入的组合键快捷键,它没有依赖

    这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb),gzip:1.9k. 更新内容: 添加测试用例: 添加更多特殊键支持: 修复bug. __ ...

  9. HDU 4372 Count the Buildings:第一类Stirling数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意: 有n栋高楼横着排成一排,各自的高度为1到n的一个排列. 从左边看可以看到f栋楼,从右边看 ...

  10. a标签链接到当前页内指定位置

    <a name="me">hello</a><br/><br/><br/><br/><br/>& ...