JSP
概念:Java Server Pages,Java服务端页面
一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容
JSP = HTML + Java
快速入门
注:Tomcat中已经有了JSP的jar包,因此我们需要设置JSP坐标中的<scope>标签为provided,即只在编译阶段生效
JSP原理
JSP本质上就是一个Servlet
JSP在被访问时,由JSP容器(Tomcat)将其转换为Java文件(Servlet),在由JSP容器将其编译,最终对外提供服务的其实就是这个字节码文件
其中脚本内的代码为Java代码,而脚本外的html的代码都会以out.write调用方法的形式拼接到Java代码中
JSP脚本
JSP脚本用于在JSP页面内定义Java代码
即Java代码需要放在脚本中
JSP的脚本有三种
1.<% ... %>
<% ... %>:内容会直接放到_jspService()方法之中
即该脚本内放置的为普通的java代码,在service()方法中,会在浏览器被访问的时候执行
2.<%= ... %>
<=% ... %>:内容会放到out.print()方法中,作为out.print()的参数
即该脚本的内容会被打印到页面中,且一些变量在这里也可以直接打印到页面中,可以动态的改变页面内容(如每个人页面上显示的用户名会随着账号的不同而不同)
3.<%! ... %>
<!% ... %>:内容会放到_jspService()方法之外,被类直接包含
即该脚本的内容会在方法之外,类之内,也就是可以放一些成员变量和成员方法
截断式编码
在脚本中,代码是可以被截断的
即在两个<% ... %>之间可以有html的代码
如一个for循环,一个脚本中有大部分内容,另一个脚本中只有一个右大括号,中间有html代码,这是成立的
如图,最终tomcat编译成的java文件
JSP缺点
由于在JSP中同时要写Java代码和heml,会导致书写及其麻烦,因此采用同时使用servlet和JSP的方式
EL表达式
Expression Language 表达式语言,用于简化JSP页面内的Java代码
主要功能:获取数据
语法:
${expression}
如:
${brands}:获取域中存储的key为brands的数据
JavaWeb中的四大域对象
1.page:当前页面有效
2.request:当前请求有效
3.session:当前会话有效
4.app:当前应用有效
el表达式获取数据,会依次从这4个域中寻找
注意事项
1
当前版本中,在JSP中 若要使用EL表达式,需要在JSP页面顶部设置page中的isELIgnored为false,如下
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
2
在使用EL表达式得到一个对象的属性时,可以直接使用对象.属性的形式,JSP会自动将属性的首字母大写,并在前面加上“get”,依次来调用对应的get方法
如${brand.id},到时候会调用brand的getId()方法
JSTL标签
JSP标准标签库(Jsp Standarded Tag Library),使用标签取代JSP页面上的Java代码
JSTL使用步骤
1.导入坐标
<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency>
<dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version>
</dependency>
2.在JSP页面上引入JSTL标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
注:上图中第一个为创建JSP页面时自带的,且手动设置了不忽略EL表达式
第二个为需要引入的JSTL标签库
3.使用
<c:if>
<c:if>:类似于Java中的if语法,但没有else的功能
语法
<c:if test="条件表达式">
对应要执行的编码
</c:if>
根据条件表达式是否为true,来判断是否执行响应编码
且该标签可以与EL表达式配合使用,如下
<c:if test="${status == 1}">true</c:if><c:if test="${status == 0}">false</c:if>
注:${}可以理解为Java中 if()中的(),其内部为条件表达式
<c:foreach>
<c:foreach>:相当于for循环
语法
该标签有两种使用方式,分别对应Java中的foreach和普通for循环
foreach
<c:forEach items="" var="" varStatus="">
编码
</c:forEach>
其中
items:被遍历的容器
var:遍历产生的临时变量
varStatus:遍历状态对象,一个会根据循环次数自动生成id的对象
其有两个值,一个是index,代表从0开始计数。一个是count,代表从1开始计数
如图,varStatus用“status”表示,并且使用status.index,则在第一次循环,其值为0,第二次循环,其值为1,以此类推,若为status.count,则第一次循环其值为1,依次类推
for
<c:forEach begin="" end="" step="" var="">
编码
</c:forEach>
其中
bagin:开始数,相当于i的初始值
end:结束数,相当于i的生效范围
step:步长,即i每次循环变化的值
var:遍历产生的临时变量
MVC模式和三层架构
MVC模式
MVC是一种分层开发的模式,其中:
M:Model,业务模型,处理业务
V:View,试图,界面展示
C:Controller,控制器,处理请求,调用模型和视图
MVC好处
职责单一,互不影响
有利于分工协作
有利于组件重用
JavaBean:即pojo包下的类
三层架构
MVC模式和三层架构
相关文章:

JSP
概念:Java Server Pages,Java服务端页面 一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容 JSP HTML Java 快速入门 注:Tomcat中已经有了JSP的jar包,因此我们…...

Mybatis--TypeHandler使用手册
TypeHandler使用手册 场景:想保存user时 teacher自动转String ,不想每次保存都要手动去转String;从DB查询出来时,也要自动帮我们转换成Java对象 Teacher Data public class User {private Integer id;private String name;priva…...

网络编程(TCP、UDP)
文章目录 一、概念1.1 什么是网络编程1.2 网络编程中的基本知识 二、Socket套接字2.1 概念及分类2.2 TCP VS UDP2.3 通信模型2.4 接口方法UDP数据报套接字编程TCP流套接字编程 三、代码示例3.1 注意点3.2 回显服务器基于UDP基于TCP 一、概念 首先介绍了什么是网络编程ÿ…...

Python快速入门系列-7(Python Web开发与框架介绍)
第七章:Python Web开发与框架介绍 7.1 Flask与Django简介7.1.1 Flask框架Flask的特点Flask的安装一个简单的Flask应用示例7.1.2 Django框架Django的特点Django的安装一个简单的Django应用示例7.2 前后端交互与数据传输7.2.1 前后端交互7.2.2 数据传输格式7.2.3 示例:使用Flas…...
最长对称子串
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。 输入格式: 输入在一行中给出长度不超过1000的非空字符串。 输出格式&…...

【大模型】大模型 CPU 推理之 llama.cpp
【大模型】大模型 CPU 推理之 llama.cpp llama.cpp安装llama.cppMemory/Disk RequirementsQuantization测试推理下载模型测试 参考 llama.cpp 描述 The main goal of llama.cpp is to enable LLM inference with minimal setup and state-of-the-art performance on a wide var…...

异地组网怎么管理?
在当今信息化时代,随着企业的业务扩张和员工的分布,异地组网已经成为越来越多企业的需求。异地组网管理相对来说是一项复杂而繁琐的任务。本文将介绍一种名为【天联】的管理解决方案,帮助企业更好地管理异地组网。 【天联】组网的优势 【天联…...

Kafka参数介绍
官网参数介绍:Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/documentation/#configuration...

如何利用待办事项清单提高工作效率?
你是否经常因为繁重的工作量而感到不堪重负?你是否在努力赶工期或经常忘记重要的电子邮件?你并不是特例。如何利用待办事项清单提高工作效率?这里有一个简单的方法可以帮你理清混乱并更高效地完成任务—待办事项清单。 这种类型的清单可以帮…...
力扣经典150题第二题:移除元素
移除元素问题详解与解决方法 1. 介绍 移除元素问题是 LeetCode 经典题目之一,要求原地修改输入数组,移除所有数值等于给定值的元素,并返回新数组的长度。 问题描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等…...

55555555555555
欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…...
用Skimage学习数字图像处理(018):图像形态学处理(上)
本节开始讨论图像形态学处理,这是上篇,将介绍与二值形态学相关的内容,重点介绍两种基本的二值形态学操作:腐蚀和膨胀,以及三种复合二值形态学操作:开、闭和击中击不中变换。 目录 9.1 基础 9.2 基本操作…...
MySQL中 in 和 exists 区别
在MySQL中,IN和EXISTS都是用于在子查询中测试条件的操作符,但它们在处理和效率上有一些重要的区别。MySQL中的in语句是把外表和内表作hash连接,⽽exists语句是对外表作loop循环,每次loop循环再对内表进⾏查询。⼤家⼀直认为exists…...

Java基础 - 代码练习
第一题:集合的运用(幸存者) public class demo1 {public static void main(String[] args) {ArrayList<Integer> array new ArrayList<>(); //一百个囚犯存放在array集合中Random r new Random();for (int i 0; i < 100; …...

【Redis】redis集群模式
概述 Redis集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。实际使用中集群一般由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护&#…...

基于opencv的猫脸识别模型
opencv介绍 OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及…...

基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用
基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用 摘要引言方法 Segmentation information with attention integration for classification of breast tumor in ultrasound image 摘要 乳腺癌是世界范围内女性最常见的癌症之一。基于超声成像的计算机辅助诊断&#x…...

数据库重点知识(个人整理笔记)
目录 1. 索引是什么? 1.1. 索引的基本原理 2. 索引有哪些优缺点? 3. MySQL有哪几种索引类型? 4. mysql聚簇和非聚簇索引的区别 5. 非聚簇索引一定会回表查询吗? 6. 讲一讲前缀索引? 7. 为什么索引结构默认使用B…...
[技术闲聊]checklist
电路设计完成后,需要确认功能完整性,明确是否符合设计规格需求;需要确认电路设计是否功能符合但是系列项不符合设计规则,如果都没有问题,那么就可以发给layout工程师。 今天主要讲讲电路设计规则,涉及到一…...

力扣刷题 二叉树的迭代遍历
题干 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入:root [] 输出:[]示例 3: 输入:root [1] 输…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...