JSP学习笔记之JSP运行原理

在学习Servlet时,我们知道Tomcat能够从客户端的请求URL中提取出Web应用程序目录(/ServletStudy)和Servlet匹配的URL(/firstServlet)。

 

如果我们使用如下URL访问jsp文件,Tomcat会如何处理呢?

http://localhost:8080/JspStudy/JspFile/first.jsp

 Tomcat同样可以从以上URL中提取出Web应用程序目录(/JspStudy)和jsp文件所在的目录(/JspFile/first.jsp),这样Tomcat就能准确定位jsp文件的位置,即

<Tomcat安装目录>\webapps\JspStudy\JspFile\first.jsp

 既然Tomcat找到了即将被访问的jsp文件,那么它会如何处理这个jsp文件呢?

 

先让我们来看下面一段配置片段:

<!--这段代码来自<Tomcat安装目录>\conf\web.xml-->
<servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

 

很明显,这是配置了一个Servlet,该Servlet的名字是jsp,对应的Servlet类是JspServlet,匹配的url是“*.jsp、*.jspx”,即所有以“.jsp、*.jspx”结尾的请求全部交给JspServlet。

 

(我们假定这是首次访问first.jsp)

1、把jsp文件编译成Servlet源文件
JspServlet把first.jsp编译成一个名为first_jsp.java的Java源文件。
2、把Servlet源文件编译成class文件
Servlet引擎调用Java编译器把first_jsp.java编译成first_jsp.class文件
3、装载first_jsp.class文件并作出响应
//first_jsp.java和first_jsp.class文件所在的目录
<Tomcat安装目录>/work/Catalina/localhost/JspStudy/org/apache/jsp
 
 (我们假定这是第n次访问first.jsp,n >= 2)
因为不是首次访问,所以 first_jsp.java和first_jsp.class已存在。
1、检查first.jsp是否被修改
如果被修改过,则重新编译、生成 first_jsp.java和first_jsp.class,再执行下一步。
否则,直接执行下一步。
2、装载first_jsp.class,并作出响应。
 
补充:
1、总是检测jsp文件是否被修改而造成性能下降
解决方式:
<!--这段代码来自<Tomcat安装目录>\conf\web.xml-->
<servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <!--添加如下参数-->
        <init-param>
            <param-name>development</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
</servlet>
 
2、Tomcat如何判断jsp文件是否被修改过?
待更新。。。。。。

你可能感兴趣的:(学习笔记)