1.在Tomcat的公共设定中 <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> ........................ </servlet> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping> 可以看出*.jsp文件都是请求org.apache.jasper.servlet.JspServlet得。
2.下面再看看org.apache.jasper.servlet.JspServlet中做什么。 从源代码中可以看出,这个类是继承HttpServlet类,并覆盖了主要方法 public void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 在这个方法中找到jsp文件的路径jspUri,并执行方法serviceJspFile。 接着在方法serviceJspFile中我们看到它新创建了一个类JspServletWrapper的实例,并执行了这个类实例的service方法。
3.接下来,我们再看看这个类org.apache.jasper.servlet.JspServletWrapper 在这个类中 我们可以看到在初始化的时候,创建了一个新的对象 ctxt = new JspCompilationContext(jspUri, tagInfo, options, servletContext, this, rctxt, tagFileJarUrl); 找到方法 public void service(HttpServletRequest request, HttpServletResponse response, boolean precompile) throws ServletException, IOException, FileNotFoundException 这里,使用了ctxt.compile(),对jsp文件进行了编译, 再调用方法getServlet();给Servlet类型对象theServlet赋值, 最后,调用theServlet的service方法。 由于从jsp转换来的java继承类HttpJspBase,我们可以从类HttpJspBase 中看到servcie方法又调用了_jspService方法,
这样最终调用了由jsp转换来的java中的_jspService方法。
我们可以通过在……\jakarta-tomcat-5.0.28\work\Catalina\localhost\bbsSchool(项目名)\org\apache\jsp目录下找到从jsp转换来的java源文件,可以找到_jspService这个方法。
*******************************
1的文件在目录:…\jakarta-tomcat-5.0.28\conf\web.xml
2中提到的类org.apache.jasper.servlet.jspServlet在目录:…\jakarta-tomcat-5.0.28\common\lib\jasper-compiler.rar里。里面是经过编译的class文件,可以去网上下载。
3中提到org.apache.jasper.servlet.JspServletWrapper在目录:同上。
********************************
文章出处:飞诺网(www.):http://dev./course/4_webprogram/jsp/jsp_js/2008229/102028.html
|