`
小爷有里有面
  • 浏览: 25610 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tomcat 编译 jsp 流程

    博客分类:
  • java
阅读更多

Tomcat启动进行默认初始化

org.apache.catalina.startup.Tomcat;
    public static void initWebappDefaults(Context ctx) {
        // Default servlet 
        Wrapper servlet = addServlet(
                ctx, "default", "org.apache.catalina.servlets.DefaultServlet");
        servlet.setLoadOnStartup(1);

        // JSP servlet (by class name - to avoid loading all deps)
        //添加jsp映射的Servlet
        servlet = addServlet(
                ctx, "jsp", "org.apache.jasper.servlet.JspServlet");
        servlet.addInitParameter("fork", "false");
        servlet.setLoadOnStartup(3);
        
        // Servlet mappings 
        ctx.addServletMapping("/", "default");
        ctx.addServletMapping("*.jsp", "jsp");
        ctx.addServletMapping("*.jspx", "jsp");

        // Sessions
        //设置session管理器
        ctx.setManager( new StandardManager());
        ctx.setSessionTimeout(30);
        
        // MIME mappings
        for (int i = 0; i < DEFAULT_MIME_MAPPINGS.length;) {
            ctx.addMimeMapping(DEFAULT_MIME_MAPPINGS[i++],
                    DEFAULT_MIME_MAPPINGS[i++]);
        }
        
        // Welcome files
        ctx.addWelcomeFile("index.html");
        ctx.addWelcomeFile("index.htm");
        ctx.addWelcomeFile("index.jsp");
    }

 

访问jsp页面tomcat交由JspServlet处理

 

org.apache.jasper.servlet.JspServlet

private void serviceJspFile(HttpServletRequest request,
                                HttpServletResponse response, String jspUri,
                                boolean precompile){
        //判断jsp是否已经封装        
        JspServletWrapper wrapper = rctxt.getWrapper(jspUri);
        if (wrapper == null) {
            synchronized(this) {
                wrapper = rctxt.getWrapper(jspUri);
                //没有封装得到jsp文件
                if (wrapper == null) {
                    // Check if the requested JSP page exists, to avoid
                    // creating unnecessary directories and files.
                    // jsp文件不存在进行错误操作
                    if (null == context.getResource(jspUri)) {
                        handleMissingResource(request, response, jspUri);
                        return;
                    }
                    //如果存在封装jsp并添加映射
                    wrapper = new JspServletWrapper(config, options, jspUri,
                                                    rctxt);
                    rctxt.addWrapper(jspUri,wrapper);
                }
            }
        }

        try {
            //执行jsp封装的service
            //@see org.apache.jasper.servlet.JspServletWrapper#service(HttpServletRequest request, 
                        HttpServletResponse response,
                        boolean precompile)
            wrapper.service(request, response, precompile);
        } catch (FileNotFoundException fnfe) {
            handleMissingResource(request, response, jspUri);
        }
}

 

org.apache.jasper.servlet.JspServletWrapper

public void service(HttpServletRequest request, 
                        HttpServletResponse response,
                        boolean precompile)
            throws ServletException, IOException, FileNotFoundException {
//......
            /*
             * (1) Compile
             */
            if (options.getDevelopment() || firstTime ) {
                synchronized (this) {
                    firstTime = false;

                    // The following sets reload to true, if necessary
                    //编译jsp
                    ctxt.compile();
                }
            } else {
                if (compileException != null) {
                    // Throw cached compilation exception
                    throw compileException;
                }
            }

            /*
             * (2) (Re)load servlet class file
             */
            //得到jsp编译后的Servlet
            servlet = getServlet();
//......
            /*
             * (4) Service request
             */
            if (servlet instanceof SingleThreadModel) {
               // sync on the wrapper so that the freshness
               // of the page is determined right before servicing
               synchronized (this) {
                   //单线程执行jsp编译后的Servlet
                   servlet.service(request, response);
                }
            } else {
                //方法线程执行(非单线程)
                servlet.service(request, response);
            }
}

 

 

org.apache.jasper.compiler.Compiler
public void compile(boolean compileClass, boolean jspcMode)
  throws FileNotFoundException, JasperException, Exception {
  //生成java
  String[] smap = generateJava();
  //生成class
  generateClass(smap);
}

protected String[] generateJava() throws Exception {
  //生成java文件    
  writer = setupContextWriter(javaFileName);
  //写入java内容
  Generator.generate(writer, this, pageNodes);

}

 

org.apache.jasper.JspCompilationContext

public Compiler createCompiler() {
        //试着将options.getCompilerClassName改为自己重构的类
        if (options.getCompilerClassName() != null) {
            jspCompiler = createCompiler(options.getCompilerClassName());
        } else {
}

 

1
1
分享到:
评论

相关推荐

    Tomcat的jsp编译参数

    NULL 博文链接:https://michaelee.iteye.com/blog/1603811

    JSP编译环境Tomcat5.0

    jsp编译环境 tomcat5.0 Accp5.0

    把jsp编译打包成jar

    将工程中的jsp编译成servlet后打成一个jar包,并且自动生成web.xml中的servlet配置。

    Tomcat JSP编译器Jasper.docx

    Jasper模块是Tomcat的JSP核心引擎,我们知道JSP本质上是一个Servlet。 Tomcat使用Jasper对JSP语法进行解析,生成Servlet并生成...另外,在运行的时候,Jasper还会检测JSP文件是否修改,如果修改,则会重新编译JSP文件。

    编译安装Tomcat

    本文介绍了通过编译方式安装Tomcat,访问多个jsp界面,多个域名访问和如何修改端口的方法,仅供大家参考学习。

    java+jsp+tomcat学生管理系统

    1.1 目的:  通过本学生信息管理系统软件,能帮助各校指导员及教务人员、利用计算机,快速方便的对学生资料进行管理、输入、输出、查找、... 编译环境:J2SDK 1.5  Web服务器:Tomcat 6.0  数据库:SQL Server 2005

    intellij idea 集成tomcat

    intellij idea 集成tomcat

    jsp 自动编译机制详细介绍

    jsp 自动编译机制详细介绍 总的来说,Jasper的自动检测实现的...上图是一个形象的示意图,我们知道Tomcat架构中有四个级别的容器,Engine、Host、Context和Wrapper,而jsp编译对应在wrapper级别,所以通过StandardWra

    apache-tomcat-7.0.82

    在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。另外Tomcat也提供了一个应用:manager,访问这个应用需要用户名和密码,用户名和密码...

    jsp总结代码

    jsp总结代码,配置Tomcat,jsp的组成 (定义:在html中嵌入java脚本代码)

    jsp经典笔记jsp经典笔记

    1,JSP文件先要翻译成Java文件(Servlet),在tomcat中翻译后的java文件在tomcat下的work\Catalina\localhost中相应名字的应用目录里。 2,编译Java文件 3,运行.class文件 3.JSP的特点 1,JSP不需要编译 2,JSP不...

    Tomcat 源代码调试 - 看不见的 Shell 第二式之隐藏任意 Jsp 文件1

    2. Jsp 件会被转换为 Java 件,并随后被编译为 class 3. Jsp 被编译并被加载实例化后,会被封装在个 JspServletWrapper 对

    源码安装Tomcat所需文件

    源码安装Tomcat所需文件,Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。

    tomcat-7.0.79

    Tomcat 7.0的目录结构介绍。...work目录用于在服务器运行时过度资源,简单来说,就是存储jsp、servlet翻译、编译后的结果。 Tomcat 7.0是Apache公司开发的一款开源的轻量WEB应用TomCat服务器。是开发和调试的第一选择。

    junit扩展JspTest.zip

    内部它使用Jasper作为jsp编译引擎---tomcat的jsp引擎。对于使用maven作为构建工具的团队或个人,使用非常简单,添加下面的依赖到你的pom文件    &lt;groupId&gt;com.github.lkoskela.jsptest&lt;/groupId&gt;  &lt;artifactId&gt;...

    基于 MySQL+Tomcat+Servlet+JSP 的简单作业管理系统

    基于 MySQL+Tomcat+Servlet+JSP 的简单作业管理系统.zip 基于 MySQL+Tomcat+Servlet+JSP 的简单作业管理系统.zip 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目源码...

    Tomcat5.0.x

    Apache Tomcat 5.0.x 对于Servlet和JSP的支持是一样的。大量底层代码里的重大修改,带来性能的提升、稳定性的提升及整体成本。 Apache Tomcat 5.0.x在Apache Tomcat 4.1的基础上做了很多改动,包括: · 性能优化和...

    apache-tomcat-7.0.20.zip

    与JAR文件的依赖性JSP文件不再重新编译的每个从而提高性能的访问。 * Update to version 1.1.22 of the native component of the AJP and HTTP APR/native connectors.更新到1.1.22版本的AJP和HTTP四月/本地连接器...

    tomcat环境变量配置

    如果你的Tomcat安装在C盘里,如:c:\tomcat(在这里切记一下,安装Tomcat时,在其字母周围一定不要存在空格,否则最后可能导致配置不成功) 1,新建变量名:CATALINA_BASE,变量值:C:\tomcat 2,新建变量名:...

    Tomcat7配置详解中文文档

    4) Deployer 介绍了如何部署web application,预编译,和验证web application。 5) Manager 利用Manager应用程序管理web application部署,以及在tomcat运行时重新部署 6) Realms and AAA 介绍Realms(域)的...

Global site tag (gtag.js) - Google Analytics