`
小爷有里有面
  • 浏览: 26348 次
  • 性别: 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编译参数

    【标题】"Tomcat的JSP编译参数" 在Java Web开发中,Tomcat服务器扮演着重要的角色,尤其是对于处理JSP(JavaServer Pages)页面。JSP是一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,从而实现动态...

    编译tomcat源码所需jar包

    编译源码时,会用到`ecj.jar`,这是Eclipse Java Compiler的jar包,用于编译JSP文件。 6. **其他依赖库**:Tomcat源码中还包括了其他一些必要的库,如`servlet-api.jar`、`jsp-api.jar`等,这些都是Java Web应用的...

    tomcat-jsp-api/可以让meven直接使用tomcat启动

    通过引入特定依赖,如`tomcat-jsp-api`,可以简化项目的部署流程,使得开发者能够在本地环境中快速启动Tomcat服务器进行测试或调试。 #### Maven与Tomcat集成的关键点 - **Maven**: 是一个流行的Java项目管理工具...

    手工编译jsp

    【手工编译jsp】是一个关于Java Web开发中的特殊主题,主要涉及如何在没有使用Web容器(如Tomcat、Jetty等)的情况下,直接对JSP(JavaServer Pages)页面进行预编译为Java类的过程。这个过程对于理解JSP的工作原理...

    java ,tomcat,jsp经典配置

    本文将详细介绍如何在Java平台上配置Tomcat服务器以支持JSP和Servlet的开发,适合初学者学习。配置主要包括以下几个步骤: 1. **Java SDK的安装与配置** - 首先,需要从Sun官方网站下载适用于Windows的J2SDK(现已...

    tomcat6.0安装版及Jsp测试方法.rar

    Tomcat作为JSP容器,能够编译JSP文件为Servlet,然后执行这些Servlet来生成动态内容。 “标签”中提到了“tomcat6.0”、“JSP”和“测试”,这进一步强调了这个压缩包的重点内容。Tomcat 6.0是Tomcat的一个版本,...

    Tomcat+JSP经典配置实例.txt

    以上步骤展示了如何在Tomcat环境下配置JSP和Servlet的基本流程,涉及J2SDK的安装与验证、Tomcat的安装与配置、JSP与Servlet的创建与部署。通过这些实践,开发者可以更好地理解Java Web应用程序的构建过程,为后续的...

    tomcat6编译

    8. **学习价值**:编译Tomcat6不仅可以提升对Java Web服务器内部机制的理解,还有助于深入学习Java编程、软件构建流程以及服务器管理和优化技巧。 总的来说,“Tomcat6编译”是一个涉及Java Web开发基础、软件工程...

    把jsp编译打包成jar

    总的来说,将JSP编译打包成jar是一个将静态的JSP文件转换为可执行的Servlet代码,并利用构建工具Ant完成打包的过程,这样可以方便地在不支持JSP的环境中运行和部署。这个过程涉及到JSP、Servlet、Ant构建工具以及web...

    jsp.rar_JSP TOMCAT SQL_jsp sql_jsp sql tomcat_tomcat server jsp_

    总结,"jsp.rar_JSP TOMCAT SQL_jsp sql_jsp sql tomcat_tomcat server jsp_"这个项目涵盖了JSP动态网页技术、Tomcat服务器的使用、SQL Server数据库的管理和JSP与SQL的交互等多个关键知识点,是一个综合性的Web应用...

    Tomcat+JSP经典配置实例

    ### Tomcat+JSP经典配置实例详解 #### 一、开发环境配置 为了帮助初学者更好地理解如何在Tomcat服务器上配置JSP、Servlet和Bean,本文将详细介绍配置过程及注意事项。 ##### 第一步:下载与准备J2SDK和Tomcat - ...

    tomcat6.0和jsp的配置

    但如果你想修改JSP版本或者配置JSP的编译选项,可以在Tomcat的conf目录下的`web.xml`文件中找到相关的servlet配置。 **四、部署JSP应用** 1. 创建Web应用目录结构:在Tomcat的webapps目录下创建一个新的文件夹,...

    tomcat源码编译所需jar包

    在编译Tomcat时,通常会依赖于servlet-api.jar和jsp-api.jar这两个文件,它们通常位于Tomcat的lib目录下。 五、Apache Tomcat Native Library 为了提高性能,Tomcat提供了一个原生库(Tomcat Native),它允许...

    tomcat编译依赖Jar

    "tomcat编译依赖Jar"指的是在编译Tomcat源码时需要的一系列外部Java档案(.jar文件),这些文件包含了编译过程所需的类库和工具。了解这些依赖关系对于开发者来说至关重要,因为它们确保了Tomcat能够正确构建并运行...

    tomcat+access+jsp

    在Tomcat中,JSP文件被编译成Servlet,然后执行生成动态内容。JSP使得开发者能够将表现层和业务逻辑分离,提高代码的可维护性和复用性。 4. 集成与应用:在实际开发中,开发者通常会在JSP页面中编写HTML结构,然后...

    Tomcat下JSP、Servlet和JavaBean的配置

    ### Tomcat下JSP、Servlet和JavaBean的配置详解 #### 一、引言 随着互联网技术的发展,Java Server Pages (JSP)、Servlet 和 JavaBean 成为了开发动态Web应用程序的重要组成部分。对于初学者而言,如何在Apache ...

Global site tag (gtag.js) - Google Analytics