day16 Servlet交互作用域ELJSTL

news2024/11/18 20:30:01

转发和重定向

**作用:**为了让jsp和servlet做到责任分离,用于web组件的跳转

**web组件:**jsp+servlet

转发的方法

request.getRequestDispatcher("跳转的地址").forward(request,response)

**跳转的位置:**在服务端进行跳转

重定向的方法

response.sendRedirect("要跳转的地址")

**跳转的位置:**在浏览器进行跳转

转发与重定向的区别

区别转发重定向
访问时的路径访问不写项目路径必须写项目路径
地址栏地址不变会变,进行了跳转,重新访问了一次
跳转的位置服务端浏览器
是否丢失数据不会丢失数据,同一个对象会丢失地址,第二次访问时,浏览器再次向服务器发送请求
web-info下资源可以访问不能访问
跨域访问不能跨域,只能访问当前资源可以跨域

转发和重定向的注意事项:

**1.**想要共享数据的话只能使用请求转发(只有一次请求),重定向不能使用,(会丢失数据,两次请求不一样

2.建议:在不适用请求转发的情况下,就使用重定向,规避求取重复提交的数据

**3.**两种方式不能同时使用

**4.**跳转之后代码会继续执行,但是无效,不在跳转之后写代码

三大作用域及各自使用方法(共享数据)

作用:在多个web组件中共享数据,底层是map集合

作用域类型范围及区别
请求域Request在同一次请求中使用,数据表中的数据有更新
会话域Session在同一个会话中使用,浏览器第一次访问项目会创建对象,一次请求响应后就会销毁
上下文域servletContext在同一个项目中使用,只有服务器关闭的时候结束

作用域常用的方法

得到一个值: Obijiect getAttribute(“键”)

作用域的请求方法与获取方法

不同的作用域获取共享数据的方式不同

请求域

req.setAttribute("name","张三");


req.getAttribute("name")

会话域

HttpSession session = req.getSession();
session.setAttribute("age",24);


HttpSession session = req.getSession();
        System.out.println(session.getAttribute("age"));

上下文域

ServletContext servletContext = req.getServletContext();
servletContext.setAttribute("email","1245@qq.com");


 ServletContext servletContext = req.getServletContext();
       System.out.println(servletContext.getAttribute("email"));

作用域的选择

首先考虑范围小的作用域,若小的作用域满足就使用小的作用域

顺序为:请求域->会话域->上下文域

EL表达式(${变量名或者表达式})

作用:解决jsp页面中繁琐的java代码,可以直接访问javaBean中的属性和方法,做简单的逻辑运算和比较运算.

**目的:**获取作用域中的数据

获得对象属性值的书写方法:${对象.属性名}

**注意:**取对象的属性值,如果不存在,则报错PropertyNotFoundException

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TLv6YL8a-1684897142411)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230414200825835.png)]

若map集合中的key包含特殊字符,使用"对象[“key”]"获取值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opuAkdoN-1684897142412)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230414201021961.png)]

EL中使用表达式

算数运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4nyOD7gu-1684897142413)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230414201202207.png)]

比较表达式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hfll4Yvv-1684897142413)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230414201426711.png)]

三元运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3G1M8zi2-1684897142414)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230414201509417.png)]

判空

只要该属性里面没有内容(空字符串,空集合,作用域变量值空),都表示为true

${empty  s.fave}    

EL四个作用域取值(使用内置对象)

四大作用域依次查找:pageContext->request->Session->application

pageContext只能在同一个页面进行共享

注意:当多个作用域中的共享数据同名时,使用${name}获取数据只会得到作用域最小的那一个数据

**解决办法:**使用EL中的Scope内置对象,更加见名知意,这样就可以渠道各自作用域的共享数据

req.setAttribute("name","refquest");
req.getSession().setAttribute("name","session");
req.getServletContext().setAttribute("name","application");

取值:

${requestScope.name}

${sessionScope.name}

${applicationScope.name}

JSTL标签库

**作用:**减少jsp代码的复杂度,分离了展示和逻辑代码可以做,一般和el配合使用

**注意:**使用标签库之前需要向lib中添加"taglibs-standard-spec-1.2.5.jar",并在jsp引入指定的标签库

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

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

单条件判断(if)

<%--test:写el表达式
if中没有else,单条件判断,里面boolean类型的值
s为共享的数据
--%>

<c:if test="${s.age>=18}">
    你长大了
</c:if>

多条件判断(choose-when-otherwise)

<c:choose>
    <c:when test="${s.age>18}">大于18</c:when>
    <c:when test="${s.age<18}">小于18</c:when>
    <c:otherwise>等于18</c:otherwise>
</c:choose>

遍历(foreach)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XSPRk4Td-1684897142415)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230414210603969.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P49AlwZU-1684897142416)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230414210620072.png)]

<%--
iterms:对谁做遍历
var:使用变量接收遍历得到的对象
  遍历过程中会将取到的对象添加到作用域中
varStatus: 给遍历的对象加序号列可以使用(有四个方法),他是一个对象
--%>
<c:forEach items="${list}" var="iterm" varStatus="vs">
  ${vs.count}->
  ${pageScope.iterm}<br>
</c:forEach>

输出连续的数字

<%--在页面中输出连续的数字--%>
<c:forEach begin="1" end="10" var="num">
  ${num}
</c:forEach>

时间格式转化

//日期格式化
s.setBirthday(new Date());
req.setAttribute("s",s);
req.getRequestDispatcher("/fmt.jsp").forward(req, resp);


<--value:要格式化的日期对象
    pattern:指定日期格式
    -->
<%--时间的格式--%>
<fmt:formatDate value="${s.birthday}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>

eq.setAttribute(“s”,s);
req.getRequestDispatcher(“/fmt.jsp”).forward(req, resp);

<–value:要格式化的日期对象
pattern:指定日期格式
–>
<%–时间的格式–%>
<fmt:formatDate value=“${s.birthday}” pattern=“yyyy-MM-dd HH:mm:ss”></fmt:formatDate>


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.9 playwright之python实现

1、目录结构如下 2、main.py import os import shutilfrom playwright.sync_api import sync_playwright from config.setting import config from utils.template import Template from utils.md5 import Md5 from utils.delete import del_files import pytest from utils.d…

面试被问麻了...

前几天组了一个软件测试面试的群&#xff0c;没想到效果直接拉满&#xff0c;看来大家对面试这块的需求还是挺迫切的。昨天我就看到群友们发的一些面经&#xff0c;感觉非常有参考价值&#xff0c;于是我就问他还有没有。 结果他给我整理了一份非常硬核的面筋&#xff0c;打开…

全网最全性能测试总结,分析性能测试问题+性能调优方案...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能分析和优化一…

【录用案例】2区毕业快刊仅34天录用,新增8篇录用、9篇见刊、13篇检索

2023年5月13日-2023年5月19日&#xff0c;经核实&#xff0c;由我处Unionpub学术推荐的8篇论文已被期刊部录用、9篇见刊、13篇检索&#xff1a; 2区系统类SSCI 【期刊简介】IF:2.5-3.0&#xff0c;JCR2区&#xff0c;中科院4区 【检索情况】SSCI 在检&#xff0c;正刊 【征稿…

本地项目上传到Git(Gitee)仓库

一、步骤解答&#xff08;详细图解步骤见第二大点&#xff09; 1、打开我们的项目所在文件夹&#xff0c;我们发现是不存在.git文件 2、在你的项目文件夹外层【鼠标右击】弹出菜单&#xff0c;在【鼠标右击】弹出的菜单中&#xff0c;点击【Git Bash Here】&#xff0c;弹出运…

循环队列+OJ题之设计循环队列

生命不是要等待风暴过去&#xff0c;而是要学会在风暴中跳舞。 ——卡莉尔吉布朗目录 &#x1f33a;前言&#xff1a; &#x1f341;一.循环队列是什么&#xff1f; &#x1f34f;二.循环队列有什么作用&#xff1f; &#x1f340;三.OJ题之设计循环队列 1…

实战演练 | Navicat 数据生成功能

数据生成的目的是依据某个数据模型&#xff0c;从原始数据通过计算得到目标系统所需要的符合该模型的数据。数据生成与数据模型是分不开的&#xff0c;数据生成的结果应该符合某个数据模型对于数据的具体要求。所以&#xff0c;随着数据模型的发展&#xff0c;数据生成的方法相…

window 利用Qt-windeployqt打包exe程序 一个简单的实例

用一个简单的实例展示下window 如何使用QT-windeployqt打包exe程序使得其可以在别的电脑上运行 一、release模式获得exe可执行文件 新建一个QT项目 构建选择使用CMake base class选择QMainWindow Kit Selection一定要注意&#xff0c;我选的是MinGW 32-bit UI设计 mainwindow.…

手机充电宝电子充气泵方案

该充气泵产品方案的运行原理是通过电动机将电能转化为机械能&#xff0c;带动电机做往复运动&#xff0c;从而产生大量压缩空气&#xff0c;达到快速充气的效果。该充气泵可用于气垫床、汽车轮胎、自行车轮胎、足球、游泳圈等各类充气物品。产品设计以人性化为主&#xff0c;简…

VMware重新安装后没有VMnet1和VMnet8网络

问题&#xff1a; VMware重新安装后&#xff0c;没有自动生成VMnet1和VMnet8网络, 并且使用VMware自带的虚拟网络编辑器也无法生成。 导致主机无法ping通虚拟机。 如下图&#xff1a;点击该选项&#xff0c;然后应用&#xff0c;转一会圈也没有产生对应的网络适配器。 问题原…

物联网技术助力物流智能化:从货物追踪到配送优化

目录 前言 物流领域的IoT设备 物流领域的应用 二、仓库管理 三、物流配送 IoT组合应用 区块链在物流领域应用 展望 前言 随着全球贸易和物流业的快速发展&#xff0c;物流领域的智能化和自动化已成为不可避免的趋势。而物联网技术作为一种重要的数字技术&#xff0c;已经在物流…

VIsual Studio内引用Lua解释器,编译Lua源码,执行Lua脚本

前言 本篇在讲什么 在Visual Studio中引入lua的解释器 使用C调用Lua文件 本篇适合什么 适合初学Lua的小白 适合需要C/C和lua结合开发的人 本篇需要什么 对Lua语法有简单认知 对C/C语法有简单认知 依赖Lua5.1的环境 依赖VS 2017编辑器 本篇的特色 具有全流程的图文…

Shellcode分离加载实现免杀的两种方式(VT免杀率:1/68)

简介 本文详细介绍了如何通过文件加载和远程URL加载方式实现Shellcode分离加载&#xff0c;以规避安全软件的检测。文章首先描述了通过Metasploit Framework生成的shellcode文件加载的过程&#xff0c;并提供了相关的C代码。 为了避免被杀毒软件检测&#xff0c;利用动态API调…

自动化测试-DevOps如何实施?看看10年测试大佬的总结...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Selenium4自动化测…

2023最新!软件测试高频面试题基础知识点分享

近期也算是抽取出大部分休息的时间&#xff0c;为大家准备了一份通往大厂面试的小捷径&#xff0c;准备了一整套软件测试复习面试的刷题以及答案&#xff0c;我知道很多同学不知道怎么复习&#xff0c;不知道学习过程中哪些才是重点&#xff0c;其实&#xff0c;你们经历过的事…

内网渗透(八十二)之 CVE-2019-1040 NTLM MIC 绕过漏洞

CVE-2019-1040 NTLM MIC 绕过漏洞 漏洞背景 2019年6月11日,微软发布6月份安全补丁更新。在该安全补丁更新中,对 CVE-2019-1040 漏洞进行了修复。该漏洞存在于Windwos 大部分版本中,当中间人攻击者能够成功绕过NTLM 消息完整性校验(MIC)时,Windows 存在可能可篡改的漏洞…

R语言实践——rWCVP生成可发表级别的物种发现记录矩阵

rWCVP生成可发表级别的物种发现记录矩阵 介绍1. 查询一组示例数据2. 生成和格式化出现矩阵3. 额外地对国家进行处理 介绍 世界维管植物名录&#xff08;WCVP&#xff09;提供了已知的>340&#xff0c;000种维管植物物种的分布数据。该分布数据可用于构建植物物种名录的发现…

解密报错-java.security.InvalidKeyException: Illegal key size(本机解密正常,服务器解密报错)

记录在对接微信接口时需要的问题&#xff0c;对微信消息进行解密时报错&#xff0c;在本地进行解密是正常的&#xff0c;但部署到服务器进行解密就会报错 报错信息 java.security.InvalidKeyException: Illegal key sizeat javax.crypto.Cipher.checkCryptoPerm(Cipher.java:…

windows 系统扩容C盘注意事项

windows系统大家都不陌生&#xff0c;是大家用的最多的操作系统。在实际的使用中&#xff0c;遇到需要扩容C盘的情况不是很多&#xff0c;但是如果遇到了&#xff0c;有以下几个事项需要大家注意&#xff1a; 剩余空间是否充足 不论当前服务器是物理服务器还是虚拟机&#xff…

Slack工作区SolidUI 集成Claude使用流程,替代GPT3.5

背景 Claude 由 OpenAI 副总裁离职创立的和chatGPT对位的AI机器人&#xff0c;号称是chatGPT一生的对手&#xff01; 比之前的一些模型如GPT-3 要强大得多&#xff0c;因此Claude 被认为是ChatGPT 最有力的竞争对手。Claude 的研发公司是专注人工智能安全和研究的初创公司Anth…