原理
服务器内部工作:Tomcat中有一个work目录。IDEA中的代码使用Tomcat的会在IDEA的Tomcat工作空间生成一个work目录
我的Idea Tomcat的工作空间:C:\Users\ASUS\AppData\Local\JetBrains\IntelliJIdea2020.2\tomcat\Unnamed_javaweb-test\work\Catalina\localhost\cs\org\apache\jsp
打开其中的文件,发现页面转变成了java程序
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
JSP最终也会被转换成一个Java类,这个java类继承了HttpJspBase类,而HttpJspBase类又继承了HttpServlet类
JSP本质上就是一个Servlet
Jsp编译后,.java
文件解析
三个方法
//初始化
public void _jspInit() {
}
//销毁
public void _jspDestroy() {
}
//Jsp服务
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException{
}
判断请求类型(get/post)
JSP的几个内置对象
final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null; //session
final javax.servlet.ServletContext application; //applicatinContext
final javax.servlet.ServletConfig config; //config
javax.servlet.jsp.JspWriter out = null; //out
final java.lang.Object page = this; //page 当前页
//这两个不用管
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
- 输出页面前,增加的代码
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中的java代码会被原封不动的输出,Html代码会通过渲染实现,例:out.write("<html>\r\n")