JSP原理
什么是JSP
Java Server Page JAVA服务器端页面,也和Servlet一样,用于动态Web技术
最大的特点:
- 写JSP就像写HTML
- 区别:
HTML中只给用户提供静态的数据;
JSP页面中可以嵌入JAVA代码,为用户提供动态数据;
JSP原理
思路:JSP到底是怎么执行的?
- Tomcat中有一个work目录;
- IDEA使用Tomcat会在IDEA的tomcat中生产一个
而想要在IDEA中找到其工作目录,需先在配置文件中设置路径:
在IDEA工作目录中找到idea.properties文件,使用编辑器打开该文件,修改下列语句
该语句默认是被注释掉的,这里我取消注释后,将其路径修改我的自己设置的路径(注:该路径在系统中必需已经存在,否则,idea启动会报错)。
而后重启IDEA,新建一个web项目,通过tomcat启动该web项目
启动之后自动弹出浏览器界面
此后我们查找IDEA下tomcat创建的临时工作目录
C:\Users\30869.IntelliJIdea\system\tomcat\d0ce923c-c08e-43a7-876c-34572a3e37e1\work\Catalina\localhost\session_cookie_war\org\apache\jsp- 这个目录的前部分C:\Users\30869.IntelliJIdea\system,与上面的配置文件设置的文件路径一致
- 而session_cookie_war为我的项目名称
在该路径下,我们可以看到,产生了两个临时文件
通过观察,理解概念:浏览器向服务器发送请求,不管访问上面资源,其实都是在访问Servlet!
JSP最终也会转换成一个java类
打开index_jsp.java文件,观察源码
可以看到index_jsp继承了org.apache.jasper.runtime.HttpJspBase
观察源码
发现实现了Servlet接口
JSP的本质就是一个Servlet
public interface Servlet {
//初始化
void init(ServletConfig var1) throws ServletException;
//服务
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
//销毁
void destroy();
}
1、判断请求
2、内置了一些对象
final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null; //session
final javax.servlet.ServletContext application; //applicationContxt
final javax.servlet.ServletConfig config; //config
javax.servlet.jsp.JspWriter out = null; //out
final java.lang.Object page = this; //当前页
final javax.servlet.http.HttpServletRequest request //请求
final javax.servlet.http.HttpServletResponse response //响应
3、输出页面前增加的代码
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页面直接使用
4、然后输出
out.write("<html>\n");
out.write("<body>\n");
out.write("<h2>Hello World!</h2>\n");
out.write("</body>\
在JSP页面中;
只要是JAVA代码就会原封不动的输出;
如果HTML代码,就会被转换成:
out.write("<html>\n");
这样的格式渲染到前端。
流程图
我们可以通过修改JSP文件中的代码,通过查看临时文件,更加深入理解该过程,学无止尽,冲冲冲