当前位置: 首页 > news >正文

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

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

Mybatis--TypeHandler使用手册

TypeHandler使用手册 场景&#xff1a;想保存user时 teacher自动转String &#xff0c;不想每次保存都要手动去转String&#xff1b;从DB查询出来时&#xff0c;也要自动帮我们转换成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 一、概念 首先介绍了什么是网络编程&#xff…...

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…...

最长对称子串

对给定的字符串&#xff0c;本题要求你输出最长对称子串的长度。例如&#xff0c;给定Is PAT&TAP symmetric?&#xff0c;最长对称子串为s PAT&TAP s&#xff0c;于是你应该输出11。 输入格式&#xff1a; 输入在一行中给出长度不超过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…...

异地组网怎么管理?

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

Kafka参数介绍

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

如何利用待办事项清单提高工作效率?

你是否经常因为繁重的工作量而感到不堪重负&#xff1f;你是否在努力赶工期或经常忘记重要的电子邮件&#xff1f;你并不是特例。如何利用待办事项清单提高工作效率&#xff1f;这里有一个简单的方法可以帮你理清混乱并更高效地完成任务—待办事项清单。 这种类型的清单可以帮…...

力扣经典150题第二题:移除元素

移除元素问题详解与解决方法 1. 介绍 移除元素问题是 LeetCode 经典题目之一&#xff0c;要求原地修改输入数组&#xff0c;移除所有数值等于给定值的元素&#xff0c;并返回新数组的长度。 问题描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等…...

55555555555555

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…...

用Skimage学习数字图像处理(018):图像形态学处理(上)

本节开始讨论图像形态学处理&#xff0c;这是上篇&#xff0c;将介绍与二值形态学相关的内容&#xff0c;重点介绍两种基本的二值形态学操作&#xff1a;腐蚀和膨胀&#xff0c;以及三种复合二值形态学操作&#xff1a;开、闭和击中击不中变换。 目录 9.1 基础 9.2 基本操作…...

MySQL中 in 和 exists 区别

在MySQL中&#xff0c;IN和EXISTS都是用于在子查询中测试条件的操作符&#xff0c;但它们在处理和效率上有一些重要的区别。MySQL中的in语句是把外表和内表作hash连接&#xff0c;⽽exists语句是对外表作loop循环&#xff0c;每次loop循环再对内表进⾏查询。⼤家⼀直认为exists…...

Java基础 - 代码练习

第一题&#xff1a;集合的运用&#xff08;幸存者&#xff09; 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集群&#xff0c;即Redis Cluster&#xff0c;是Redis 3.0开始引入的分布式存储方案。实际使用中集群一般由多个节点(Node)组成&#xff0c;Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点&#xff1a;只有主节点负责读写请求和集群信息的维护&#…...

基于opencv的猫脸识别模型

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

基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用

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

数据库重点知识(个人整理笔记)

目录 1. 索引是什么&#xff1f; 1.1. 索引的基本原理 2. 索引有哪些优缺点&#xff1f; 3. MySQL有哪几种索引类型&#xff1f; 4. mysql聚簇和非聚簇索引的区别 5. 非聚簇索引一定会回表查询吗&#xff1f; 6. 讲一讲前缀索引&#xff1f; 7. 为什么索引结构默认使用B…...

[技术闲聊]checklist

电路设计完成后&#xff0c;需要确认功能完整性&#xff0c;明确是否符合设计规格需求&#xff1b;需要确认电路设计是否功能符合但是系列项不符合设计规则&#xff0c;如果都没有问题&#xff0c;那么就可以发给layout工程师。 今天主要讲讲电路设计规则&#xff0c;涉及到一…...

力扣刷题 二叉树的迭代遍历

题干 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] 输…...

【二】Django小白三板斧

今日内容 静态文件配置 request对象方法初识 pycharm链接数据库&#xff08;MySQL&#xff09; django链接数据库&#xff08;MySQL&#xff09; Django ORM简介 利用ORM实现数据的增删查改 【一】Django小白三板斧 HttpResponse 返回字符串类型的数据 render 返回HTML文…...

MyBatis的基本应用

源码地址 01.MyBatis环境搭建 添加MyBatis的坐标 <!--mybatis坐标--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency><!--mysql驱动坐…...

Day80:服务攻防-中间件安全HW2023-WPS分析WeblogicJettyJenkinsCVE

目录 中间件-Jetty-CVE&信息泄漏 CVE-2021-34429(信息泄露) CVE-2021-28169(信息泄露) 中间件-Jenkins-CVE&RCE执行 cve_2017_1000353 CVE-2018-1000861 cve_2019_1003000 中间件-Weblogic-CVE&反序列化&RCE 应用金山WPS-HW2023-RCE&复现&上线…...

使用generator实现async函数

我们先来看一下async函数是怎么使用的 const getData (sec) > new Promise((resolve) > {setTimeout(() > resolve(sec * 2), sec * 1000);})// aim to get this asycnFun by generator async function asyncFun() {const data1 await getData(1);const data2 awa…...

go并发请求url

sync.WaitGroup写法 package mainimport ("database/sql""fmt""net/http""sync""time"_ "github.com/go-sql-driver/mysql" )func main() {//开始计时start : time.Now()//链接数据库&#xff0c;用户名&#xf…...

刷题之Leetcode704题(超级详细)

704. 二分查找 力扣题目链接(opens new window)https://leetcode.cn/problems/binary-search/ 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&am…...

leetcode热题100.前k个高频元素

作者&#xff1a;晓宜 &#x1f308;&#x1f308;&#x1f308; 个人简介&#xff1a;互联网大厂Java准入职&#xff0c;阿里云专家博主&#xff0c;csdn后端优质创作者&#xff0c;算法爱好者 ❤️❤️❤️ 你的关注是我前进的动力&#x1f60a; Problem: 347. 前 K 个高频元…...

LangChain Demo | Agent X ReAct X wikipedia 询问《三体》的主要内容

背景 LangChain学习中&#xff0c;尝试改了一下哈里森和吴恩达课程当中的问题&#xff0c;看看gpt-3.5-turbo在集成了ReAct和wikipedia后&#xff0c;如何回答《三体》的主要内容是什么这个问题&#xff0c;当然&#xff0c;主要是为了回答这问题时LangChain内部发生了什么。所…...

Revit 2025新功能一览~

Hello大家好&#xff01;我是九哥~ Revit2025已经更新&#xff0c;安装后&#xff0c;简单试了下&#xff0c;还是挺不错的&#xff0c;流畅度啊&#xff0c;新功能啊&#xff0c;看来还是有听取用户意见的&#xff0c;接下来就简单看看都有哪些新功能。 好了&#xff0c;今天的…...

Head First Design Patterns -代理模式

什么是代理模式 代理模式为另一个对象提供替身或者占位符&#xff0c;以便控制客户对对象的访问&#xff0c;管理访问的方式有很多种。例如远程代理、虚拟代理、保护代理等。 远程代理&#xff1a;管理客户和远程对象之间的交互。 虚拟代理&#xff1a;控制访问实例化开销大的对…...

网站 ip pv/seo查询seo优化

from keras.datasets import cifar10(x_train, y_train), (x_test, y_test) cifar10.load_data()# 如果不处理的话&#xff0c;每张图的每个通道都是 (0-255) 之间的取值 x_train[0]array([[[ 59, 62, 63],[ 43, 46, 45],[ 50, 48, 43],...,[158, 132, 108],[152, 125, …...

网站建设预付款/网址怎么创建

1 LSA Introduction LSA(latent semantic analysis)潜在语义分析&#xff0c;也被称为LSI(latent semantic index)&#xff0c;是Scott Deerwester, Susan T. Dumais等人在1990年提出来的一种新的索引和检索方法。该方法和传统向量空间模型(vector space model)一样使用向量来表…...

做网站给源码吗/如何做推广最有效果

AliNLP 自然语言技术平台 阿里AliNLP系统架构图 1. 词法分析&#xff08;分词、词性、实体&#xff09;&#xff1a; - 算法&#xff1a;基于Bi-LSTM-CRF算法体系&#xff0c;以及丰富的多领域词表 2. 句法分析&#xff08;依存句法分析、成分句法分析&#xff09;&#xff1…...

泉州网站建设手机/瑞昌网络推广

前文传送门&#xff1a;图像加法图像加法有两种方式&#xff0c;一种是通过 Numpy 直接对两个图像进行相加&#xff0c;另一种是通过 OpenCV 的 add() 函数进行相加。不管使用哪种方法&#xff0c;相加的两个图像必须具有相同的深度和类型&#xff0c;简单理解就是图像的大小和…...

山东网站建设负面消息处理/郑州抖音seo

浏览器被劫持如何恢复? 参考链接: 关于IE主页被锁定为毒霸网址大全的解决方法 https://www.iefans.net/ie-zhuye-suoding-duba-wangzhi-daquan/ 直接删除被劫持软件的携带软件,如下面几个常用的流氓网站: 1、2345.com2、毒霸网络大全 duba.com 金山毒霸、WPS、驱动精…...

推广做网站怎么样/百度搜索大数据查询

除了基本操作符中所讲的运算符&#xff0c;Swift还有很多复杂的高级运算符&#xff0c;包含了C语和Objective-C中的位运算符和移位运算。 不同于C语言中的数值计算。Swift的数值计算默认是不可溢出的。溢出行为会被捕获并报告为错误。你是有益的&#xff1f;好吧&#xff0c;你…...