【图文详解】Java Server Pages(JSP)底层原理+源码分析+当今如何看待JSP

前言:虽然就目前来看,JSP已是一种过时的技术,但是其设计思想有必要了解一下,毕竟曾经也有过辉煌阶段,那它也必然包含着精妙的设计思想,因此目前仍不妨碍我们秉持取其精华,去其糟粕的态度去学习其中的设计思想。(注:本文”服务器内部工作“这部分内容,学习自B站UP主:遇见狂神说,深有收获,于是写下本文,作为记录)

一、简介

Java Server Pages:Java服务器端页面,与Servlet一样,用于动态Web技术方向,JSP可用于生成页面中的动态数据,实现动态页面。

二、JSP分析+原理

1.语法

可简单理解为HTML中嵌入Java代码与许多JSP标签库

2.服务器内部工作

(1)tomcat就是这样被配置进IDEA中的

Tomcat中有一个work目录
在这里插入图片描述
逐步进入work的子目录(接下来会发现,本地应用数据文件夹中的IDEA中配置了Tomcat服务器的项目,也会生成一个个这样的jsp文件夹,见下文)
在这里插入图片描述

之后去另一个目录(也就是IDEA的应用数据目录)下分析,IDEA中使用Tomcat的项目会在本地应用数据文件夹中生成一个包含在IDEA目录下的tomcat的数据文件
在这里插入图片描述
进入tomcat文件夹,这些都是临时的文件夹,每次重启配置了tomcat服务器的项目时,都会重新构建各自对应的文件夹,文件夹中的具体内容见下下图
在这里插入图片描述

在这里插入图片描述
tomcat就是这样被配置进IDEA中的
在这里插入图片描述

(2)JSP生成的Java文件

打开上图这个java文件,里面确实有jsp的应用
在这里插入图片描述

因此,浏览器向JavaWeb服务器端发送请求时,不管访问什么资源,其实都是在访问Servlet。(JSP最终也会转换为一个Java类)

接下来,再次分析tomcat的work目录下的子孙目录jsp中的java文件,index_jsp类继承自HttpJspBase

在这里插入图片描述
而HttpJspBase又继承自HttpServlet
在这里插入图片描述
因此,本质上,JSP就是一个Servlet,(后文会做进一步的推证)


(3)xxx_jsp.java文件

index_jsp类中动态生成的HTML正好和我们webapp项目中index.jsp页面相同(我目前想不通这两个地方有什么联系,或者本来就仅仅相同而已)
在这里插入图片描述
index_jsp类中的三个方法:

初始化-------------------------------
public void _jspInit() {
  }
销毁-------------------------------
public void _jspDestroy() {
}
JSPService-------------------------------
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
    throws java.io.IOException, javax.servlet.ServletException {

重点分析_jspService()方法

参数,请求和响应
在这里插入图片描述

方法体中,首先判断请求类型
在这里插入图片描述
内置对象
在这里插入图片描述
初始操作
在这里插入图片描述


(4)JSP原理剖析

编写hello.jsp做测试,

启动tomcat服务器,
在这里插入图片描述
未访问hello.jsp前,IDEA中的tomcat文件夹中,目前只有一个java文件

在这里插入图片描述
访问hello.jsp后
在这里插入图片描述
生成了hello.jsp对应的java文件
在这里插入图片描述
打开查看,与index_jsp.java文件内容结构相同
在这里插入图片描述
因此,本质上,JSP就是一个Servlet

或者说是,一个如下图结构的java文件

在这里插入图片描述

JSP原理图:
在这里插入图片描述
在JSP页面中,只要是Java代码,就会正常输出到xxx_jsp.java中,如果是HTML代码,就会先转换为out.write("<html>\r\n")这类格式

虽然Servlet和JSP都可以写Java代码,而且JSP本质是Servlet,但是为了易于维护和控制,Servlet专注于处理请求,以及控制视图跳转,JSP专注于显示数据。

(5)Servlet+JSP原理图

Servlet+JSP协同实现JavaWeb应用,原理图:(该图:学习自B站UP主:遇见狂神说)
在这里插入图片描述
后来出现了MVC三层架构,更加合理清晰:
在这里插入图片描述


三、当今如何看待JSP

JSP已存在很多年,在JavaWeb服务器中无处不在(也许位置比较隐蔽,例如tomcat的work的子孙目录下就有相关文件),同时JSP也有很多缺陷,JSP最明显的问题在于它看起来很像HTML或XML,大多数JSP模板都是采用HTML的形式,但又掺杂了许多JSP标签库的标签,外加许多Java代码,使其非常混乱,因此,这就使我们难以维持一个格式良好的文档。

同时,JSP规范是与Servlet规范紧密耦合的,这意味着它只能用在基于Servlet的Web应用中,也不能用于非Servlet的应用中,JSP因此也不能作为通用模板。

但其设计思想有必要了解一下,毕竟曾经也有过辉煌阶段,那它也必然包含着精妙的设计思想,因此我们要取其精华,去其糟粕。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超周到的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值