找到tomcat,lib目录先的jsper.jar,其中有一个Service方法:1.该方法将JSP文件变成HttpJspBase的子类。2.子类重写_jspService()方法。为什么会加一个"_",其它的方法有jspInit(),jspDestory().3.一个页面就对应一个Servlet。看到是HTTP代码就是加上out.println(),如果是<%%>就原封不动的放到JAVA代码中,其他若干功能,比如调用组件库等等。其实这个过程比较复杂。
Tomcat的访问分为两种:1.动态访问,.jsp是动态访问。2.静态访问,直接将请求的内容通过HTTP返回。
动态访问例子:
在SERVER下面的web.xml文件中找到下面的内容
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
然后找到对应的处理类
<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>
说明后缀为.jsp请求的内容是被上面的具体实现类来处理的,上面类的主要作用就是将.jsp文件转换为Servlet然后由Servlet来提供对用户的反馈。
TIP:修改为Listing为true可以加快调试速度。
修改tomcat的web.xml中listing参数为true可以让访问的时候,列出所有的可显示文件
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
<init-param>
<load-on-startup>1</load-on-startup>
</servlet>