程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

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

发布于2021-03-13 13:45     阅读(691)     评论(0)     点赞(23)     收藏(2)


前言:虽然就目前来看,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因此也不能作为通用模板。

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



所属网站分类: 技术文章 > 博客

作者:天使的翅膀

链接:http://www.javaheidong.com/blog/article/114228/93d4f9f5da013b1fb500/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

23 0
收藏该文
已收藏

评论内容:(最多支持255个字符)