初识jsp
学习本章节前建议先安装Tomcat web服务器:tomcat下载安装及配置教程_tomcat安装-CSDN博客
1、概念
我的第一个JSP程序:
- 在WEB-INF目录之外创建一个index.jsp文件,然后这个文件中没有任何内容。
- 将上面的项目部署之后,启动服务器,打开浏览器,访问以下地址:
- http://localhost:8080/jsp/index.jsp 展现在大家面前的是一个空白。
过程:
- 实际上访问以上的这个:index.jsp,底层执行的是:index_jsp.class 这个java程序。
- 这个index.jsp会被tomcat翻译生成index_jsp.java文件,然后tomcat服务器又会将index_jsp.java编译生成index_jsp.class文件
- 访问index.jsp,实际上执行的是index_jsp.class中的方法。
JSP生命周期
JSP实际上就是一个Servlet。
- index.jsp访问的时候,会自动翻译生成index_jsp.java,会自动编译生成index_jsp.class,那么index_jsp 这就是一个类。
- index_jsp 类继承 HttpJspBase,而HttpJspBase类继承的是HttpServlet。所以index_jsp类就是一个Servlet类。
- jsp的生命周期和Servlet的生命周期完全相同。完全就是一个东西。没有任何区别。
- jsp和servlet一样,都是单例的。(假单例)
思考:
jsp文件第一次访问的时候是比较慢的,为什么?
为什么大部分的运维人员在给客户演示项目的时候,为什么提前先把所有的jsp文件先访问一遍。
第一次比较麻烦:
- 要把jsp文件翻译生成java源文件
- 最后调用servlet对象的service方法。
- 然后调用servlet对象的init方法
- 然后通过class去创建servlet对象
- java源文件要编译生成class字节码文件
第二次就比较快了,为什么?
因为第二次直接调用单例servlet对象的service方法即可。
定义:
JSP是什么?
- JSP是java程序。(JSP本质还是一个Servlet)
- JSP是:JavaServer Pages的缩写。(基于Java语言实现的服务器端的页面。)
- Servlet是JavaEE的13个子规范之一,那么JSP也是JavaEE的13个子规范之一。
- JSP是一套规范。所有的web容器/web服务器都是遵循这套规范的,都是按照这套规范进行的“翻译”
- 每一个web容器/web服务器都会内置一个JSP翻译引擎。
对JSP进行错误调试的时候,还是要直接打开JSP文件对应的java文件,检查java代码。
2、JSP的语法
1.在jsp文件中直接编写文字
会被翻译到servlet类的service方法的out.write("翻译到这里"),直接翻译到双引号里,被java程序当做普通字符串打印输出到浏览器。
(在JSP中编写的HTML CSS JS代码,这些代码对于JSP来说只是一个普通的字符串。但是JSP把这个普通的字符串一旦输出到浏览器,浏览器就会对HTML CSS JS进行解释执行。展现一个效果.)
2.在JSP中编写java程序
<% java语句; %>
//向浏览器上输出一个java变量。<% String name = “jack”;
out.write("name = " + name); %>
- 在这个符号当中编写的被视为java程序,被翻译到Servlet类的service方法内部。
- 在service方法当中编写的代码是有顺序的,方法体当中的代码要遵循自上而下的顺序依次逐行执行。
- service方法当中不能写静态代码块,不能写方法,不能定义成员变量。。。。。。
- 在同一个JSP当中 <%%> 这个符号可以出现多个。
- 注意:以上代码中的out是JSP的九大内置对象之一。可以直接拿来用。当然,必须只能在service方法内部使用。
如果输出的内容中含有“java代码”,这个时候可以使用以下语法格式:
<%= %>
<%= %> 这个符号会被翻译到哪里?最终翻译成什么?
翻译成了这个java代码: out.print();
翻译到service方法当中了。
3.在JSP中如何编写JSP的专业注释
<%--JSP的专业注释,不会被翻译到java源代码当中。--%>
<!--这种注释属于HTML的注释,这个注释信息仍然会被翻译到java源代码当中,不建议。-->
JSP基础语法总结:
- JSP中直接编写普通字符串
翻译到service方法的out.write("这里")
- <%%>
翻译到service方法体内部,里面是一条一条的java语句。
- <%! %>
翻译到service方法之外。
- <%= %>
翻译到service方法体内部,翻译为:out.print();
- <%@page contentType="text/html;charset=UTF-8"%>
page指令,通过contentType属性用来设置响应的内容类型。
下面主要讲解一下<%! %> 和 <%%>这两种标签的各自的意义:
<%! %> (Declaration Tag) —— 声明标签:
<%! %> 标签用于在 JSP 页面中声明类级别的变量和方法。这些变量和方法会被 JSP 转换为 Servlet 类中的成员变量或方法,具有全局作用域,生命周期与 Servlet 实例相同。 <%! %> 中的代码不会嵌入到 service() 方法中,而是位于类体中,可以被多个请求共享。例如,你可以使用它声明实例变量或定义方法。 也就是说他的级别和 service()方法一样 它所声明的变量属于全局变量
<% %> (Scriptlet Tag) —— 脚本标签
<% %> 标签用于在 JSP 页面中编写局部的 Java 代码,这些代码会被嵌入到 JSP 转换后的 Servlet 的 service() 方法中。因此,<% %> 中的变量是局部变量,它们的生命周期仅限于单次请求的处理过程。 它所声明的变量属于局部变量
3、JSP指令
JSP的指令
指令的作用:指导JSP的翻译引擎如何工作(指导当前的JSP翻译引擎如何翻译JSP文件。)
指令包括哪些呢?
- include指令:包含指令,在JSP中完成静态包含,很少用了。(这里不讲)
- taglib指令:引入标签库的指令。这个到JJSTL标签库的时候再学习。现在先不管。
- page指令:目前重点学习一个page指令。
指令的使用语法是什么?
<%@指令名 属性名=属性值 属性名=属性值 属性名=属性值....%>
关于page指令当中都有哪些常用的属性呢?
<%@page session="true|false" %>
true表示启用JSP的内置对象session,表示一定启动session对象。没有session对象会创建。
如果没有设置,默认值就是session="true"
session="false" 表示不启用内置对象session。当前JSP页面中无法使用内置对象session。
<%@page contentType="text/json" %>
contentType属性用来设置响应的内容类型
但同时也可以设置字符集。
<%@page contentType="text/json;charset=UTF-8" %>
<%@page import="java.util.List, java.util.Date, java.util.ArrayList" %>
<%@page import="java.util.*" %>
import语句,导包。
<%@page errorPage="/error.jsp" %>
当前页面出现异常之后,跳转到error.jsp页面。
errorPage属性用来指定出错之后的跳转位置。
<%@page isErrorPage="true" %>
表示启用JSP九大内置对象之一:exception
默认值是false。
4、JSP的九大内置对象
- jakarta.servlet.jsp.PageContext pageContext 页面作
- jakarta.servlet.http.HttpServletRequest request 请求作用
- jakarta.servlet.http.HttpSession session 会话作用
- jakarta.servlet.ServletContext application 应用作用域
- pageContext < request < session < application
以上四个作用域都有:setAttribute、getAttribute、removeAttribute方法。
以上作用域的使用原则:尽可能使用小的域。
- java.lang.Throwable exception
- jakarta.servlet.ServletConfig config
- java.lang.Object page (其实是this,当前的servlet对象)
- jakarta.servlet.jsp.JspWriter out (负责输出)
- jakarta.servlet.http.HttpServletResponse response (负责响应)
5、关于系统架构
5.1 C/S结构
优点:
1.速度快(大量的数据都是集成在客户端软件当中,所以服务器只需要传送很少的数据量)
2.服务器压力小(大量的数据都是集成在客户端软件当中,所以服务器只需要传送很少的数据量)
3.安全(大量的数据都是集成在客户端软件当中,数据在多个客户端上有缓存)
缺点:
升级维护比较差劲(每一个客户端都需要升级)
5.2 B/S架构
优点:
升级维护方便,成本比较低。(只需要升级服务器端即可。)
不需要安装特定的客户端软件,只需要打开浏览器,输入网址即可。
缺点:
速度慢(因为所有的数据都是在服务器上,用户发送的每一个请求都是需要服务器全身心的响应数据)
不安全
相关文章:
初识jsp
学习本章节前建议先安装Tomcat web服务器:tomcat下载安装及配置教程_tomcat安装-CSDN博客 1、概念 我的第一个JSP程序: 在WEB-INF目录之外创建一个index.jsp文件,然后这个文件中没有任何内容。将上面的项目部署之后,启动服务器…...
Ansible 的脚本 --- playbooks剧本
playbooks 本身由以下各部分组成 (1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 (2)Vars:变量 (3)Templates:模板 &a…...
Windows 死机时 系统错误日志分析与故障排除
目录 前言正文 前言 对于服务器异常重启,推荐阅读:详细分析服务器自动重启原因(涉及Linux、Window) 以下主要做一个总结梳理 正文 查看系统事件日志: 可以查看系统事件日志,找出可能导致系统崩溃的错误…...
基于pytorch搭建CNN
先上代码 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torchvision import datasets, transforms import matplotlib.pyplot as plt import numpy as np import pandas as pd import matplotlibmatplotlib.use(tkA…...
C#实现与Windows服务的交互与控制
在C#中,与Windows服务进行交互和控制通常涉及以下几个步骤: 创建Windows服务:首先,需要创建一个Windows服务项目。可以使用Visual Studio中的“Windows 服务 (.NET Framework)”项目模板来创建Windows服务。 配置服务控制事件&am…...
Java和Ts构造函数的区别
java中子类在使用有参构造创建对象的时候不必要必须调用父类有参构造 而js则必须用super()调用父类的有参构造,即使用不到也必须传递 Java 中的处理方式 可选择性参数: 在 Java 中,当子类使用父类的有参构造方法创建对象时,可以只传递需要的参数。如果父…...
植物健康,Spring Boot来助力
3系统分析 3.1可行性分析 通过对本植物健康系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本植物健康系统采用SSM框架,JAVA作为开发语言&#…...
百度文心一言接入流程-java版
百度文心一言接入流程-java版 一、准备工作二、API接口调用-java三、百度Prompt工程参考资料: 百度文心一言:https://yiyan.baidu.com/百度千帆大模型:https://qianfan.cloud.baidu.com/百度千帆大模型文档:https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html千tokens…...
Java 11 新特性深度解析与应用实践
Java 作为一种广泛应用的编程语言,不断演进以满足开发者日益增长的需求和适应技术的发展趋势。Java 11 带来了一系列重要的新特性和改进,这些变化不仅提升了语言的性能和功能,还为开发者提供了更好的开发体验和工具。本文将深入探讨 Java 11 …...
druid 连接池监控报错 Sorry, you are not permitted to view this page.本地可以,发布正式出错
简介: druid 连接池监控报错 Sorry, you are not permitted to view this page. 使用Druid连接池的时候,遇到一个奇怪的问题,在本地(localhost)可以直接打开Druid连接池监控,在其他机器上打开会报错&#…...
[RN与H5] 加载线上H5通信失败问题记录(启动本地H5服务OK)
RT: nextjs项目 在本地启动H5服务, 本地开发都OK 发布到线上后, 效果全无, 经排查发现, 写了基本配置的js脚本在挂载时机上的差异导致 根本原因是...
electron 打包
安装及配置 安装electron包以及electron-builder打包工具 # 安装 electron cnpm install --save-dev electron # 安装打包工具 cnpm install electron-builder -D 参考的package.json文件 其中description和author为必填项目 {"name": "appfile",&qu…...
ChatGLM-6B和Prompt搭建专业领域知识问答机器人应用方案(含完整代码)
目录 ChatGLM-6B部署 领域知识数据准备 领域知识数据读取 知识相关性匹配 Prompt提示工程 领域知识问答 完整代码 本文基于ChatGLM-6B大模型和Pompt提示工程搭建医疗领域知识问答机器人为例。 ChatGLM-6B部署 首先需要部署好ChatGLM-6B,参考 ChatGLM-6B中英双…...
虚拟机配置静态IP地址(人狠话不多简单粗暴)
1.先找到以下位置: 2. 虚拟机中执行vi /etc/sysconfig/network-scripts/ifcfg-ens33 根据上图信息修改配置文件内容: 静态IP地址设置不超过255就行,我这里弄得100,没毛病。 3.修改并保存文件后,重启网络执行&#…...
Android token JJWT
在Android开发领域,JJWT(Java JWT,即Java Json Web Token)库是一个流行的工具,用于处理JSON Web Tokens(JWTs)。JWT是一种轻量级的、自包含的、基于JSON的用于双方之间安全传输信息的简洁的、UR…...
动态规划<一>初识动态规划
目录 认识动态规划 LeetCodeOJ练习 斐波那契数列模型 认识动态规划 1.动态规划是一种用于解决优化问题的算法策略。 2.它的核心原理是把一个复杂的问题分解为一系列相互关联的子问题。通过先求解子问题,并且记录这些子问题的解(通常用一个表格之类的…...
【AIGC】ChatGPT提示词Prompt精确控制指南:Scott Guthrie的建议详解与普通用户实践解析
博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯斯科特古斯里(Scott Guthrie)的建议解读人机交互设计的重要性减轻用户认知负担提高Prompt的易用性结论 💯普通用户视角的分析普通用户…...
2024年10月24日随笔
1024程序员节啊,现在已经是晚上的十点半了,我还在实验室里没走,刚把力扣的每日一题写完,好忙啊,好忙啊,好忙啊,为什么都大三了我还不能做自己的事情,今天老师开会说要给互联网加大赛…...
怎么做系统性能优化
对于软件或系统的性能优化,可以采取多种措施来提高效率和响应速度。这里为您列举一些常见的方法: 1. 代码优化:检查并优化算法复杂度,减少不必要的计算。使用更高效的数据结构和算法。 2. 数据库优化: •索引优化&…...
负载均衡:四层与七层
负载均衡建立在现在网络基础之上,提供一种廉价透明有效的方式扩展网络设备和服务器带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡可分为七层负载与四层负载。 四层负载(目标地址与端口交换) 主要通过报文中…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
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…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
C++ Saucer 编写Windows桌面应用
文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架,开发Windows桌面应用,把一个html页面作为GUI设计放到Saucer里,隐藏掉运行时弹…...
【见合八方平面波导外腔激光器专题系列】用于干涉光纤传感的低噪声平面波导外腔激光器2
----翻译自Mazin Alalus等人的文章 摘要 1550 nm DWDM 平面波导外腔激光器具有低相位/频率噪声、窄线宽和低 RIN 等特点。该腔体包括一个半导体增益芯片和一个带布拉格光栅的平面光波电路波导,采用 14 引脚蝶形封装。这种平面波导外腔激光器设计用于在振动和恶劣的…...
SeaweedFS S3 Spring Boot Starter
SeaweedFS S3 Spring Boot Starter 源码特性环境要求快速开始1. 添加依赖2. 配置文件3. 使用方式方式一:注入服务类方式二:使用工具类 API 文档SeaweedFsS3Service 主要方法SeaweedFsS3Util 工具类方法 配置参数运行测试构建项目注意事项集成应用更多项目…...
【计算机网络】数据链路层-滑动窗口协议
数据链路层滑动窗口协议 1. 三种协议对比表 特性停止-等待协议GBN协议SR协议窗口大小发送 1,接收 1发送 W (1<W≤2ⁿ-1),接收 1发送 C,接收 R确认方式单个确认累积确认选择性确认重传策略超时重传回退N帧重传选择性重传接收缓冲区…...
