一、六大动作标签(JSP标签)

作用:JSP动作标签利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组

件、把用户重定向到另外的页面、为Java插件生成HTML代码。

注意:路径的书写(自动获取,不用手动,项目可能会变!)

特点:

(1)jsp动作元素是用XML语法写成的

<jsp:action_name attribute="value" />

(2)jsp的动作标签,在使用的时候不需要导包(内置了)

(3)所有的动作要素都有两个属性:id属性和scope属性

简要介绍:

id属性:是动作元素的唯一标识,可以在JSP页面中引用,动作元素创建的id值可以通过PageContext对象来调用。

scope属性:用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命,scope属性有四个可能的值:page、request、session和application,这是JSP的四个作用域。

动作元素的展示:

二、动作标签的分类(五类)

第一类(重点掌握)是与JavaBean有关的,包括3个动作元素:

<jsp:useBean>  <jsp:getProperty>  <jsp:setProperty>

第二类(重点掌握)是JSP1.2就开始有的基本元素,包括6个动作元素:

<jsp:include>  <jsp:foward>  <jsp:param>  <jsp:plugin>  <jsp:params>  <jsp:fallback>

第三类是JSP2.0新增加的元素,主要与JSP Document有关,包括6个动作元素:

<jsp:root>  <jsp:declaration>  <jsp:scriptlet>  <jsp:expression> <jsp:text>  <jsp:output>

第四类是JSP2.0新增加的元素,主要是用来动态生成XML元素标签的值,包括3个动作元素:

<jsp:attribute>   <jsp:body>   <jsp:element>

第五类是JSP2.0新增加的元素,主要使用在Tag Filter中,包括2个动作元素:

<jsp:invoke>  <jsp:dobody>

三、JavaBean

(0)实质

JavaBean就是符合某种特定的规范的普通Java类。

(1)JavaBean的优势

解决代码重复编写,减少代码冗余,功能区分明显,提高了代码的可维护性。

(2)JavaBean设计原则

(3)JSP页面中使用JavaBean

①像使用普通Java类一样,创建JavaBean类实例

JavaBean----User类

package org.wzj.com;public class User {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

在JSP中使用脚本获取JavaBean中的数据。

<body><%User user = new User();user.setUsername("zhangsan");user.setPassword("123456");%><!--说明:原来的脚本方式获取(也可以传递到域对象中,然后再获取)--><%=user.getUsername()%><br><%=user.getPassword()%></body>

②在JSP页面中使用 JSP动作元素使用JavaBean类(掌握!)

1)<jsp:useBean>动作元素

作用:在JSP页面中实例化或者在指定范围内使用JavaBean,用来加载一个将在JSP页面中使用的JavaBean,使得我们可以发挥JavaBean组件复用的优势。

语法:

<jsp:useBean id="标识符" class="Java类全路径名" scope="作用范围" ></jsp:useBean>

说明:创建一个由class属性指定的类的实例(反射),然后把它绑定到其名字由id属性给出的变量上

在JavaBean类载入后,我们可以通过<jsp:setProperty>动作元素和<jsp:getProperty>动作元素来修改和获取Bean的属性。

useBean动作元素相关的属性列表:

给出具体实例前,让我们先来看下<jsp:setProperty>动作元素和<jsp:getProperty>动作元素

<body><jsp:useBean id="user" class="org.wzj.com.User"><jsp:setProperty name="user" property="username" value="lisi"></jsp:setProperty><jsp:setProperty name="user" property="password" value="123456"></jsp:setProperty>用户名:<jsp:getProperty name="user" property="username"></jsp:getProperty><br>密码:<jsp:getProperty name="user" property="password"></jsp:getProperty></jsp:useBean></body>

创建JavaBean的说明(可以指定存放域对象):

然而jsp:useBean并非总是意味着创建一个新的Bean实例,如果不指定scope默认值是从page域(找不到不会从其它域中查找)中获取,也即该Bean只在当前页面内可用(保存在当前页面的PageContext内)

scope的属性理解:

scope  指定Bean在哪种上下文内可用,可以取下面的四个值之一:page,request,session和application。 默认值是page,表示该Bean只在当前页面内可用(保存在当前页面的PageContext内)。 即当客户使用bean时为每个客户占用不同的空间,简单说bean是不共享的,用户不能互相干涉。当用户离开该访问页时无效。

Scope取 session:即该bean是共享的(会话),表示该Bean对当前HttpSession内的所有页面都有效。所有用户访问时将对同一个bean操作,会 互相干涉。当客户关闭浏览器时无效。
Scope取 request:只当用户访问时有效,且 不是共享的,该Bean在当前的客户请求内有效(保存在ServletRequest对象内)。当客户请求时作出响应,响应完后无效。

Scope取application:共享bean(站点),则表示该Bean对所有具有相同ServletContext的页面都有效,当服务器关闭时该bean无效。

scope重要原因:是因为jsp:useBean只有在不存在具有相同id和scope的对象时才会实例化新的对象;如果已有id和scope都相同的对象则直接使用已有的对象,此时jsp:useBean开始标记和结束标记之间的任何内容都将被忽略。

何时是使用?:如果能够找到id和scope相同的Bean实例,jsp:useBean动作将使用已有的Bean实例而不是创建新的实例。但是注意即使是获取也是获取在本JSP页面存储的数据

此时:id的含义是命名引用该对应域Bean的变量

思考:通过JavaBean可以获取从Servlet域中传递过来的数据吗(跨域获取)?

<jsp:setProperty>动作元素

特点:只有在新建Bean类实例时才会执行,如果是使用现有实例则不执行<jsp:setProperty>动作元素。

常用属性:

<jsp:getProperty>动作元素

特点(执行过程):提取指定Bean类属性的值,转换成字符串,然后输出

明白:获取的是表单中的数据还是域对象中的数据?

相关链接:点击打开链接

四、<jsp:forward>动作元素(请求转发--服务器内部转发)

语法:

<jsp:forward page="相对 URL 地址" />

属性说明:

page属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算,可以是一个JSP页面或者一个Java Servlet.

五、<jsp:param>动作元素

特点:常用<jsp:forward >动作元素一起使用(携带参数)。

语法:

<jsp:param name="参数名" value="参数值" />

使用(参照get提交方式携带数据)

1、JSP之前的脚本形式的转发:

<% request.getRequestDispatcher("/guess.jsp?name=eric&name=jacky").forward(request, response) ;%>

2、forward:请求转发标签(携带参数)

<jsp:forward page="/03.action.jsp"><jsp:param value="eric" name="name"/><jsp:param value="lucy" name="name"/>
</jsp:forward>

注意:jsp标签的注释一定要使用jsp的注释!

说明:使用forward转发的时候,携带参数数据,用到param参数标签!

六、<jsp:include>动作元素(动态--静态包含)

特点:包含和被包含的Jsp文件都会被翻译成对应的java文件(独立的),然后再合并,并且可以携带参数

语法:

使用:

<jsp:include page="/common/header.jsp"><jsp:param value="eric" name="name"/><!--可以向被包含页面传递参数Parameter-->
</jsp:include>

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

补充:

<jsp:include>动作元素包含的是执行结果,而include指令包含的是文件内容。
       <jsp:include>动作元素在请求期间被执行,而include指令在编译期页面间被执行。

适用场景:

(1)页面内容经常变化时更适合使用<jsp:include>动作元素。

(2)页面内容不经常变化时更适合使用include指令。

简单理解:

动态包含:先翻译成java文件,然后在进行源码的合并,并且动态包含可以携带参数数据的

静态包含:先合并,再翻译,不可以携带参数数据

图解1:

图解2:

动作标签目的:替换jsp的脚本

相关链接:点击打开链接

---------------------------------------------

七、六大标签(非动作标签)---构建知识谱

2)   jsp的jstl核心标签(第三方)在

(0)说明:使用时必须导包并关联

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

uri标签:它是每一个c标签的标识符
  prefix:给当前uri的标识符指定一个指定他的前缀和tld文件中的short-name标签的内容一致

(1)JSTL标签的引出:EL表达式有缺陷,它不能赋值、不能遍历、不能迭代,逻辑判断,但是可以通过jsp标签完成这些操作!

特点:在使用的时候需要导包

回顾:用jsp进行几个逻辑练习

(1)单条件选择

说明:

<%--1)单条件判断语句<c:if/> ---->相当于if语句test:如果test中的表达式是true,那么就会执行c:if语句的代码   if(true){语句1}
--%>

练习:

<c:if test="${5>3}"><h1>今天是个好日子,提前祝大家端午节快乐</h1>
</c:if>

(2)多条件选择

语法:

 <%--多条件判断语句:<c:choose/>+<c:when/>+<c:otherwise/>--%>

练习:

<c:choose><c:when test="${score>0&&score<60}">${"不及格"}</c:when><c:when test="${score>=60&&score<80}">${"中等"}</c:when><c:when test="${score>=80&&score<=100}">${"优秀"}</c:when><c:otherwise>${"成绩不合法"}</c:otherwise>
</c:choose>

练习2

<%--模拟登录实际开发中,登录成功之后,通过后台一定要将用户数据保存到session对象中--%><c:choose><c:when test="${!empty sessionScope.user }">欢迎回来,你的用户名是:eric,<a href="">[退出登录]</a></c:when><c:otherwise>请<a href="">注册</a>或者<a href="">登录</a></c:otherwise></c:choose>

(3)迭代(一般数组)

 <%--重点forearch:用来进行遍历或者迭代几个常用属性:begin:默认值是从0开进行遍历end:到哪个元素位置结束: 如果不写,默认到最后一个step:每次循环遍历多个元素,默认值是1items:遍历集合|数组 ,前提是需要从域对象获取数据(分割线--------)var:表示当前遍历的名称varStatus:当前对象的状态信息.通过当前属性值.count(显示序号),默认从1开始--%>

练习1:数组的遍历

<c:forEach begin="0" end="4" step="1" var="i">${arr[i]}<br>
</c:forEach>

(4)迭代(增强--集合)

注意:使用c:forEach items属性前提是一定要将map集合存储到域对象中

<%ArrayList<String> list = new ArrayList<>();list.add("A");list.add("B");list.add("C");list.add("D");session.setAttribute("list",list);
%>
<%--items:你要遍历的容器、var:你当前遍历的元素、varStatus:用来记录循环的状态常用的属性:count:记录次数从1开始(遍历的是第几个元素!)current:当前遍历的内容index: 索引从0开始
--%>
<c:forEach items="${list}" var="ele" varStatus="v">${ele}<br><%--当前遍历的个数 从1开始数--%><%--${v.count}--%><%--当前遍历的元素--%><%--${v.current}--%><%--当前遍历的索引从0开始数--%><%--${v.index} --%>
</c:forEach>
<%Student student = new Student();student.setName("zhangsan");student.setAge(23);Student student2 = new Student();student2.setName("lISI");student2.setAge(24);ArrayList<Student> list2 = new ArrayList<>();list2.add(student);list2.add(student2);session.setAttribute("list2",list2);
%>
<c:forEach items="${list2}" var="ele" varStatus="v">${ele.name}<br>${ele.age}<br><hr>${v.current.name}<br>${v.current.age}
</c:forEach>
<hr>
<%HashMap<String, String> hm = new HashMap<>();hm.put("武大","金莲");hm.put("宝强","蓉蓉");hm.put("陈思成","佟丽娅");hm.put("文章","马伊琍");request.setAttribute("hm",hm);
%><%--map集合中,将其中的属于以一种键值对对象存储到域对象,entry--%>
<c:forEach items="${hm}" var="ele" varStatus="v">${ele.key}<br><!--注意!-->${ele.value}<br>
</c:forEach>
<hr>
<%HashMap<String, Student> hm2 = new HashMap<>();Student student3 = new Student();student3.setName("zhangsanaaaa");student3.setAge(233);Student student4 = new Student();student4.setName("lISIaaa");student4.setAge(241);hm2.put("s001",student3);hm2.put("s002",student4);request.setAttribute("hm2",hm2);
%>
<c:forEach items="${hm2}" var="entry">${entry.key}<br>${entry.value.name}<br>${entry.value.age}<br>
</c:forEach>

(4)域中保存数据

<%--set标签往域中存数据-- var 键 、value值 、scope 域对象--%>
<c:set var="str" value="hehe" scope="request"></c:set>
${str}<!--查看数据-->

说明:

<%--1)给域对象进行赋值<c:set/>var:保存域对象名称value:保存对应的值scope:将当前数据保存到哪个域对象总page-->page域request->request域session->session域application->application域
--%>

原来脚本赋值

<%String name = "eric" ;request.setAttribute("name", name) ;
%>

现在赋值(与上等价)

<c:set var="name" value="eric" scope="request"></c:set>

(5)展示数据

<%--2)从域对象中获取数据(展示数据)value:一定要从保存的域对象中获取数据defalt:默认值,获取当前的域对象的数据为null的时候,默认值就会起作用excapeXml:默认值是true(不转义),会将defalut中的内容(HTML)进行转义,也就是是以文本还是标签
--%><c:out value="${name}" default="<h3>标题3</h3>" escapeXml="false"></c:out>

应用场景:略

注意:JSTL标签是配合EL表达式一起来使用的

(6)特殊字符串的遍历

<%--特殊的字符串遍历<c:forToken/>
--%><c:set var="str" value="平面设计-java-php-python"/><!--保存在page域中--><%--传统方式:String str = (String)pageContext.getAttribute("str") ;String[] strs = str.split("-") ;for(int i = 0 ; i < strs.length ; i ++){out.write(strs[i]+" ") ;}--%><br/>
<%--说明:items:需要遍历的字符串delims:指定的分隔符号(类似正则表达式的条件)var:每个内容名称
--%>
<c:forTokens items="${str}" delims="-" var="s">${s}
</c:forTokens>

(7)重定向

<%--
重定向的核心标签:<c:redirect/>--%>
<%--response.sendRedirect(request.getContextPath()+"/02.action.jsp") ;
--%><c:redirect url="/guess.jsp"></c:redirect>

特点:核心标签库的重定向不需要写上下文路径。

八、自定义标签(ee简单说)

省略。。。

未完待续。。。

JSP(六)动作标签相关推荐

  1. JSP基础--动作标签

    JSP基础--动作标签 JSP动作标签 1 JSP动作标签概述 动作标签的作用是用来简化Java脚本的! JSP动作标签是JavaWeb内置的动作标签,它们是已经定义好的动作标签,我们可以拿来直接使用 ...

  2. jsp usebean_JSP动作标签– jsp useBean,包含,转发

    jsp usebean JSP provides a bunch of standard action tags that we can use for specific tasks such as ...

  3. 003_Jsp动作标签

    一. 介绍3个Jsp动作标签 1. <jsp:include page=""></jsp:include> 2. <jsp:param value=& ...

  4. jsp怎么操作html标签,JSP、HTML标签

    JSP 标准标签库(JSTL) JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判 ...

  5. jsp脚本、jsp标准动作、EL表达式、JSTL标签

    https://blog.csdn.net/gx_hxl/article/details/79032331 https://blog.csdn.net/a731604348/article/detai ...

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

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

  7. java学习之服务器第28天( --jsp--三个指令--六个动作标签--PageContext域--EL表达式--)

    你想要多大的成功,你愿意为这份成功付出什么? 一.jsp 定义: 每一种技术名称都一定说明他的作用. jsp 的全称: Java Server pages ( Java服务器页面), 既然他是Java ...

  8. Java虚拟机中的内存模型?JSP常用的动作标签及作用? 如何防止表单重复提交问题? JSP四大作用域及请求范围? 分别说出http,https,ftp,talnet的默认端口?

    文章目录 一 ,Java虚拟机中的内存模型JVM? 1,Java堆 2,方法区 3,Java栈 4,本地方法栈 问题扩展: 二 , JSP常用的动作标签及作用 (1)问题分析: (2)核心答案讲解: ...

  9. jsp中c标签的详细使用

    jsp中c标签的使用 JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧, ...

最新文章

  1. Epson投影仪指示灯信息
  2. 如何使Git“忘记”已跟踪但现在位于.gitignore中的文件?
  3. MySQL 索引 :哈希索引、B+树索引、全文索引
  4. java版的中世纪战争_世界战争英雄设置-火焰纹章英雄英雄地图及AI命令设置
  5. 一直认为in,exists 不走索引,被同事鄙视了……
  6. CoreJavaE10V1P3.2 第3章 Java的基本编程结构-3.2 注释
  7. Auto 和 Decltye 的区别
  8. 文本匹配开山之作--双塔模型及实战
  9. 2018年终盘点:“年度爆款”的区块链真的结束了吗?
  10. CentOS 6.5上安装Confluence 5.4.4
  11. vue seo关键词设置_网站文章中如何设置关键词才更有利于SEO优化?
  12. dom块级元素的各种宽高
  13. 电机转速模糊pid控制
  14. python练习3 人脸对齐以及dir、inspect的用法
  15. 如何画五子棋棋盘c语言easyx,大佬们,用c++怎么画五子棋棋盘呢?
  16. 基于STM32MP1和QT的疫情监控平台
  17. CSDN写博客——去水印or自定义水印#解密CSDN上传图片生成链接的内容
  18. 华为 进入和退出Fastboot、eRecovery和Recovery升级模式
  19. Python编程PTA——三个数比较大小的新解法
  20. SAP 发布2022年第二季度财报

热门文章

  1. 计算机程序设计c++ 7-2:函数与指针
  2. 看板-项目的有效管理
  3. Java中的CAS以及AQS实现原理
  4. 上网慢!经常掉线!怎么办?
  5. nginx(三十一)proxy_intercept_errors指令应用
  6. 直播卖货系统开发,Bitmap保存图片到指定路径
  7. 工具资源系列之给 windows 虚拟机装个 windows
  8. 安装MPlayer播放器(号称Linux中的万能播放器)
  9. 基于音乐识别的频谱转换算法——常数Q变换CQT(转载修改)
  10. 使用Delve调试Go应用程序