JSP 原理

一、JspServlet

  JspServlet是专门用于处理后缀为jsp与jspx文件请求。

  浏览器向服务器发出请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,即JspServlet。

  在tomcat服务器的web.xml中可以看到JspServlet.java文件被做了如下的配置:

   

   <load-on-startup>3</load-on-startup>的含义:配置标记容器是否在启动的时候就加载这个servlet。当值为0或者大于0时,表示容器在应用启动时就加载这个servlet当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。正数的值越小,启动该servlet的优先级越高,1为最高优先级。

二、访问原理

  JSP这门技术的最大的特点在于写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码。服务器会使用Jsp引擎将Jsp文件转换为Servlet类,客户端在请求Jsp文件时,其实是访问的Servlet类。

   

 

第一次执行:

  1. Tomat将http请求的index.jsp通过servlet转给JspServlet;
  2. JspServlet在JSP对象容器中查找对应index_jsp的对象,找到了话就取出来用。
  3. 如果没有找到index_jsp的对象,JSP 引擎从磁盘中载入index.jsp文件,然后将它转化为继承于HttpJspBase的 index_jsp.java文件,。这种转化只是简单地将所有html模板文本改用 write() 语句嵌入service()方法中,并且按JSP规范将所有的 JSP 元素转化成 Java 代码。在tomcat服务器文件下的work中我们可以看到。  
  4. JSP 引擎将index_jsp.java 编译成可执行类index_jsp.class,然后创建index_jsp类对象并放入JSP对象容器中。
  5. JspServlet将处理后的请求转发给index_jsp.class对象
  6. index_jsp.class对象执行_jspService方法,将HTML格式的代码与java代码执行得到的结果一起用write()和print()输出到HTTP response 响应中,然后交给 Web 服务器。
  7. Web 服务器以静态 HTML 网页的形式将 HTTP response 返回到客户端浏览器中。
  8. 最终,客户端浏览器处理 HTTP response ,生成HTML网页

第二次执行:

  因为已经存在了*.class文件,JSP 引擎会先检查jsp源文件与Java文件是否匹配,若匹配则不在需要进行步骤3和步骤4的过程。若不匹配,JSP 引擎会重新转换文件,重新编译,再次进行步骤3和步骤4。

  

 

posted @ 2017-12-18 20:39  学习_笔记  阅读(83)  评论(0)    收藏  举报