JSP基础知识概述
目录
- JSP
- 一、什么是JSP
- 1.1 概念
- 1.2 创建JSP
- 1.3 JSP编写Java代码
- 1.4 JSP实现原理
- 二、JSP与HTML集成
- 2.1 普通脚本
- 2.2 声明脚本
- 2.3 输出脚本
- 2.4 JSP指令
- 2.5 动作标签
- 三、内置对象
- 3.1 四大域对象
JSP
一、什么是JSP
1.1 概念
-
简化的Servlet设计,在HTMl标签中嵌套Java代码,用以高效开发Web应用的动态网页。
-
作用:替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)
1.2 创建JSP
在web目录下新建*.jsp文件(与WEB-INF平级)
1.3 JSP编写Java代码
<%@ 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>
//使用<%= %>标签编写java代码在页面中打印当前系统时间
- 访问JSP
在浏览器输入http://ip:port/项目路径/资源名称
例如:http://127.0.0.1:8080/项目路径/资源名称
1.4 JSP实现原理
Tomcat会将xxx.jsp转换成Java代码,进而编译成.class文件运行,最终将运行结果通过response响应给客户端

二、JSP与HTML集成
2.1 普通脚本
语法:<% Java代码 %>
<html>
<head><title>Hello World</title></head>
<body><%//jsp中,使用小脚本嵌入Java代码!out.println("hi");//打印内容在客户端System.out.println("hi");//打印内容在控制台%>
</body>
</html>
- 经验:普通脚本可以使用所有java语法,除了定义函数。
- 注意:脚本与脚本之间不可嵌套,脚本与HTML标签不可嵌套
2.2 声明脚本
语法:<%! 定义变量、函数 %>
<%! int i = 0; %>
<%! int a,b,c; %>
<%! Object object = new Object(); %>
<%!//定义方法public void m1(){System.out.println("你好");
}
%>
- 注意:声明脚本声明的变量是全局变量。
- 声明脚本的内容必须在普通脚本<% %>中调用。
- 如果声明脚本中的函数具有返回值,使用输出脚本调用<%= %>。
2.3 输出脚本
语法:<%= Java表达式%>
<%@ 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>
- 经验:输出脚本可以输出带有返回值的函数
- 注意:输出脚本中不能加;
2.4 JSP指令
JSP指令用来设置与整个JSP页面相关的属性。
-
指令
- <%@ page … %>:定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
- <%@ include … %>:包含其他文件
- <%@ taglib … %>:引入标签库的定义,可以是自定义标签
-
page指令
语法:<%@ page attribute="value1" attribute2="value2" %>

- include指令
语法:<%@ include file="被包含的JSP路径" %>
被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是当前JSP文件的一部分,会被同时编译执行(静态包含)。
<%@ include file="header.jsp" %>
...
...
<%@ include file="footer.jsp" %>
-
注意:可能会有重名的冲突问题,不建议使用。
-
taglib指令
语法:<%@ taglib url="外部标签库路径" prefix="前缀" %>
<%@ taglib url="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2.5 动作标签
- include
- 语法:<jsp:include page=“相对URL地址” />
- jsp:include动作元素会将外部文件输出结果包含在JSP中(动态包含)。

- 注意:前面已经介绍过include指令,它是将外部文件的输出代码复制到了当前JSP文件中。而这里的jsp:include动作不同,是将外部文件的输出结果引入到了当前JSP文件中。
- useBean
- 语法:<jsp:useBean id=“name” class=“package.className” />
- jsp:useBean动作用来加载一个将在JSP页面中使用的JavaBean。
<jsp:useBean id="user" class="com.qf.entity.User" />
- 在类载入后,我们可以通过jsp:setProperty和jsp:getProperty动作来修改和获取bean的属性。
- setProperty
可以在jsp:useBean元素之后使用jsp:setproperty进行属性的赋值

<jsp:useBean id="user" class="com.qf.entity.User" />
<jsp:setProperty name="user" property="name" value="gavin" />
- getProperty
jsp:Property动作提取指定Bean属性的值,转换成字符串,然后输出。

<jsp:useBean id="user" class="com.qf.entity.User" />
<jsp:setProperty name="user" property="name" value="gavin" />
<jsp:getProperty name="user" property="name" />
- forward
语法:<jsp:forward page="相对URL地址" />

<jsp:forward page="index.jsp" />
- param
语法:<jsp:param name="" value="" />
<jsp:forward page="index.jsp"><!-- http请求参数传递--><jsp:param name="sex" value="nan" />
</jsp:forward>
三、内置对象
- 由JSP自动创建的对象,可以直接使用

3.1 四大域对象
-
JSP有四大作用域对象,存储数据和获取数据的方式一样,不同的是取值的范围有差别
-
pageContext:当前JSP页面范围
-
request:一次请求有效
-
session:一次会话有效(关闭浏览器失效)
-
application:整个web应用有效(服务器重启或关闭失效)
-
以上都是通过setAttribute(“name”,value);存储值;通过getattribute(“name”);获取值
-
相关文章:
JSP基础知识概述
目录 JSP一、什么是JSP1.1 概念1.2 创建JSP1.3 JSP编写Java代码1.4 JSP实现原理 二、JSP与HTML集成2.1 普通脚本2.2 声明脚本2.3 输出脚本2.4 JSP指令2.5 动作标签 三、内置对象3.1 四大域对象 JSP 一、什么是JSP 1.1 概念 简化的Servlet设计,在HTMl标签中嵌套Jav…...
国产编程—— 仓颉
应用 仓颉编程语言是一款由华为主导设计和实现的面向全场景智能的编程语言,主要应用于以下领域: 中文字符编码和文本数据处理:仓颉编程语言充分利用汉字的结构特点来设计编码,为开发者提供了一种高效的方式来编码、存储和处理中…...
0X JavaSE-并发编程(锁)
1...
云计算【第一阶段(18)】磁盘管理与文件系统 分区格式挂载(一)
目录 一、磁盘基础 二、磁盘结构 2.1、机械硬盘 2.2、固态硬盘 2.3、扩展移动硬盘 2.4、机械磁盘的一些计算(了解) 2.5、磁盘接口类型 二、Linux 中使用的文件系统类型 2.1、磁盘分区的表示 2.1.1、主引导记录(MBR) 2.1.2、Linux中将硬盘、分…...
Flask-cache
Flask-cache 目录 Flask-cache基本使用配置可用参数SimpleCacheNullCacheFileSystemCacheRedisCacheRedisSentinelCacheRedisClusterCacheMemcachedCacheSASLMemcachedCacheUWSGICache Flask-Cache是一个强大的缓存库,为基于Flask的应用提供了简单易用的API和多种缓…...
【面试题】面试小技巧:如果有人问你 xxx 技术是什么?_面试问你对什么技术特别了解
前端工程越来越大,前面几种方案不能很好的支持单元测试。 在这样的背景下,React 诞生了。React 带来了新的思维模式,UI fn(props),React 中一个组件就是一个函数或者一个类,一个函数或者一个类就是一个基础单位&…...
简单分享Python语言(发现其实并不难)
一. Python基础 Python是一种解释型语言,这意味着开发者可以在代码被编写后立即执行它们,而无需编译。Python的基本语法简单明了,以下是一些基础知识点: 变量和数据类型:Python支持多种数据类型,包括整型&…...
基于VTK9.3.0+Visual Studio2017 c++实现DICOM影像MPR多平面重建
开源库:VTK9.3.0 开发工具:Visual Studio2017 开发语言:C 实现过程: void initImageActor(double* Matrix, double* center, vtkSmartPointer<vtkImageCast> pImageCast,vtkSmartPointer<vtkImageReslice> imageRe…...
【论文精读】ViM: Out-Of-Distribution with Virtual-logit Matching 使用虚拟分对数匹配的分布外检测
文章目录 一、文章概览(一)问题来源(二)文章的主要工作(三)相关研究 二、动机:Logits 中缺失的信息(一)logits(三)基于零空间的 OOD 评分…...
【面试题】前端 移动端自适应?_前端移动端适配面试题
设备像素比 设备像素比 (DevicePixelRatio) 指的是设备物理像素和逻辑像素的比例 。比如 iPhone6 的 DPR 是2。 设备像素比 物理像素 / 逻辑像素。可通过 window.devicePixelRatio 获取,CSS 媒体查询代码如下 media (-webkit-min-device-pixel-ratio: 3), (min-…...
在Maven工程中手动配置并测试SpringBoot(巨详)
本篇博客承继自博客: 在IDEA 2024.1.3 (Community Edition)中创建Maven项目_idea2024.1.3如何创建maven项目-CSDN博客 配置POM文件 打开工程中的pom.xml文件,先向其中写入 <parent><groupId>org.springframework.boot</groupId><…...
c# 去掉字符串首尾的 特殊符号
如果首尾的 - 数量不确定,可以使用以下方法来去掉字符串两端的 - 字符: 使用正则表达式: using System.Text.RegularExpressions;string input "---Hello, World!---"; string trimmed Regex.Replace(input, "^-*|-*$", ""); // trimmed 为 …...
在容器中共享本地文件
在容器中共享本地文件 目录 卷与绑定挂载的对比在主机和容器之间共享文件Docker 访问主机文件的文件权限试一试 运行一个容器使用绑定挂载在 Docker Dashboard 中访问文件停止容器 额外资源下一步 每个容器都有一切需要运行的资源,而不依赖于主机机器上预先安装的…...
Java Matcher类方法深度剖析:查找和匹配、索引方法
1. 引言 在Java中,正则表达式是处理字符串的强大工具,而java.util.regex包中的Matcher类则是实现这一功能的核心。对于Java工程师而言,熟练掌握Matcher类的使用方法,无疑能够极大地提升字符串处理的效率和准确性。本文将对Matcher类的方法进行深度讲解,并按照查找和匹配方…...
Redis-数据类型-zset
文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db4数据库4、将一个或多个member元素及其score值加入到有序集key当中5、升序返回有序集key6、升序返回有序集key,让分数一起和值返回的结果集7、降序返回有序集key,让分数一起和值返回到结…...
手撕RPC——前言
手撕RPC——前言 一、RPC是什么?二、为什么会出现RPC三、RPC的原理3.1 RPC是如何做到透明化远程服务调用?3.2 如何实现传输消息的编解码? 一、RPC是什么? RPC(Remote Procedure Call,远程过程调用ÿ…...
Vite: 关于预构建的毫秒级响应
概述 在我们的项目代码中,我们所说的模块代码其实分为两部分 一部分是源代码,也就是业务代码另一部分是第三方依赖的代码,即 node_modules 中的代码 Vite 是一个提倡 no-bundle 的构建工具,相比于传统的 Webpack能做到开发时的模…...
Docker 中 MySQL 迁移策略(单节点)
目录 一、 简介二、操作流程2.1 进入mysql容器2.2 导出 MySQL 数据2.3. 将导出的文件复制到宿主机2.4 创建 Docker Compose 配置2.5 启动新的 Docker 容器2.6 导入数据到新的容器2.7 验证数据2.8 删除旧的容器(删除操作需慎重) 三、推荐配置四、写在后面…...
猫头虎 分享已解决Error || API Rate Limits: HTTP 429 Too Many Requests
猫头虎 分享已解决Error || API Rate Limits: HTTP 429 Too Many Requests 🐯 摘要 📄 大家好,我是猫头虎,一名专注于人工智能领域的博主。在AI开发中,我们经常会遇到各种各样的错误,其中API Rate Limits…...
开发一个python工具,pdf转图片,并且截成单个图片,然后修整没用的白边及循环遍历文件夹全量压缩图片
今天推荐一键款本人开发的pdf转单张图片并截取没有用的白边工具 一、开发背景: 业务需要将一个pdf文件展示在前端显示,但是基于各种原因,放弃了h5使用插件展示 原因有多个,文件资源太大加载太慢、pdf展示兼容性问题、pdf展示效果…...
3种方法解决Windows外接显示器亮度控制难题:Twinkle Tray技术深度解析
3种方法解决Windows外接显示器亮度控制难题:Twinkle Tray技术深度解析 【免费下载链接】twinkle-tray Easily manage the brightness of your monitors in Windows from the system tray 项目地址: https://gitcode.com/gh_mirrors/tw/twinkle-tray 对于Wind…...
Lyrebird常见问题排查手册:解决无法启动和音频延迟的终极方案
Lyrebird常见问题排查手册:解决无法启动和音频延迟的终极方案 【免费下载链接】lyrebird 🦜 Simple and powerful voice changer for Linux, written with Python & GTK 项目地址: https://gitcode.com/gh_mirrors/lyr/lyrebird Lyrebird是一…...
HarmonyOS 6 CalendarPickerDialog 日历选择弹窗使用文档
文章目录完整代码功能概述代码结构说明核心参数详解1. 基础参数2. DateRange 结构说明3. 示例禁用区间配置说明总结完整代码 Entry Component struct CalendarPickerDialogExample {private selectedDate: Date new Date(2025-08-05);private disabledDateRange: DateRange[]…...
当开源代码也成了「敏感物项」
前两天看到一条新闻:英国国民健康服务体系(NHS)下令关闭数百个 GitHub 仓库,全部设为私有,原因是安全担忧。 不是某个军用级的加密库,不是核设施控制系统的代码——只是一些普通的医疗数据处理工具。但因为…...
Done!硅谷分拣快递的人类工作,没了
鹭羽 发自 凹非寺量子位 | 公众号 QbitAI美国具身卷到飞起,明星企业Figure再整新活:这一次,他们让机器人进厂打工,8小时不间断直播放送。目前全网热度爆炸,已经吸引超两百万网友围观。无剪辑、完全现场实录,…...
ElevenLabs声音库资源推荐,从免费层到企业级Tier 4权限全解锁:含3个已下架但仍在灰度测试的传奇音色
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs声音库资源推荐 ElevenLabs 提供了业界领先的高质量语音合成服务,其声音库涵盖多语种、多风格及可定制化角色音色。官方声音库分为三类:预置语音(Prebuilt…...
从标注工具到AI流水线:在Windows上搭建CVAT,并连接Label Studio与Jupyter Notebook
从标注工具到AI流水线:在Windows上构建CVAT与生态工具的协同工作流 当计算机视觉项目从实验室走向生产环境时,数据标注往往成为制约迭代速度的关键瓶颈。传统孤立使用的标注工具如同信息孤岛,而现代MLOps实践需要的是能够无缝衔接数据标注、质…...
从‘调制方向’到‘闭环稳定’:一个公式搞定单相PWM整流器电流环PI参数整定
从动态模型到实战调参:单相PWM整流器电流环PI整定的工程化方法 在电力电子控制领域,单相PWM整流器的电流环设计一直是工程师面临的实操难点。理论教材中复杂的传递函数推导与实验室里实际系统的振荡现象之间,往往存在一道需要经验跨越的鸿沟…...
技能与代码审计融合实践:构建安全开发思维与实战靶场
1. 项目概述:技能与代码审计的融合实践最近在和一些做安全开发的朋友聊天,大家普遍有个感受:现在单纯会写代码,或者单纯懂点安全皮毛,已经越来越不够用了。一个功能上线,开发觉得逻辑完美,但安全…...
从 SU01 到 SAP HANA,DBMS 用户管理里的 SSO 选项到底在管什么
项目里讨论 SSO 时,大家很容易把它想成一个单点登录按钮,好像在某处勾选一下,用户就能从 SAP GUI、Fiori、报表工具一路无感访问到数据库。到了 SAP NetWeaver AS 和 SAP HANA 组合的系统里,这个理解会带来不少误会。因为从 ABAP 侧维护 DBMS 用户的 SSO 选项,只是在用户主…...
