前言
2020年了,还需要学JSP吗?我相信现在还是在大学的同学肯定会有这个疑问。
其实我在18年的时候已经见过类似的问题了「JSP还应该学习吗」。我在18年发了几篇JSP的文章,已经有不少的开发者评论『这不是上个世纪的东西了吗』『梦回几年前』『这么老的的东西,怎么还有人学』
现在问题来了,JSP放在2020年,是真的老了吗?对,是真的老了
现在问题又来了,为什么在几年前已经被定义『老』的技术,到2020年了还是有热度,每年还是有人在问:『还需要学习JSP吗』。我认为理由也很简单:JSP在之前用的是真的多!
在我初学Java的时候,就经常听到:JSP和PHP是能够写动态网页的—《我的老师》。
当我们去找相关的学习资料时,发现到处都是JSP的身影,会给我一种感觉:好像不懂JSP就压根没法继续往下学习一样。
如果你是新手,如果你还没学习JSP,我建议还是可以了解一下,不需要深入去学习JSP的各种内容,但可以了解一下。至少别人说起JSP的时候,你能知道什么是JSP,能看懂JSP的代码。
额外说一句:你去到公司,可能还能看到JSP的代码。虽然JSP是『老东西』,但我们去到公司可能就是维护老的项目。JSP可能不用你自己去写,但至少能看得懂,对不对。
问题又来了,那JSP如果是『老东西』,那被什么替代了呢?要么就是用常见的模板引擎『freemarker』『Thymeleaf』『Velocity』,用法其实跟『JSP』差不太多,只是它们的性能会更好。要么前后端分离,后端只需要返回JSON给前端,页面完全不需要后端管。
说了这么多,我想说的是:“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长这个样:
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.util.Date;
public final class _1_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
private static java.util.List<String> _jspx_dependants;
private javax.el.ExpressionFactory _el_expressionfactory;
private org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.List<String> getDependants() {
return _jspx_dependants;
}
public void _jspInit() {
_el_expressionfactory = _jspxFactory.getJspApplicationContext