【学习笔记】JSP原理
什么是JSP
Java Server Pages :Java服务器端页面
和Servlet一样,用于开发动态web
特点:
-
和html相仿
-
区别就是,html只给用户提供静态数据,JSP页面中可以嵌入java代码,为用户提供动态数据
JSP如何执行
-
在项目中,有一个jsp文件,运行后,在target目录下会生成对应的一个jsp文件
-
在服务器内部
-
在tomcat的目录下,生成一个work目录,在这个目录中存放着jsp编译后的java代码
-
-
idea 的tomcat工作空间中
在这个目录一直往里走,
C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat\252f1752-eb9c-4fd3-ae64-270cb11fd94c\work\Catalina\localhost\ROOT\org\apache\jsp
就会发现这两个文件,也就是项目中的jsp转换称为的java文件
该java类的源码:
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports
首先,我们发现这个类继承了HttpJspBase
public abstract class HttpJspBase extends HttpServlet implements HttpJspPage
HttpJspBase 继承了 HttpServlet
所以我们可以得出一个结论:JSP本质上就是一个Servlet
我们再回到index_jsp.java,里面的核心方法:
//初始化
public void _jspInit() {
}
//销毁
public void _jspDestroy() {
}
//JSPService
public void _jspService(final jakarta.servlet.http.HttpServletRequest request, final jakarta.servlet.http.HttpServletResponse response)
在JSPService中的功能:
-
判断请求
-
内置对象
final jakarta.servlet.jsp.PageContext pageContext; //页面上下文 jakarta.servlet.http.HttpSession session = null; //session final jakarta.servlet.ServletContext application; //applicationContext final jakarta.servlet.ServletConfig config; //config jakarta.servlet.jsp.JspWriter out = null; //out final java.lang.Object page = this; //page 这里代表当前页 final jakarta.servlet.http.HttpServletRequest request //请求 final jakarta.servlet.http.HttpServletResponse response //响应
-
输出页面前的设置
response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out;
这些对象我们可以在jsp页面中直接使用
在jsp中 使用尖括号和百分号引起来的区域可以写,java代码。 <% %>
-
输出页面
out.write("<html>\n"); out.write("<body>\n"); out.write("<h2>Hello World!</h2>\n"); out.write("</body>\n"); out.write("</html>\n");
当你运行这个项目时,work目录会自动被删除,当运行完毕后,又自动生成了这个目录,如果你去访问一个jsp资源,在这个目录的最里面就会生成该jsp转换成的java文件和class文件
流程图:
在jsp代码中,如果是java代码,就会原封不动输出,如果是html代码,就会被转换为
out.write("<html>\r\n")
等等,用这样的格式输出到前端