【JSP】我说我不会JSP,面试官就让我回去等通知了


前言 2020年了 , 还需要学JSP吗?我相信现在还是在大学的同学肯定会有这个疑问 。

【JSP】我说我不会JSP,面试官就让我回去等通知了
本文插图

其实我在18年的时候已经见过类似的问题了「JSP还应该学习吗」 。 我在18年发了几篇JSP的文章 , 已经有不少的开发者评论『这不是上个世纪的东西了吗』『梦回几年前』『这么老的的东西 , 怎么还有人学』
现在问题来了 , JSP放在2020年 , 是真的老了吗?对 , 是真的老了
现在问题又来了 , 为什么在几年前已经被定义『老』的技术 , 到2020年了还是有热度 , 每年还是有人在问:『还需要学习JSP吗』 。 我认为理由也很简单:JSP在之前用的是真的多!
在我初学Java的时候 , 就经常听到:JSP和PHP是能够写动态网页的---《我的老师》 。
当我们去找相关的学习资料时 , 发现到处都是JSP的身影 , 会给我一种感觉:好像不懂JSP就压根没法继续往下学习一样 。
如果你是新手 , 如果你还没学习JSP , 我建议还是可以了解一下 , 不需要深入去学习JSP的各种内容 , 但可以了解一下 。 至少别人说起JSP的时候 , 你能知道什么是JSP , 能看懂JSP的代码 。
额外说一句:你去到公司 , 可能还能看到JSP的代码 。 虽然JSP是『老东西』 , 但我们去到公司可能就是维护老的项目 。 JSP可能不用你自己去写 , 但至少能看得懂 , 对不对 。

【JSP】我说我不会JSP,面试官就让我回去等通知了
本文插图

问题又来了 , 那JSP如果是『老东西』 , 那被什么替代了呢?要么就是用常见的模板引擎『freemarker』『Thymeleaf』『Velocity』 , 用法其实跟『JSP』差不太多 , 只是它们的性能会更好 。 要么前后端分离 , 后端只需要返回JSON给前端 , 页面完全不需要后端管 。
说了这么多 , 我想说的是:“JSP还是有必要了解一下 , 不需要花很多时间 , 知道即可 , 这篇文章我就能带你认识JSP”

【JSP】我说我不会JSP,面试官就让我回去等通知了
本文插图

什么是JSP? JSP全名为Java Server Pages , java服务器页面 。 JSP是一种基于文本的程序 , 其特点就是HTML和Java代码共同存在!JSP是为了简化Servlet的工作出现的替代品 , Servlet输出HTML非常困难 , JSP就是替代Servlet输出HTML的 。
在Tomcat博客中我提到过:Tomcat访问任何的资源都是在访问Servlet! , 当然了 , JSP也不例外!JSP本身就是一种Servlet 。 为什么我说JSP本身就是一种Servlet呢?其实JSP在第一次被访问的时候会被编译为HttpJspPage类(该类是HttpServlet的一个子类)
比如我随便找一个JSP , 编译后的JSP长这个样:

【JSP】我说我不会JSP,面试官就让我回去等通知了
本文插图

编译过程是这样子的:浏览器第一次请求1.jsp时 , Tomcat会将1.jsp转化成1_jsp.java这么一个类 , 并将该文件编译成class文件 。 编译完毕后再运行class文件来响应浏览器的请求 。
以后访问1.jsp就不再重新编译jsp文件了 , 直接调用class文件来响应浏览器 。 当然了 , 如果Tomcat检测到JSP页面改动了的话 , 会重新编译的 。
既然JSP是一个Servlet , 那JSP页面中的HTML排版标签是怎么样被发送到浏览器的?我们来看下上面1_jsp.java的源码就知道了 。 原来就是用write()出去的罢了 。 说到底 , JSP就是封装了Servlet的java程序罢了 。

【JSP】我说我不会JSP,面试官就让我回去等通知了
本文插图

有人可能也会问:JSP页面的代码服务器是怎么执行的?再看回1_jsp.java文件 , java代码就直接在类中的service()中 。


推荐阅读