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 接…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
