zoukankan      html  css  js  c++  java
  • spring boot 运行jsp原理分析

    Spring-boot运行jsp原理分析
     
    结论:
    1. 启动server的时候会创建临时目录
    2. 在浏览器中访问jsp文件的时候通过内置Tomcat将jsp转换为java,保存在临时目录中
    3. 然后编译为class文件,保存在临时目录中。
     
    分析过程如下:
    编码阶段:
     
    1、官方不推荐在spring-boot中使用jsp文件。
    如果要使用,需要添加jasper依赖:
     
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <!--<scope>provided</scope>-->
            </dependency>
     
    2、配置文件属性
    src/main/resources/application.properties配置文件
    # 页面默认前缀目录
    spring.mvc.view.prefix=/WEB-INF/jsp/
    # 响应页面默认后缀
    spring.mvc.view.suffix=.jsp
    # 自定义属性,可以在Controller中读取
    application.XXX=YYY
     
    1. 编写Controller
     
    1. 编写JSP页面
     
    1. 编写启动类App.java
    结构图如下


    打包阶段
    需要在pom中的build中增加如下属性,目的是将指定目录下的资源打包:
     
     <resources> 
                <!-- 打包时将jsp文件拷贝到META-INF目录下--> 
                <resource> 
                    <!-- 指定resources插件处理哪个目录下的资源文件 --> 
                    <directory>src/main/webapp</directory> 
                    <!--注意此次必须要放在此目录下才能被访问到--> 
                    <targetPath>META-INF/resources</targetPath> 
                    <includes> 
                        <include>**/**</include> 
                    </includes> 
                </resource> 
                <resource> 
                    <directory>src/main/resources</directory> 
                    <includes> 
                        <include>**/**</include> 
                    </includes> 
                    <filtering>false</filtering> 
                </resource> 
           </resources> 
     
    启动并调试Fat-jar,分析源码
    Jar包物理图:

     
    1. 调用TomcatEmbeddedServletContainerFactory 类中的getEmbeddedServletContainer方法。
    Tomcat tomcat = new Tomcat();
    File baseDir = (this.baseDirectory != null ? this.baseDirectory: createTempDir("tomcat"));
    1. 创建Tomcat实例。
    2. 第一次启动的时候,会创建临时目录basedir,两个文件夹,路径位置例如以下所示:C:Users用户名
     AppDataLocalTemp omcat.7897322053330749685.8080和tomcat-docbase.1385973521217649694.8080
     
    初始目录中内容为空。
    1. 初始化defaultServlet

    1. 初始化JspServlet

    ……
    ……
    ……
     
    1.  启动自定义application
     
     
     
     
    1. 访问jsp。

    通过Archive提供的URL(如果Archive中有子Archive,可以通过第二个方法获取)。然后通过Classloader提供的访问classpath resource的能力来实现的。
    jsp访问路径在之前的配置文件中:
    spring.view.prefix: /WEB-INF/jsp/
     
    1. 在浏览器中输入jsp地址,会调用内置Tomcat
    provides: tomcat-embed-core
    将jsp文件转换为java servlet文件,编译为class。
     
    1. 可以发现,临时目录下已经出现如下文件*.java和*.class:
     


  • 相关阅读:
    201771010135 杨蓉庆《面对对象程序设计(java)》第十五周学习总结
    201771010135 杨蓉庆/张燕/杨玲《面对对象程序设计(java)》第十四周学习总结
    201771010135 杨蓉庆/张燕《面对对象程序设计(java)》第十三周学习总结
    团队作业6—复审与事后分析
    团队作业6——Alpha阶段项目复审
    团队作业6——事后分析
    团队作业5——测试与发布(Alpha版本)
    团队作业4-项目汇总
    团队作业4-Day7
    团队作业4-Day6
  • 原文地址:https://www.cnblogs.com/pilihaotian/p/8822926.html
Copyright © 2011-2022 走看看