JavaWeb笔记之JSP
一、引言
二、JSP
2.1 概念
2.2 作用
三、JSP开发
3.1 创建JSP
3.1.1 编写代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>This is my first page</title>
</head>
<body><%=new java.util.Date() %>
</body>
</html>
3.1.2 访问JSP
3.2 JSP与Servlet
3.3 JSP实现原理
四、集成开发
4.1 脚本
4.1.1 普通脚本
<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%//jsp中,使用小脚本嵌入java代码!out.println("hi");//打印内容在客户端页面System.out.println("hi");//打印内容在控制台
%>
</body>
</html>
4.1.2 声明脚本
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Object object = new Object(); %>
<%!//定义方法public void m1(){System.out.println("你好");}
%>
4.1.3 输出脚本
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp基本使用</title>
</head>
<body>
<p>今天的日期是: <%= new java.util.Date() %>
</p>
</body>
</html>
4.2 JSP注释
4.2.1 语法
4.2.2 注释
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp基础教程</title>
</head>
<body>
<%-- JSP注释在网页中不会被显示--%>
<!-- HTML注释在网页源代码中会显示 -->
<p>今天的日期是: <%= new java.util.Date() %>
</p>
</body>
</html>
4.3 JSP指令
4.3.1 page指令
4.3.2 include指令
<%@ include file="header.jsp"%>
...
...
<%@ include file="footer.jsp" %>
4.3.3 taglib指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
4.4 动作标签
4.4.1 include
<jsp:include page="index.jsp"/>
4.4.2 useBean
<jsp:useBean id="user" class="com.liuy.entity.User"/>
4.4.3 setProperty
<jsp:useBean id="user" class="com.liuy.entity.User" />
<jsp:setProperty name="user" property="name" value="gavin" />
4.4.4 getProperty
<jsp:useBean id="user" class="com.liuy.entity.User" />
<jsp:setProperty name="user" property="name" value="gavin" />
<jsp:getProperty name="user" property="name" />
4.4.5 forward
<jsp:forward page="index.jsp" />
4.4.6 param
<jsp:forward page="index.jsp"><!-- http请求参数传递--><jsp:param name="sex" value="nan" />
</jsp:forward>
4.5 内置对象
4.5.1 四大域对象
4.5.2 pageContext
<%pageContext.setAttribute("name",value);//当前页面作用域有效
%>
4.5.3 获取内置对象
<%pageContext.getRequest();//返回request内置对象pageContext.getResponse();//返回response内置对象pageContext.getServletConfig();//返回config内置对象pageContext.getException();//返回exception内置对象pageContext.getPage();//返回page内置对象pageContext.getOut();//返回out内置对象pageContext.getServletContext();//返回application内置对象pageContext.getSession();//返回session内置对象
%>
4.5.4 作用域
<%//操作其他作用域存储pageContext.setAttribute("name",value);//当前页面有效pageContext.setAttribute("name",value,PageContext.REQUEST_SCOPE);//request作用域pageContext.setAttribute("name",value,PageContext.SESSION_SCOPE);//session作用域pageContext.setAttribute("name",value,PageContext.APPLICATION_SCOPE);//application作用域
%><%//操作其他作用域获取pageContext.getAttribute("name");//当前页面作用域pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);//request作用域pageContext.getAttribute("name",PageContext.SESSION_SCOPE);//session作用域pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);//application作用域pageContext.findAttribute("name");//从pageContext ,request ,session ,application依次查找
%>
4.6 整合
五、EL表达式
5.1 概念
5.2 作用
5.3 EL的应用
5.3.1 案例
<%//存储在request作用域request.setAttribute("name","tom");request.setAttribute("age",18);
%>
${requestScope.name} <%--获取request作用域中name对应的值,找到就返回,没找到返回"" --%>
${name}<%--从最小作用域逐级查找name对应的值,找到就返回,没找到返回"" --%>
5.3.2 区别
5.4 获取引用类型
<%Emp e = new Emp();e.setName("gavin");e.setAge(19);request.setAttribute("e",e);
%>
${requestScope.e.name}<%-- 调用getName()方法 --%>
5.5 获取集合元素
<%int[] array = new int[]{1,2,3,4,5};request.setAttribute("array",array);List<Emp> emps = new ArrayList<>();emps.add(new Emp(1,"gavin",2000,19));emps.add(new Emp(2,"marry",3000,29));emps.add(new Emp(3,"jack",4000,39));request.setAttribute("emps",emps);Map<String,String> maps = new HashMap<>();maps.put("CN","中国");maps.put("FK","法国");maps.put("US","美国");request.setAttribute("maps",maps);
%>
${requestScope.array[0]}
${requestScope.emps[0]} <%-- 也可以用 ${requestScope.emps.get(0)} --%>
${requestScope.maps.CN} <%-- 也可以用 ${requestScope.maps["US"]} -->
5.6 运算符
5.6.1 执行运算
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>运算符</title>
</head>
<body><%request.setAttribute("num",1234);String ss = "123";request.setAttribute("ss",ss);%><h1>算术运算</h1>${num + 1}<br/>${num - 1}<br/>${num * 2}<br/>${num div 2}<br/>${num mod 2}<br/><hr/><h1>关系运算</h1>${num == 1234}<br/>${num != 1234}<br/>${num > 1200}<br/>${num < 1200}<br/>${num >= 1234}<br/>${num <= 1234}<br/><hr/><h1>逻辑运算</h1>${num %2==0 || num /2 ==1}<br/>${num % 2==0 && num % 4==0}<br/>${!(num > 1234)}<br/><hr/><h1>empty运算符</h1>${ss == null}<br/>${empty ss}<br/>
</body>
</html>
5.6.2 empty
<%String s1="";pageContext.setAttribute("s1", s1);String s2=null;pageContext.setAttribute("s2", s2);String s3="122222";pageContext.setAttribute("s3", s3);List list1 =new ArrayList();pageContext.setAttribute("list1", list1);
%>
<!-- empty关键只要内容是空true -->
${empty s1}<br>
${empty s2}<br>
${empty s3}<br>
${empty list1}<br>
5.7 隐式对象
5.7.1 上下文
<%=request.getContextPath() %>
${pageContext.request.contextPath}
5.7.2 获取Cookie
${cookie.username}//获取名为username的cookie对象
${cookie.password}//获取名为password的cookie对象
${cookie.password.value}//获取password的cookie的value值
六、JSTL
6.1 问题
6.2 概念
6.3 作用
6.4 使用
6.5 核心标签
6.5.1 条件标签
<!-- test属性中是条件,但是条件需要使用EL表达式来书写 -->
<h3>条件标签:if</h3>
<c:if test="${8>2 }">8大于2是成立的
</c:if>
<c:if test="${8<2 }">8小于2是成立的
</c:if>
6.5.2 choose
<c:when test="条件1">结果1< /c:when>
<c:when test="条件2">结果2< /c:when>
<c:when test="条件3">结果3< /c:when>
<c:otherwise >结果4< /c:otherwise>< /c:choose>
<h3>条件标签:choose(等价于java中多重if)</h3>
<%-- 测试成绩等级 >90 优秀 >80 良好 >70 中等 >60及格--%>
<c:set var="score" value="80"></c:set>
<c:choose><c:when test="${score>=90 }">优秀</c:when><c:when test="${score>=80 }">良好</c:when><c:when test="${score>=70 }">中等</c:when><c:when test="${score>=60 }">及格</c:when><c:otherwise>不及格</c:otherwise>
</c:choose>
6.5.3 foreach
<c:foreachvar="变量名"items="集合"begin="起始下标"end="结束下标"step="间隔长度"varstatus="遍历状态">
< /c:foreach>
<h3>测试list集合遍历获取学生列表</h3><table border="1" width="80%" bordercolor="red" cellspacing="0"align="center"><tr><th>学号</th><th>姓名</th><th>成绩</th><th>班级</th><th>是否是第一个</th><th>是否是最后一个</th><th>计数count</th><th>索引index</th></tr>
<!-- varStatus:变量状态:遍历出的每一项内容的状态:first 是否是第一行last 是否是最后一行count 当前行数index 当前元素的下标--><!-- var :遍历出的每一项使用变量先存储items:集合(使用El表达式)--><c:forEach var="stu" items="${students}" varStatus="vs"><tr><td>${stu.id}</td><td>${stu.name}</td><td>${stu.score}</td><td>${stu.classes}</td><td>${vs.first}</td><td>${vs.last}</td><td>${vs.count}</td><td>${vs.index}</td></tr></c:forEach>
</table>
6.5.4 url
<c:url context='${pageContext.request.contextPath}' value='/xxxController' />
//在form表单的action中嵌套动态路径
<form action="<c:url context='${pageContext.request.contextPath}'
value='/xxxController' />">
</form>
6.6 fmt
<c:set var="now" value="<%=new java.util.Date()%>" /><p>日期格式化 (1): <fmt:formatDate type="time"value="${now}" /></p>
<p>日期格式化 (2): <fmt:formatDate type="date"value="${now}" /></p>
<p>日期格式化 (3): <fmt:formatDate type="both"value="${now}" /></p>
<p>日期格式化 (4): <fmt:formatDate type="both"dateStyle="short" timeStyle="short"value="${now}" /></p>
<p>日期格式化 (5): <fmt:formatDate type="both"dateStyle="medium" timeStyle="medium"value="${now}" /></p>
<p>日期格式化 (6): <fmt:formatDate type="both"dateStyle="long" timeStyle="long"value="${now}" /></p>
<p>日期格式化 (7): <fmt:formatDate pattern="yyyy-MM-dd"value="${now}" /></p>日期格式化 (1): 11:19:43
日期格式化 (2): 2016-6-26
日期格式化 (3): 2016-6-26 11:19:43
日期格式化 (4): 16-6-26 上午11:19
日期格式化 (5): 2016-6-26 11:19:43
日期格式化 (6): 2016年6月26日 上午11时19分43秒
日期格式化 (7): 2016-06-26
<c:set var="balance" value="120000.2309" /><p>格式化数字 (1): <fmt:formatNumber value="${balance}"type="currency"/></p>
<p>格式化数字 (2): <fmt:formatNumber type="number"maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化数字 (3): <fmt:formatNumber type="number"maxFractionDigits="3" value="${balance}" /></p>
<p>格式化数字 (4): <fmt:formatNumber type="number"groupingUsed="false" value="${balance}" /></p>
<p>格式化数字 (5): <fmt:formatNumber type="percent"maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化数字 (6): <fmt:formatNumber type="percent"minFractionDigits="10" value="${balance}" /></p>
<p>格式化数字 (7): <fmt:formatNumber type="percent"maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化数字 (8): <fmt:formatNumber type="number"pattern="###.###E0" value="${balance}" /></p>
<p>美元 :
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="${balance}" type="currency"/></p>格式化数字 (1): ¥120,000.23
格式化数字 (2): 000.231
格式化数字 (3): 120,000.231
格式化数字 (4): 120000.231
格式化数字 (5): 023%
格式化数字 (6): 12,000,023.0900000000%
格式化数字 (7): 023%
格式化数字 (8): 120E3
美元 : $120,000.23
6.7 整合
七、MVC框架
7.1 MVC概念
7.2 详解
7.3 优点
7.4 应用
7.5 三层架构与MVC
7.5.1 三层架构
7.5.2 区别
相关文章:

JavaWeb笔记之JSP
一、引言 现有问题 在之前学习Servlet时,服务端通过Servlet响应客户端页面,有什么不足之处? 开发方式麻烦:继承父类、覆盖方法、配置Web.xml或注解。 代码修改麻烦:重新编译、部署、重启服务。 显示方式麻烦&#x…...

在x64上构建智能家居(home assistant)(二)(新版Debain12)连接Postgresql数据库
新版数据库安装基本和旧版相同,大部分可以参考旧版本在x64上构建智能家居(home assistant)(二)连接Postgresql数据库_homeassist 数据库-CSDN博客 新版本的home assistant系统安装,我在原来写的手顺上直接修改了,需要的可以查看在x64上构建智能家居(home…...
八股文打卡day6——计算机网络(6)
面试题:GET请求和POST请求的区别 我的回答: 1.作用不同:GET是用来获取服务器资源的;POST是用来向服务器提交资源的; 2.参数传递方式不同:GET请求参数一般写在URL中的,只能接收ASCII字符;POST的…...

【PHY6222】绑定详解
1.函数详解 bStatus_t GAPBondMgr_SetParameter( uint16 param, uint8 len, void* pValue ) 设置绑定参数。 bStatus_t GAPBondMgr_GetParameter( uint16 param, void* pValue ) 获取绑定参数。 param: GAPBOND_PAIRING_MODE,配对模式,…...

vue事件绑定
vue提供了v-on事件绑定指令,用来辅助程序员为DOM元素绑定事件监听,语法格式如下: v-on:指令可以简写为 注意:原生DOM对象有onclick,oninput,onkeyup等原生事件,替换为vue的事件绑定…...
如何在服务器上部署springboot项目
在服务器上部署Spring Boot项目通常有以下步骤: 在服务器上安装Java运行环境:首先确保服务器上已经安装了Java运行环境(至少需要Java 8或以上版本)。 快速安装JDK命令: yum install java-1.8.0-openjdk.x86_64 打包S…...
基于Spring Boot的支教志愿者招聘网站
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Spring Boot的支教志愿者招聘网站,j…...

安装gnvm,nodejs,npm使用方法
安装gnvm,nodejs,npm使用方法 一、安装gnvm gnvm.exe下载地址: https://download.csdn.net/download/hsg77/88651752 http://ksria.com/gnvm/#download 二、配置gnvm环境变量 新建目录,如:d:/nodejs 并把gnvm.exe存储到此目录 并把d:/node…...

word导入导出-Apache POI 和 Poi-tl
word 文件读取 使用Apache POI Word 进行读取文件 使用poi 时如果报ClassNotFoundException 等错误,请注意请求以下maven 文件的版本 Apache POI Word 说明文档:Apache POI Word 说明文档 maven 解决依赖冲突教程:https://www.cnblogs.com/…...

Hadoop 集群环境搭建
目录 第一部分:系统安装... 3 1:图形化安装... 3 2:选择中文... 3 3:安装选项... 3 4:软件选项... 4 5:安装位置... 4 6:网络配置... 6 7:开始安装... 7 8:创建用户... 7…...

maven完结,你真的学完了吗
书接上文:必学的maven的起步-CSDN博客 分模块开发与设计 分模块开发: 创建模块书写代码模块 模块中需要其他的模块,就将他安装到仓库然后再dep中导入依赖通过maven指令安装模块到本地仓库(install) 聚合与继承 聚合…...

【Xcode】解决Unable to process request - PLA Update available
出现场景 IOS更新app时,使用Xcode上传新版本的包时,提示无法上传。 Unable to process request -PLA update available you currently dont have access to this membership resource. To resolve this issue ,agree to the latest program license a…...

力扣单调栈算法专题训练
目录 1 专题说明2 训练 1 专题说明 本博客用来计算力扣上的单调栈题目、解题思路和代码。 单调栈题目记录: 2232866美丽塔II 2 训练 题目1:2866美丽塔II。 解题思路:先计算出prefix[i],表示0~i满足递增情况下,0~i…...

【NI-RIO入门】理解Windows、Real Time与FPGA之间数据通信的原理
于NI kb摘录 1.概述 对于NI RIO系列设备(CompactRIO、sbRIO、myRIO等)进行编程时,需要注意有三个不同的组件。 人机界面 (HMI) 。有时称为“主机”,为用户提供图形用户界面(GUI),用于监控系统…...

关于游戏性能优化的技巧
关于游戏性能优化的技巧 游戏性能优化对象池Jobs、Burst、多线程间隔处理定时更新全局广播缓存组件缓存常用数据2D残影优化2D骨骼转GPU动画定时器优化DrawCall合批处理优化碰撞层优化粒子特效 游戏性能优化 好久没有在CSDN上面写文章了,今天突然看到鬼谷工作室技术…...

antdesignpro实现滚动加载分页数据
原理解析:每滚动一次相当于翻页,请求后端时给的页码参数要想办法加1,后端才能根据页码给出相应数据 注意后端收到页码参数之后要准确计算出每页的首行数据,关键逻辑代码: # 根据前端传的页码,进行计算下一…...

步兵 cocos2dx 加密和混淆
文章目录 摘要引言正文代码加密具体步骤代码加密具体步骤测试和配置阶段IPA 重签名操作步骤 总结参考资料 摘要 本篇博客介绍了针对 iOS 应用中的 Lua 代码进行加密和混淆的相关技术。通过对 Lua 代码进行加密处理,可以确保应用代码的安全性,同时提高性…...

【算法设计与分析】——动态规划算法
🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:…...

WPF组合控件TreeView+DataGrid之DataGrid封装
(关注博主后,在“粉丝专栏”,可免费阅读此文) wpf的功能非常强大,很多控件都是原生的,但是要使用TreeViewDataGrid的组合,就需要我们自己去封装实现。 我们需要的效果如图所示&#x…...

PIL/Pillow
Abstract PIL(Python Imaging Library)是一个用于图像处理的 Python 库。它提供了广泛的功能,包括图像加载、保存、调整大小、裁剪、旋转、滤镜应用等。 由于 PIL 的开发停止在 2009 年,因此推荐使用其后续的维护版本 Pillow。Pillow 是一个兼容 PIL 接…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...

Pandas 可视化集成:数据科学家的高效绘图指南
为什么选择 Pandas 进行数据可视化? 在数据科学和分析领域,可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 内置的可视化功能因其与数据结…...