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

初识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服务器&#xff1a;tomcat下载安装及配置教程_tomcat安装-CSDN博客 1、概念 我的第一个JSP程序&#xff1a; 在WEB-INF目录之外创建一个index.jsp文件&#xff0c;然后这个文件中没有任何内容。将上面的项目部署之后&#xff0c;启动服务器…...

Ansible 的脚本 --- playbooks剧本

playbooks 本身由以下各部分组成 &#xff08;1&#xff09;Tasks&#xff1a;任务&#xff0c;即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 &#xff08;2&#xff09;Vars&#xff1a;变量 &#xff08;3&#xff09;Templates&#xff1a;模板 &a…...

Windows 死机时 系统错误日志分析与故障排除

目录 前言正文 前言 对于服务器异常重启&#xff0c;推荐阅读&#xff1a;详细分析服务器自动重启原因&#xff08;涉及Linux、Window&#xff09; 以下主要做一个总结梳理 正文 查看系统事件日志&#xff1a; 可以查看系统事件日志&#xff0c;找出可能导致系统崩溃的错误…...

基于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#中&#xff0c;与Windows服务进行交互和控制通常涉及以下几个步骤&#xff1a; 创建Windows服务&#xff1a;首先&#xff0c;需要创建一个Windows服务项目。可以使用Visual Studio中的“Windows 服务 (.NET Framework)”项目模板来创建Windows服务。 配置服务控制事件&am…...

Java和Ts构造函数的区别

java中子类在使用有参构造创建对象的时候不必要必须调用父类有参构造 而js则必须用super()调用父类的有参构造,即使用不到也必须传递 Java 中的处理方式 可选择性参数: 在 Java 中&#xff0c;当子类使用父类的有参构造方法创建对象时&#xff0c;可以只传递需要的参数。如果父…...

植物健康,Spring Boot来助力

3系统分析 3.1可行性分析 通过对本植物健康系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本植物健康系统采用SSM框架&#xff0c;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 作为一种广泛应用的编程语言&#xff0c;不断演进以满足开发者日益增长的需求和适应技术的发展趋势。Java 11 带来了一系列重要的新特性和改进&#xff0c;这些变化不仅提升了语言的性能和功能&#xff0c;还为开发者提供了更好的开发体验和工具。本文将深入探讨 Java 11 …...

druid 连接池监控报错 Sorry, you are not permitted to view this page.本地可以,发布正式出错

简介&#xff1a; druid 连接池监控报错 Sorry, you are not permitted to view this page. 使用Druid连接池的时候&#xff0c;遇到一个奇怪的问题&#xff0c;在本地&#xff08;localhost&#xff09;可以直接打开Druid连接池监控&#xff0c;在其他机器上打开会报错&#…...

[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.先找到以下位置&#xff1a; 2. 虚拟机中执行vi /etc/sysconfig/network-scripts/ifcfg-ens33 根据上图信息修改配置文件内容&#xff1a; 静态IP地址设置不超过255就行&#xff0c;我这里弄得100&#xff0c;没毛病。 3.修改并保存文件后&#xff0c;重启网络执行&#…...

Android token JJWT

在Android开发领域&#xff0c;JJWT&#xff08;Java JWT&#xff0c;即Java Json Web Token&#xff09;库是一个流行的工具&#xff0c;用于处理JSON Web Tokens&#xff08;JWTs&#xff09;。JWT是一种轻量级的、自包含的、基于JSON的用于双方之间安全传输信息的简洁的、UR…...

动态规划<一>初识动态规划

目录 认识动态规划 LeetCodeOJ练习 斐波那契数列模型 认识动态规划 1.动态规划是一种用于解决优化问题的算法策略。 2.它的核心原理是把一个复杂的问题分解为一系列相互关联的子问题。通过先求解子问题&#xff0c;并且记录这些子问题的解&#xff08;通常用一个表格之类的…...

【AIGC】ChatGPT提示词Prompt精确控制指南:Scott Guthrie的建议详解与普通用户实践解析

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;斯科特古斯里&#xff08;Scott Guthrie&#xff09;的建议解读人机交互设计的重要性减轻用户认知负担提高Prompt的易用性结论 &#x1f4af;普通用户视角的分析普通用户…...

2024年10月24日随笔

1024程序员节啊&#xff0c;现在已经是晚上的十点半了&#xff0c;我还在实验室里没走&#xff0c;刚把力扣的每日一题写完&#xff0c;好忙啊&#xff0c;好忙啊&#xff0c;好忙啊&#xff0c;为什么都大三了我还不能做自己的事情&#xff0c;今天老师开会说要给互联网加大赛…...

怎么做系统性能优化

对于软件或系统的性能优化&#xff0c;可以采取多种措施来提高效率和响应速度。这里为您列举一些常见的方法&#xff1a; 1. 代码优化&#xff1a;检查并优化算法复杂度&#xff0c;减少不必要的计算。使用更高效的数据结构和算法。 2. 数据库优化&#xff1a; •索引优化&…...

负载均衡:四层与七层

负载均衡建立在现在网络基础之上&#xff0c;提供一种廉价透明有效的方式扩展网络设备和服务器带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡可分为七层负载与四层负载。 四层负载&#xff08;目标地址与端口交换&#xff09; 主要通过报文中…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

理想汽车5月交付40856辆,同比增长16.7%

6月1日&#xff0c;理想汽车官方宣布&#xff0c;5月交付新车40856辆&#xff0c;同比增长16.7%。截至2025年5月31日&#xff0c;理想汽车历史累计交付量为1301531辆。 官方表示&#xff0c;理想L系列智能焕新版在5月正式发布&#xff0c;全系产品力有显著的提升&#xff0c;每…...