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

前言2020年了 , 还需要学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如果是『老东西』 , 那被什么替代了呢?要么就是用常见的模板引擎『freemarker』『Thymeleaf』『Velocity』 , 用法其实跟『JSP』差不太多 , 只是它们的性能会更好 。 要么前后端分离 , 后端只需要返回JSON给前端 , 页面完全不需要后端管 。
说了这么多 , 我想说的是:“JSP还是有必要了解一下 , 不需要花很多时间 , 知道即可 , 这篇文章我就能带你认识JSP”
我说我不会JSP,面试官就让我回去等通知了
文章图片

什么是JSP?JSP全名为JavaServerPages , 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,面试官就让我回去等通知了
文章图片

编译过程是这样子的:浏览器第一次请求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页面的代码服务器是怎么执行的?再看回1_jsp.java文件 , java代码就直接在类中的service()中 。
我说我不会JSP,面试官就让我回去等通知了
文章图片

JSP内置了9个对象!内置对象有:out、session、response、request、config、page、application、pageContext、exception 。
重要要记住的是:JSP的本质其实就是Servlet 。 只是JSP当初设计的目的是为了简化Servlet输出HTML代码 。
我说我不会JSP,面试官就让我回去等通知了
文章图片

什么时候用JSP重复一句:JSP的本质其实就是Servlet 。 只是JSP当初设计的目的是为了简化Servlet输出HTML代码 。
我们的Java代码还是写在Servlet上的 , 不会写在JSP上 。 在知乎曾经看到一个问题:“如何使用JSP连接JDBC” 。 显然 , 我们可以这样做 , 但是没必要 。
JSP看起来就像是一个HTML , 再往里边增加大量的Java代码 , 这是不正常 , 不容易阅读的 。
所以 , 我们一般的模式是:在Servlet处理好的数据 , 转发到JSP , JSP只管对小部分的数据处理以及JSP本身写好的页面 。
例如 , 下面的Servlet处理好表单的数据 , 放在request对象 , 转发到JSP
我说我不会JSP,面试官就让我回去等通知了
文章图片

JSP拿到Servlet处理好的数据 , 做显示使用:
我说我不会JSP,面试官就让我回去等通知了
文章图片

JSP需要学什么JSP我们要学的其实两块就够了:JSTL和EL表达式
EL表达式**表达式语言(ExpressionLanguage , EL),EL表达式是用${}括起来的脚本 , 用来更方便的读取对象!**EL表达式主要用来读取数据 , 进行内容的显示!
为什么要使用EL表达式?我们先来看一下没有EL表达式是怎么样读取对象数据的吧!在1.jsp中设置了Session属性
我说我不会JSP,面试官就让我回去等通知了
文章图片

在2.jsp中获取Session设置的属性
我说我不会JSP,面试官就让我回去等通知了
文章图片

效果:
我说我不会JSP,面试官就让我回去等通知了
文章图片

上面看起来 , 也没有多复杂呀 , 那我们试试EL表达式的!
在2.jsp中读取Session设置的属性
我说我不会JSP,面试官就让我回去等通知了
文章图片

只用了简简单单的几个字母就能输出Session设置的属性了!并且输出在浏览器上!
我说我不会JSP,面试官就让我回去等通知了
文章图片

使用EL表达式可以方便地读取对象中的属性、提交的参数、JavaBean、甚至集合!
我说我不会JSP,面试官就让我回去等通知了
文章图片

JSTLJSTL全称为JSPStandardTagLibrary即JSP标准标签库 。 JSTL作为最基本的标签库 , 提供了一系列的JSP标签 , 实现了基本的功能:集合的遍历、数据的输出、字符串的处理、数据的格式化等等!
为什么要使用JSTL?
EL表达式不够完美 , 需要JSTL的支持!在JSP中 , 我们前面已经用到了EL表达式 , 体会到了EL表达式的强大功能:**使用EL表达式可以很方便地引用一些JavaBean以及其属性 , 不会抛出NullPointerException之类的错误!**但是 , EL表达式非常有限 , 它不能遍历集合 , 做逻辑的控制 。 这时 , 就需要JSTL的支持了!
Scriptlet的可读性 , 维护性 , 重用性都十分差!JSTL与HTML代码十分类似 , 遵循着XML标签语法 , 使用JSTL让JSP页面显得整洁 , 可读性非常好 , 重用性非常高 , 可以完成复杂的功能!
之前我们在使用EL表达式获取到集合的数据 , 遍历集合都是用scriptlet代码循环 , 现在我们学了forEach标签就可以舍弃scriptlet代码了 。
向Session中设置属性 , 属性的类型是List集合
我说我不会JSP,面试官就让我回去等通知了
文章图片

遍历session属性中的List集合,items:即将要迭代的集合 。 var:当前迭代到的元素
我说我不会JSP,面试官就让我回去等通知了
文章图片

效果:
我说我不会JSP,面试官就让我回去等通知了
文章图片

我说我不会JSP,面试官就让我回去等通知了
文章图片

放干货现在已经工作有一段时间了 , 为什么还来写JSP呢 , 原因有以下几个:
我是一个对排版有追求的人 , 如果早期关注我的同学可能会发现 , 我的GitHub、文章导航的read.me会经常更换 。 现在的GitHub导航也不合我心意了(太长了) , 并且早期的文章 , 说实话排版也不太行 , 我决定重新搞一波 。 我的文章会分发好几个平台 , 但文章发完了可能就没人看了 , 并且图床很可能因为平台的防盗链就挂掉了 。 又因为有很多的读者问我:”你能不能把你的文章转成PDF啊?“我写过很多系列级的文章 , 这些文章就几乎不会有太大的改动了 , 就非常适合把它们给”持久化“ 。 PDF的内容非常非常长 , 干货非常非常的硬 , 有兴趣的同学可以浏览一波 。 记住:JSP我们只需要了解即可 , 不需要深入去学习每个知识点 , 因为在现实开发中很可能用不上 。 【我说我不会JSP,面试官就让我回去等通知了】我说我不会JSP,面试官就让我回去等通知了
文章图片

私信回复「电子书」即可免费获取「原创」电子书和思维导图


    推荐阅读