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模式和三层架构

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

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

相关文章

【yy讲解PostCSS是如何安装和使用】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Coursera上托福专项课程01:TOEFL Reading and Listening Sections Skills Mastery 学习笔记

TOEFL Reading and Listening Sections Skills Mastery Course Certificate 本文是学习 https://www.coursera.org/learn/toefl-reading-listening-sections-skills-mastery 这门课的笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 TOEFL Reading and Listening …

AI绘图:Stable Diffusion ComfyUI局部重绘与智能扩图全面教程

前言 在数字艺术创作中&#xff0c;局部重绘和智能扩图是两个非常重要的功能。局部重绘允许我们在保留原有图像的基础上&#xff0c;对特定区域进行修改或创新。而智能扩图则能够帮助我们在图像的边缘添加新的元素&#xff0c;从而扩展图像的内容。本文将详细介绍如何在Stable…

卷积篇 | YOLOv8改进之引入全维度动态卷积ODConv | 即插即用

前言:Hello大家好,我是小哥谈。ODConv是一种关注了空域、输入通道、输出通道等维度上的动态性的卷积方法,一定程度上讲,ODConv可以视作CondConv的延续,将CondConv中一个维度上的动态特性进行了扩展,同时了考虑了空域、输入通道、输出通道等维度上的动态性,故称之为全维度…

深入理解C/C++的内存管理

在C和C中&#xff0c;高效的内存管理是编写性能优化和资源高效利用程序的关键。本文将深入探讨C/C内存管理的各个方面&#xff0c;包括内存的分布、C语言和C中的动态内存管理方式&#xff0c;以及new和delete操作符的使用 C/C内存分布 C和C程序的内存可以分为以下几个区域&…

Transformer学习: Transformer小模块学习--位置编码,多头自注意力,掩码矩阵

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Transformer学习 1 位置编码模块1.1 PE代码1.2 测试PE1.3 原文代码 2 多头自注意力模块2.1 多头自注意力代码2.2 测试多头注意力 3 未来序列掩码矩阵3.1 代码3.2 测试掩码 1 …

简约轻量-失信录系统源码

失信录系统-最新骗子收录查询系统源码 首页查询&#xff1a; 举报收录页&#xff1a; 后台管理页&#xff1a; 失信录系统 V1.0.0 更新内容&#xff1a; 1.用户查询,举报功能 2.界面独立开发 3.拥有后台管理功能 4.xss,sql安全过滤 5.平台用户查询 6.用户中心&#xff08;待完…

Flume进阶学习!

本文图片来自于8.flume实时监控文件hdfs sink使用演示_哔哩哔哩_bilibili Apache Flume 的启动过程及其配置文件和脚本 在官网下载的Flume的压缩包中&#xff0c;.lib文件有大量的jar包&#xff0c;按道理说只有.lib文件就可以运行Flume程序了。只不过需要java -jar命令还要加…

第16章 网络编程

一 网络编程概述 Java是 Internet 上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库&#xff0c;可以实现无痛的网络连接&#xff0c;联网的底层细节被隐藏在 Java 的本机安装系统里&am…

C++:递增递减运算符(16)

递增递减就是自加1或者自减1 &#xff0c; 但是还有前置递增&#xff0c;后置递增&#xff0c;前置递减&#xff0c;后置递减&#xff0c;两者的区别也大有不同&#xff0c;接下来就去看一下过程 a1 b1baa2 b2a1 b1baa2 b1a2 b2b--aa1 b1a2 b2ba--a1 b2 递增 前置递增 #includ…

JAVA基础03-scanner,输出,循环,if的使用以及eclipse的安装

目录 scanner的使用 if语句的使用 eclipse的使用 switch语句的使用 输出方法的使用 循环语句 scanner的使用 实现用户数据的交互&#xff0c;用户通过终端输入数据 注意&#xff1a;使用Scanner需要导包 在程序开头加上&#xff1a;import java.util.Scanner; //由于S…

IDEA修改jdk版本

项目的版本 实际版本和想要版本要对应起来 模块版本jdk1 源jdk版本2 如果报错 无效的发行版本 看一下pom文件中的編譯版本

如何评估基于指令微调的视觉语言模型的各项能力-MMBench论文解读

1. 传统基准的固有局限 VQAv2:视觉问题回答数据集,主要用于评估视觉理解与推理能力。COCO Caption:图像描述生成数据集,用于评估模型对图像内容的理解与描述能力。GQA:结合常识的视觉问题回答数据集。OK-VQA:需要外部知识的视觉问题回答数据集。TextVQA:图像中包含文本的…

武汉星起航电子商务公司领航跨境电商新纪元,助力品牌走向全球

在全球经济一体化的时代背景下&#xff0c;跨境电商正成为推动国际贸易增长的重要力量。武汉星起航电子商务有限公司&#xff0c;作为一家专注于提供一站式解决方案的跨境电商服务商&#xff0c;凭借其丰富的实战经验和专业团队&#xff0c;在行业中取得了令人瞩目的成绩。 自…

QT----YOLOv5检测平台

目录 1 opencv环境安装1.1 报错Could NOT find CUDNN (missing: CUDNN_LIBRARY CUDNN_INCLUDE_DIR) (Required is at least version "7.5")1.2 使用camkevs编译opencv4.8.01.3 报错operator !":重载函数具有类似的转换(编译源文件 H:\opencv-4.8.0\opencv-4.8.0…

Python环境搭建—安装Python3解释器

&#x1f947;作者简介&#xff1a;CSDN内容合伙人、新星计划第三季Python赛道Top1 &#x1f525;本文已收录于Python系列专栏&#xff1a; 零基础学Python &#x1f4ac;订阅专栏后可私信博主进入Python学习交流群&#xff0c;进群可领取Python视频教程以及Python相关电子书合…

43.1k star, 免费开源的 markdown 编辑器 MarkText

43.1k star, 免费开源的 markdown 编辑器 MarkText 分类 开源分享 项目名: MarkText -- 简单而优雅的开源 Markdown 编辑器 Github 开源地址&#xff1a; https://github.com/marktext/marktext 官网地址&#xff1a; MarkText 支持平台&#xff1a; Linux, macOS 以及 Win…

单例模式以及线程安全问题

单例模式的概念 单例模式是指的是整个系统生命周期内&#xff0c;保证一个类只能产生一个实例对象 保证类的唯一性 。 通过一些编码上的技巧&#xff0c;使编译器可以自动发现咱们的代码中是否有多个实例&#xff0c;并且在尝试创建多个实例的时候&#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] 输…

Linux集群(二)集群搭建与keeplived配置

目录 一、集群搭建 1.复制3份Tomcat 2.测试Tomcat 3. 配置nginx.conf配置文件 二、keeplived 1.什么是keeplived 2.keeplived特点 3.下载和安装 3.1下载 3.2安装 3.3配置keeplived.conf配置文件 3.4测试 一、集群搭建 集群的主要目的是解决并发的问题。 1.复制3…