JSP技术并不是目前流行的前后端分离技术,但它依然没有退出历史舞台,我们还是有必要去了解学习它。
简介
什么是JSP
Java Server Pages:Java服务器页面,也和Servlet一样,用于动态web技术。JSP技术并不是目前流行的前后端分离技术。
JSP(全称JavaServer Pages)是由[Sun Microsystems](https://baike.baidu.com/item/Sun Microsystems)公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。摘自百度百科。
最大的特点:
- 写JSP就像在写HTML
- 区别:
- HTML只给用户提供静态的数据
- JSP页面中可以嵌入Java代码,为用户提供动态数据
JSP原理

思路:JSP到底怎么执行的!
- 代码层面没有任何问题
- 服务器内部工作
- Tomcat中有一个work目录
- IDEA中使用Tomcat的会在IDEA的Tomcat中建立一个work目录
- 上边两个work目录相同
我们打开Tomcat中的work目录看看,里边有一个jsp文件夹,里边有名为index_jsp的java程序(类)。其实这是JSP页面转变成的java程序。
Mac中,IDEA内的work目录隐藏的比较深。我电脑上的路径是(记得要先启动web项目)/Users/qsdbl(我的用户名)/Library/Caches/JetBrains/IntelliJIdea2020.2/tomcat/Unnamed_javaweb_study(Unnamed_后边是当前项目名)
。
打开一个JSP页面转换成的Java类文件,我们可以发现JSP文件本质上属于Servlet(间接继承了HttpServlet类)。所以,浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet。(JSP最终会被转换成为一个Java类)
往下翻,我们发现有很多的write、print方法将文本拼接成HTML代码:
总结
JSP文件本质上属于Servlet程序。在JSP页面中,只要是Java代码就会原封不动的输出,如果是HTML代码,就会使用write、print方法输出(拼接后发送给前端)。可以这么理解:JSP技术主要是为了解决使用Servlet类编写(write、print方法拼接)前端HTML页面麻烦而发展出来的。
初探JSP页面
继续往下翻,我们注意到了三个方法:
1 |
//初始化 |
判断请求
内置一些对象
1
2
3
4
5
6
7final javax.servlet.jsp.PageContext pageContext; //页面上下文
final javax.servlet.ServletContext application; //application(就是ServletContext)
final javax.servlet.ServletConfig config; //config
javax.servlet.jsp.JspWriter out = null; //out
final java.lang.Object page = this; //page
HttpServletRequest request // request请求
HttpServletResponse response //response响应输出页面前增加的代码
1
2
3
4
5
6
7
8response.setContentType("text/html; charset=UTF-8"); //设置响应的页面类型
pageContext = _jspxFactory.getPageContext(this, request, response,
null, false, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
out = pageContext.getOut();
_jspx_out = out;以上的这些对象,我们可以在JSP页面中直接使用
JSP基础语法
详细笔记见:传送门。
JSP内置对象
- pageContext 可以存数据
- request 可以存数据
- response
- session 可以存数据
- application (ServletContext) 可以存数据
- config (ServletConfig)
- out
- page
- exception
详细笔记见:传送门。
标签&表达式
JSP标签、JSTL标签、EL表达式。详细笔记见:传送门。