动态网页的核心——JSP

news2024/9/24 3:28:46

文章目录

  • 1,JSP 概述
  • 2,JSP 小案例
    • 2.1 搭建环境
      • 2.2 导入 JSP 依赖
      • 2.3 创建 jsp 页面
      • 2.4 编写代码
      • 2.5 测试
  • 3,JSP 原理
  • 4,JSP 总结
    • 4.1 JSP的 缺点
    • 4.2技术的发展历程
    • 4.3JSP的必要性
    • 最后说一句

1,JSP 概述

JSP(全称:Java Server Pages):Java 服务端页面。是一种动态的网页技术,其中既可以定义 HTML、JS、CSS等静态内容,还可以定义 Java代码的动态内容,也就是 JSP = HTML + Java

那么,JSP 能做什么呢?
在这里插入图片描述

如下图所示,当我们登陆成功后,需要在页面上展示用户名

在这里插入图片描述

上图的用户名是动态展示,也就是谁登陆就展示谁的用户名。而 JSP 是如何解决这个问题的呢?提供了一个 login.jsp 页面,该页面也能实现该功能,现将该页面拷贝到项目的 webapp下,需要修改 login.html 中表单数据提交的路径为下图

在这里插入图片描述

重新启动服务器并进行测试,发现也可以实现同样的功能。那么 login.jsp 又是如何实现的呢?那我们来看看 login.jsp 的代码

在这里插入图片描述

上面代码可以看到里面基本都是 HTML 标签,而动态数据使用 Java 代码进行展示;

JSP 作用:简化开发

2,JSP 小案例

2.1 搭建环境

创建一个maven的 web 项目,项目结构如下:

在这里插入图片描述

2.2 导入 JSP 依赖

dependencies 标签中导入 JSP 的依赖,如下

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>

该依赖的 scope 必须设置为 provided,因为 tomcat 中有这个jar包了,所以在打包时我们是不希望将该依赖打进到我们工程的war包中。

2.3 创建 jsp 页面

在项目的 webapp 下创建jsp页面

在这里插入图片描述

通过上面方式创建一个名为 hello.jsp 的页面。

2.4 编写代码

hello.jsp 页面中书写 HTML 标签和 Java 代码,如下

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>hello jsp</h1>

    <%
        System.out.println("hello,jsp~");
    %>
</body>
</html>

2.5 测试

启动服务器并在浏览器地址栏输入 http://localhost:8080/jsp-demo/hello.jsp,我们可以在页面上看到如下内容

在这里插入图片描述

在这里插入图片描述

同时也可以看到在 idea 的控制台看到输出的 hello,jsp~ 内容。

3,JSP 原理

我们之前说 JSP 就是一个页面,那么在 JSP 中写 html 标签,我们能理解,但是为什么还可以写 Java 代码呢?

因为 JSP 本质上就是一个 Servlet接下来我们聊聊访问jsp时的流程

在这里插入图片描述

  1. 浏览器第一次访问 hello.jsp 页面
  2. tomcat 会将 hello.jsp 转换为名为 hello_jsp.java 的一个 Servlet
  3. tomcat 再将转换的 servlet 编译成字节码文件 hello_jsp.class
  4. tomcat 会执行该字节码文件,向外提供服务

4,JSP 总结

4.1 JSP的 缺点

由于 JSP页面内,既可以定义 HTML 标签,又可以定义 Java代码,造成了以下问题:

  • 书写麻烦:特别是复杂的页面

    既要写 HTML 标签,还要写 Java 代码

  • 阅读麻烦

    上面案例的代码,相信你后期再看这段代码时还需要花费很长的时间去梳理

  • 复杂度高:运行需要依赖于各种环境,JRE,JSP容器,JavaEE…

  • 占内存和磁盘:JSP会自动生成.java和.class文件占磁盘,运行的是.class文件占内存

  • 调试困难:出错后,需要找到自动生成的.java文件进行调试

  • 不利于团队协作:前端人员不会 Java,后端人员不精 HTML

    如果页面布局发生变化,前端工程师对静态页面进行修改,然后再交给后端工程师,由后端工程师再将该页面改为 JSP 页面

由于上述的问题, JSP 已逐渐退出历史舞台以后开发更多的是使用 HTML + Ajax 来替代。Ajax 是我们后续会重点学习的技术。有个这个技术后,前端工程师负责前端页面开发,而后端工程师只负责前端代码开发。

4.2技术的发展历程

在这里插入图片描述

  1. 第一阶段:使用 servlet 即实现逻辑代码编写,也对页面进行拼接。这种模式我们之前也接触过

  2. 第二阶段:随着技术的发展,出现了 JSP ,人们发现 JSP 使=

  3. 第三阶段:使用 Servlet 进行逻辑代码开发,而使用 JSP 进行数据展示

    在这里插入图片描述

  4. 第四阶段:使用 servlet 进行后端逻辑代码开发,而使用 HTML 进行数据展示。而这里面就存在问题,HTML 是静态页面,怎么进行动态数据展示呢?这就是 ajax 的作用了。

4.3JSP的必要性

那既然 JSP 已经逐渐的退出历史舞台,那我们为什么还要学习 JSP 呢?原因有两点:

  • 一些公司可能有些老项目还在用 JSP ,所以要求我们必须动 JSP
  • 我们如果不经历这些复杂的过程,就不能体现后面阶段开发的简单
    在这里插入图片描述

最后说一句

感谢大家的阅读,文章通过网络资源与自己的学习过程整理出来,希望能帮助到大家。

才疏学浅,难免会有纰漏,如果你发现了错误的地方,可以提出来,我会对其加以修改。

在这里插入图片描述

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

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

相关文章

IB数学/生物/化学/物理所需的教材有哪些

高中阶段的学习是迈向大学的重要步骤&#xff0c;涉及到的课程分为许多结构&#xff0c;其中最为常见的则是通过IB, AP和A-Level的学习&#xff0c;实现迈入国外大学的目的。 IB课程即国际文凭组织IBO&#xff08;International Baccalaureate Organization&#xff09;&#x…

「TCG 规范解读」规范结构

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…

「TCG 规范解读」TCG 主规范-命令

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alliance,TCPA)所开发的规范。现在的规范都不是最终稿,都…

为什么需要学习shell、shell的作用

课程基于B站于超课程笔记 03 Shebang的正确玩法_哔哩哔哩_bilibili P1 shell的作用 P2 shell执行命令的流程 P3 Shebang的正确玩法 什么是shell及组成 shell概念 shelll组成 Shebang概念 /bin/sh /bin/bash一样&#xff0c;都是指向一个bash解释器 [rootlocalhost ~]#…

JVM篇之类加载与字节码技术

一.类文件结构 首先获得.class字节码文件 方法&#xff1a; 在文本文档里写入java代码&#xff08;文件名与类名一致&#xff09;&#xff0c;将文件类型改为.javajava终端中&#xff0c;执行javac X:…\XXX.java // HelloWorld 示例 public class HelloWorld {public stat…

IB课程体系及计分方式

IB课程体系及计分方式 在全球将近150个国家&#xff0c;超过4000个学校&#xff0c;有100万的IB学生。学生在IB体系中修读相同的教材&#xff0c;学生毕业时参加全球统一考试&#xff0c;试卷的命题及批阅均由IB总部直接统筹规划&#xff0c;全世界的IB学生学术水平因此得以统一…

面试了一个32岁的程序员,一个细节就看出来是培训班的····

首先&#xff0c;我说一句&#xff1a;培训出来的&#xff0c;优秀学员大有人在&#xff0c;我不希望因为带着培训的标签而无法达到用人单位和候选人的双向匹配&#xff0c;是非常遗憾的事情。 最近&#xff0c;在网上看到这样一个留言&#xff0c;引发了程序员这个圈子不少的…

利用逻辑分析仪解析串口通讯数据

利用逻辑分析仪解析串口通讯数据&#x1f527;采用的是市面上最为广泛使用的USB逻辑分析仪: &#x1f4da;资料下载&#xff1a; 链接: https://pan.baidu.com/s/1c9lwWDbtJxaJED-kzSbiJg 提取码: 5vnr&#x1f528;测试工具为&#xff1a;Logic 2.4.6&#xff0c;也可以使用Pu…

华为OD机试题,用 Java 解【开放日活动】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

华为OD机试题,用 Java 解【求字符串中所有整数的最小和】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

【Linux】Linux根文件系统扩容

场景&#xff1a;根文件系统需要至少100GB的剩余空间&#xff0c;但是目前就剩余91GB。因此&#xff0c;我们需要对根文件系统进行扩容。# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 3.9G 0 3.9G 0% /dev tmpfs …

文献阅读 Improving Seismic Data Resolution with Deep Generative Networks

题目 Improving Seismic Data Resolution with Deep Generative Networks 使用深度生成网络提高地震数据分辨率 摘要 叠前数据的使用&#xff0c;通常可以来解决噪声迹线、覆盖间隙或不规则/不适当的迹线间距等问题。但叠前数据并不总是可用的。作为替代方案&#xff0c;叠后…

分布式锁实现原理与最佳实践

作者&#xff1a;秦泽涛 阿里云教育基座团队 在单体的应用开发场景中涉及并发同步时&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或同一个JVM内Lock机制来解决多线程间的同步问题。而在分布式集群工作的开发场景中&#xff0c;就需要一种更加高级的锁机制…

AI绘画第一步,安装Stable-Diffusion-WebUI全过程 !

别玩那些小孩子的玩意儿了&#xff0c;大人应该玩这些^_^&#xff01;我是真没想到&#xff0c;AI绘画已经进化到这种程度了。实在是太&#xff01;逼&#xff01;真! 了&#xff01;不上重马赛克都不敢贴图&#xff01;看了这些图&#xff0c;有没有心痒痒的&#xff1f;今天就…

逆向-还原代码之除法 (Interl 64)

除法和32位差不多&#xff0c;毕竟背后的数学公式是一样的。区别只是32位的乘法需要两个寄存器来存放大数相乘的结果&#xff0c;而64位的不需要&#xff0c;一个寄存器就能存下。所以在64位的环境下&#xff0c;多了右移32位这条指令&#xff0c;其他指令一样。 //code #incl…

升级Android Studio Electric Eel问题汇总

1.升级以后找不到java可执行程序 问题原因&#xff1a;升级后&#xff0c;Android Studio自带的java目录不再是根目录/jre&#xff0c;调整为一个新目录 Studio根目录/jbr 修改方法&#xff1a;1&#xff09;修改系统环境变量&#xff0c; JAVA_HOME调整为Studio下对应的java…

烟厂能耗控制管理系统_烟厂能源管理信息系统

烟厂也是能耗大厂&#xff0c;为了更好的让烟厂完成资源调配、成本核算、能耗统计等&#xff0c;需要建立一套有效的能源数据管理系统&#xff0c;对能源进行监测&#xff0c;自动获取能源信息&#xff0c;方便查看厂区能源实时情况。烟厂能耗控制管理系统是利用信息化技术手段…

java多线程(七)线程等待与唤醒

一、wait()、notify()、notifyAll()等方法介绍 在Object.java中&#xff0c;定义了wait(), notify()和notifyAll()等接口。wait()的作用是让当前线程进入等待状态&#xff0c;同时&#xff0c;wait()也会让当前线程释放它所持有的锁。而notify()和notifyAll()的作用&#xff0…

阶段十:总结专题(第六章:缓存篇)

阶段十&#xff1a;总结专题&#xff08;第六章&#xff1a;缓存篇&#xff09;Day-第六章&#xff1a;缓存篇1. Redis 数据类型**String****List****Hash****Sorted Set**2. keys 命令问题3. 过期 key 的删除策略4. Redis 持久化**AOF 持久化****AOF 重写****RDB 持久化****混…

值得关注!可控生成!近期diffusion图像生成进展!

猜您喜欢&#xff1a;深入浅出stable diffusion&#xff1a;AI作画技术背后的潜在扩散模型论文解读戳我&#xff0c;查看GAN的系列专辑~&#xff01;一顿午饭外卖&#xff0c;成为CV视觉的前沿弄潮儿&#xff01;最新最全100篇汇总&#xff01;生成扩散模型Diffusion ModelsECC…