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中的对象的序列化文件,用于服务器开启时重新读入到内存中。