Jsp實際就是Servlet。
我們訪問Http://localhost:8080/Web/index.jsp的流程:
1 【jsp文件名】.jsp轉義為【jsp文件名_jsp】.java,文件存儲在Tomcat下的Work目錄下的org的apache的jsp文件中。
2 編譯jsp文件名_jsp.java為.class文件,文件存儲位置和【jsp文件名_jsp】.java位置相同。
3 JVM執行.class文件。
查看轉義後的.java文件:
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
而HttpJspBase又繼承了HttpServlet,可見生成的.java文件是個Servlet類。
疑問:
我們在<%中使用的對象%>來源於哪裡呢?
解決:查看源代碼
final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null;
這裡面的對象是我們編寫jsp頁面的時候使用的對象。
Jasper:解析JSP的引擎
Jasper是tomcat中使用的JSP引擎,在Tomcat 6中使用的是Jasper 2,相對於原來的版本作了不少的改進,比如:JSP的標簽緩沖池、後台編譯、頁面改變時自動重新編譯、Eclipse中JDT編譯等等。
在Tomcat中可以通過配置 CATALINA_HOME/conf/web.xml 中的內容,配置Jasper的選項:
<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>
Tomcat下的Work工作目錄:(這裡只是我至今發現的功能,可能還有其它功能)
1 存放.jsp文件轉義的.java文件和.class文件。
2 當服務器停止時,存放位於HttpSession中的對象的序列化文件,用於服務器開啟時重新讀入到內存中。