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

JavaWeb开发(九)JSP技术

1. JavaWeb JSP技术

1.1. JSP简介

1.1.1. 什么是JSP

  JSP全名为Java Server Page 是为了简化servlet的工作而出现的替代品。在JSP中java代码与HTML共同存在,其中HTML代码用于展示静态的内容,java代码用来展示动态的内容。

1.1.2. 为什么出现JSP技术

  1997年Java Web中只有servlet,生成html技术也需要在servlet中完成,虽然servlet也可以完成所有的输出工作,但是使用过程比较麻烦,部署也比较复杂。为了克服这些缺点1999年SUN公司推出了JSP技术。该技术在生成HTML代码的时候相比servlet方便了许多。

1.1.2. 对于servlet和JSP技术的理解:

  servlet:在java代码中嵌入html代码,更擅长编写java业务代码JSP:在html中嵌入java代码,更擅长页面展示。

1.2. jsp运行原理

  jsp在第一次被访问时会被Web容器翻译成servlet,即jsp本质上就是Servlet过程。
  第一次访间---->helloservlet.jsp----helloservlet_jsp.java---->编译运行被翻译后的servlet在Tomcat的work目录中可以找到,使用IDEA会单独为项目维护一个目录。
  通过观察发现jsp会转化为java文件,并且间接的继承了HttpServlet,实现了其中的主要方法,init、service、 destory,并且将html代码通过java方式输出给浏览器。

1.3. JSP脚本和注释

1.3.1. JSP脚本

1.<%java代码%>   ----- 内部的java代码翻译到service方法的内部
2.<%=java变量或表达式>  -----会被翻译成service方法内部out.print()
3.<%!java代码%>  ----会被翻译成servlet的成员的内容

1.3.2. JSP注释

1. Html注释:<!--注释内容--> ---可见范围jsp源码、翻译后的servlet、页面显示html源码
2. 2.java注释://单行注释 /*多行注释*/  --可见范围jsp源码 翻译后的servlet
3. 3.jsp注释:<%--注释内容--%> -----ī可见范围 jsp源码可见

在这里插入图片描述
在这里插入图片描述

1.4. jsp指令(3个)

  jsp的指令是指导jsp翻译和运行的命令,jsp包括三大指令:

1.4.1. page指令

  属性最多的指令(实际开发中page指令默认)属性最多的一个指令,根据不同的属性,指导整个页面特性。
  格式:

<%@ page 属性名1=“属性值1” 属性名2=“属性值2...%>

  常用属性如下:
  (1)language:jsp脚本中可以嵌入的语言种类;
  (2)contentType:response.setContentType(text/html;charset=UTF-8);
  (3)session:是否jsp在翻译时自动创建sessionimport:导入java的包;
  (4)errorPage:当当前页面出错后跳转到哪个页面。

<%@ page import="com.zzs.session.SessionServlet " %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<%@include file="/include.jsp" %>
<html>
<head><title>Title</title>
</head>
<body>
<h2>hello jsp</h2>
<!-- html注释 -->
<jsp:include page="/include1.jsp"></jsp:include>
<%//java单行注释/*java多行注释*/String str = "hello jsp";int i = 0;i++;
%>
<%-- jsp注释 --%>
<%="变量i=" + i%>
<%!int x = 0;%>
</body>
</html>

1.4.2. include指令

  页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp五面中格式:

<%@ include file="被包含的文件地址"%>
<jsp:include page="/include1.jsp"></jsp:include>

1.4.3. taglib指令

  在jsp页面中引入标签库(jst1标签库、struts2标签库)格式:

<%@ taglib uri="标签库地址”prefix="前缀”%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

1.5. JSP隐式对象概述

1.5.1. 什么是JSP隐式对象

  当jsp被翻译成servlet的时候,service方法内部有九个对象定义并初始化,这九个对象被称为隐式对象。

1.5.2. 九大隐式对象

在这里插入图片描述
在这里插入图片描述

1.5.3. 九大隐式对象-out对象

在这里插入图片描述

1.5.4. JSP九大隐式对象-epageContext对象

  pageContext对象就是jsp页面的上下文对象
(1)pageContext是一个域对象
  setAttribute(String name, Object obj)
  getAttribute(String name)
  removeAttrbute(String name)
(2)pageContext可以向指定的其他域中存取数据
  setAttribute(String name,Object obj,int scope)
  getAttribute(String name,int   scope)
  removeAttrbute(String name,int scope)
  findAttribute(String name)//获取顺序依次从pageContext域,request域

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%
//    pageContext.setAttribute("name","xiaoming");
//    pageContext.setAttribute("name","zhangsan",PageContext.REQUEST_SCOPE);pageContext.setAttribute("name","lisi",PageContext.SESSION_SCOPE);pageContext.setAttribute("name","wangwu",PageContext.APPLICATION_SCOPE);
%>
<%=pageContext.getAttribute("name",PageContext.REQUEST_SCOPE)%>
<%=pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE)%>
<%=pageContext.findAttribute("name")
%>
</body>
</html>

1.5.5. JSP标签

  (1)页面包含(动态包含):

<jsp:include page="被包含的页面"/>

  (2)请求转发:

<jsp:forward page="要转发的资源”/>

相关文章:

JavaWeb开发(九)JSP技术

1. JavaWeb JSP技术 1.1. JSP简介 1.1.1. 什么是JSP JSP全名为Java Server Page 是为了简化servlet的工作而出现的替代品。在JSP中java代码与HTML共同存在&#xff0c;其中HTML代码用于展示静态的内容&#xff0c;java代码用来展示动态的内容。 1.1.2. 为什么出现JSP技术 19…...

PADS Lyout布局布线实战技巧:布线优化及解决碎铜问题

1、通过加过孔 通过过孔复制 复制粘贴 也可以选择网络&#xff0c;选择右键&#xff0c;添加过孔来。 在一些孤铜的地方加过孔&#xff0c;加不了过孔的情况下&#xff0c;怎么办&#xff1f; 2、通过挖掉&#xff0c;不让铜在孤零零的地方。 右键&#xff0c;选择矩形&a…...

上下游服务间解耦的技术与管理

一、解耦为何至关重要 在当今软件研发的复杂生态中&#xff0c;耦合问题如影随形&#xff0c;困扰着众多开发者与企业。当多个模块、系统或团队紧密交织&#xff0c;相互依赖程度不断攀升&#xff0c;仿佛一张错综复杂的网&#xff0c;牵一发而动全身。就拿电商系统来说&#…...

如何解决HTML和CSS相关的问题,什么情况下会导致元素被遮挡?

在开发过程中&#xff0c;HTML 和 CSS 中的元素遮挡问题通常是由于布局、定位、层级等因素导致的。在使用 Vue.js 时&#xff0c;这些问题依然常见&#xff0c;尤其是涉及到动态渲染、条件渲染和组件嵌套的场景。以下是一些常见的导致元素被遮挡的原因&#xff0c;并通过 Vue.j…...

Infineon PSoC 4 CapSense ModusToolbox IDE - 系统生态篇

本文档说明了 ModusToolbox 软体环境的 4 个层面&#xff0c;该环境为 CapSense 设备和生态系统提供支援。本文是 Infineon PSoC 4 CapSense ModusToolbox IDE-系统介绍的延伸篇 (Infineon PSoC 4 CapSense ModusToolbox IDE -系统介绍篇 - 大大通(简体站))。 什么是ModusToolb…...

[算法]布隆过滤器

布隆过滤器&#xff08;Bloom Filter&#xff09;是一种空间效率很高的概率型数据结构&#xff0c;它可以用来检测一个元素是否在一个集合中。它的特点是高效地插入和查询&#xff0c;但是有一定的误判率&#xff08;False Positive&#xff09;。误判率指的是错误地认为某个元…...

基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发

作者&#xff1a;陆冬澄、周静 在现代软件研发体系中&#xff0c;.NET 平台由于其强大的功能、灵活性和丰富的开发工具&#xff0c;成为了构建 Windows 应用程序的热门选择。无论是桌面应用、Web 应用还是服务应用&#xff0c;.NET 提供了一系列强大的框架和工具&#xff0c;帮…...

Backend - C# asp .net core

目录 一、各大框架理解 &#xff08;一&#xff09;ASP.NET Core &#xff08;二&#xff09;ASP.NET Core Web Application &#xff08;三&#xff09;ASP.NET Core MVC &#xff08;四&#xff09;ASP.NET Core Web API &#xff08;五&#xff09;ASP.NET Core 和 EF …...

【合作原创】使用Termux搭建可以使用的生产力环境(九)

前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境&#xff08;八&#xff09;-CSDN博客中我们讲到了如何安装IDEA社区版&#xff0c;并在Termux中安装VNC服务器&#xff0c;在proot-distro的Debian中启动xfce桌面&#xff0c;并通过这个方式解决了IDEA社区版中无…...

使用Supervisor在Ubuntu中实现后台自启动服务

在Ubuntu系统中&#xff0c;Supervisor是一个非常实用的进程管理工具&#xff0c;它可以让你的应用程序在后台运行&#xff0c;并且在系统启动时自动启动这些应用程序。下面&#xff0c;我将详细介绍如何在Ubuntu中使用Supervisor来实现后台自启动服务&#xff0c;并以一个具体…...

AIDD-人工智能药物设计-人工智能驱动的罕见病药物发现

JCIM | 人工智能驱动的罕见病药物发现 **罕见病&#xff08;Rare Diseases&#xff0c;RDs&#xff09;**是全球公共卫生领域的重大挑战&#xff0c;其特点是疾病种类繁多、症状复杂且诊断困难。尽管过去几十年出台了如《孤儿药法案》等法规推动研发&#xff0c;但超过90%的罕…...

安卓硬件加速hwui

安卓硬件加速 本文基于安卓11。 从 Android 3.0 (API 级别 11) 开始&#xff0c;Android 2D 渲染管道支持硬件加速&#xff0c;这意味着在 View 的画布上执行的所有绘图操作都使用 GPU。由于启用硬件加速所需的资源增加&#xff0c;你的应用程序将消耗更多内存。 软件绘制&am…...

TDv2:一种用于离线数学表达式识别的新型树形结构解码器

TDv2:一种用于离线数学表达式识别的新型树形结构解码器 本文提出了一种针对手写数学表达式识别(HMER)任务的新型树形解码器(TDv2) ,旨在充分利用数学表达式的树结构标签进行更有效的建模和预测。相较于传统的LaTeX字符串解码器,该模型通过采用一个节点分类模块和一个分…...

Golang学习笔记_23——error补充

Golang学习笔记_20——error Golang学习笔记_21——Reader Golang学习笔记_22——Reader示例 文章目录 error补充1. 基本错误处理2. 自定义错误3. 错误类型判断3.1 类型断言3.2 类型选择 4. panic && recover 源码 error补充 1. 基本错误处理 在Go中&#xff0c;函数…...

邯郸地标美食导游平台的设计与实现

标题:邯郸地标美食导游平台的设计与实现 内容:1.摘要 摘要&#xff1a;本文介绍了邯郸地标美食导游平台的设计与实现。该平台旨在为游客提供邯郸地标美食的详细信息和导航服务&#xff0c;帮助游客更好地了解和品尝邯郸的特色美食。文章首先介绍了项目的背景和目的&#xff0c…...

滑动窗口限流算法:基于Redis有序集合的实现与优化

滑动窗口限流算法是一种基于时间窗口的流量控制策略&#xff0c;它将时间划分为固定大小的窗口&#xff0c;并在每个窗口内记录请求次数。通过动态滑动窗口&#xff0c;算法能够灵活调整限流速率&#xff0c;以应对流量的波动。 算法核心步骤 统计窗口内的请求数量&#xff1…...

Angular 最新版本和 Vue 对比完整指南

1. Angular 最新版本 当前 Angular 最新稳定版本是 Angular 17(2024年初) 2. 主要区别对比表 特性 | Angular | Vue 框架类型 | 完整框架 | 渐进式框架 默认语言 | TypeScript | JavaScript/TypeScript 数据处理 | RxJS | Promise/async/await 架构特点 | 依赖注入,…...

DAY39|动态规划Part07|LeetCode:198.打家劫舍、213.打家劫舍II、337.打家劫舍III

目录 LeetCode:198.打家劫舍 基本思路 C代码 LeetCode:213.打家劫舍II 基本思路 C代码 LeetCode:337.打家劫舍III 基本思路 C代码 LeetCode:198.打家劫舍 力扣题目链接 文字讲解&#xff1a;LeetCode:198.打家劫舍 视频讲解&#xff1a;动态规划&#xff0c;偷不偷这个…...

MYSQL----------------sql 优化

优化 SQL 语句的一般步骤 1. 了解 SQL 的执行频率 SHOW STATUS LIKE Com_%;代码解释&#xff1a; SHOW STATUS LIKE Com_%;&#xff1a;此命令可以查看各种 SQL 语句的执行频率&#xff0c;例如 Com_select 表示 SELECT 语句的执行次数&#xff0c;Com_insert 表示 INSERT 语…...

深度学习中的正则化方法

最近看到了正则化的内容&#xff0c;发现自己对正则化的理解已经忘得差不多了&#xff0c;这里在整理一下&#xff0c;方便以后查阅。 深度学习中的正则化方法 1. L2 正则化&#xff08;L2 Regularization&#xff09;2. L1 正则化&#xff08;L1 Regularization&#xff09;3.…...

电压负反馈放大电路

电压负反馈放大电路 共发射极(Common Emitter, CE) 在电子电路中, 信号的传输通常需要一个参考点, 通常是地线GND: 对于输入信号, 它需要一个&#xff1a;正端和一个负端才能形成回路, 让电流流动;对于输出信号, 也需要一个参考点来测量电压的变化. 在共发射极电路中, 发射极通…...

专业级反爬突破:实战解析开源Wenshu_Spider技术架构与完整解决方案

专业级反爬突破&#xff1a;实战解析开源Wenshu_Spider技术架构与完整解决方案 【免费下载链接】Wenshu_Spider :rainbow:Wenshu_Spider-Scrapy框架爬取中国裁判文书网案件数据(2019-1-9最新版) 项目地址: https://gitcode.com/gh_mirrors/wen/Wenshu_Spider 中国裁判文…...

AI安全高阶:生成式AI的安全风险与防御体系

AI安全高阶&#xff1a;生成式AI的安全风险与防御体系&#x1f4dd; 本章学习目标&#xff1a;本章深入探讨高阶主题&#xff0c;适合有一定基础的读者深化理解。通过本章学习&#xff0c;你将全面掌握"AI安全高阶&#xff1a;生成式AI的安全风险与防御体系"这一核心…...

3DMax烘焙贴图实战:从零到一整合建筑模型,优化Unity运行性能

1. 为什么需要烘焙贴图&#xff1a;从性能瓶颈到解决方案 第一次把复杂建筑模型导入Unity时&#xff0c;我盯着屏幕上龟速移动的视角和疯狂跳动的帧率数字&#xff0c;整个人都是懵的。检查资源管理器才发现&#xff0c;这个看似普通的五层楼模型竟然用了87张不同尺寸的贴图&am…...

解决Flutter RefreshIndicator在单一列表项下的显示问题

在开发Flutter应用时,RefreshIndicator是一个非常有用的控件,它可以为列表视图提供下拉刷新的功能。然而,当列表中只有一个项目时,RefreshIndicator可能会遇到一个常见的问题:它不会显示。这篇博客将详细探讨这个问题的解决方案,并提供一个具体的实例。 问题描述 假设我…...

一文搞懂计算机网络基础!

对于想入门网络安全、IT 运维、云计算的同学来说&#xff0c;计算机网络是绕不开的核心基础。但一堆晦涩的概念、复杂的分类&#xff0c;常常让新手望而却步。今天我们就用一张思维导图&#xff0c;把计算机网络基础的核心知识点全部拆解&#xff0c;从定义、作用、类型、核心设…...

9篇8章2节:MIMIC 数据库的 CITI 注册与课程选择(2026年版)

作为包含敏感患者信息的公共数据库,MIMIC 对使用权限的申请设置了严格的伦理与合规门槛,其核心目的在于保障患者隐私、维护学术诚信。其中,通过 CITI Program 的人体研究伦理认证是不可或缺的前置条件,也是衡量研究人员是否具备合规研究素养的关键标准。本文将详细拆解 202…...

广西大学电气专业课设资料包|短路计算课程设计全套(含源码+实验报告+理论PPT)

温馨提示&#xff1a;文末有联系方式广西大学电气专业课程设计资料合集 专注服务广大学生&#xff0c;精心整理广西大学电气工程及其自动化专业核心课设&#xff0c;覆盖课程设计全流程需求。短路电流计算课程设计全套电子资料 包含完整可编译运行的软件程序&#xff08;支持主…...

PHP脚本设置无限执行时间的四种方法

为 PHP 脚本设置无限执行时间是一个在特定场景下可能需要的操作&#xff0c;比如执行长时间运行的后台任务、数据迁移、大批量数据处理等。然而&#xff0c;值得注意的是&#xff0c;设置无限执行时间并不是一种推荐的做法&#xff0c;因为它可能导致服务器资源被长时间占用&am…...

PINCache与App Extension:在扩展中安全使用缓存的完整方案

PINCache与App Extension&#xff1a;在扩展中安全使用缓存的完整方案 【免费下载链接】PINCache Fast, non-deadlocking parallel object cache for iOS, tvOS and OS X 项目地址: https://gitcode.com/gh_mirrors/pi/PINCache PINCache作为一款为iOS、tvOS和OS X打造的…...