首页 > 其他分享 >Jsp底层实现原理

Jsp底层实现原理

时间:2022-12-19 11:24:57浏览次数:45  
标签:index 翻译 java service Jsp JSP 原理 jsp 底层

JSP底层原理分析

  • 在WEB-INF目录外创建一个index.jsp文件

  • 将项目部署成功之后启动服务器,浏览器访问该jsp页面,在服务器启动页面可以看到CATALINE_BASE这个信息

    • org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: C:\Users\Edimd\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat\eb4eabe6-8276-4635-85ed-a2c10a0735f6
    • 我们打开这个文件夹
    • 赫然看到,这个jsp被Tomcat翻译为了java程序,并且被编译为index_jsp.class文件
    • 我们访问index.jsp实际上是访问index_jsp.class中的方法
  • JSP实际上就是一个Servlet

    • 在访问index.html时会Tomcat会自动翻译生成index_jsp.java,会自动编译生成index_jsp.class,所以JSP是一个类
    • index_jsp.java继承了HttpJspBase,而HttpJspBase继承了HttpServlet,所以JSP本质上还是一个Servlet
    • jsp的生命周期和Servlet完全相同,没有任何区别
    • jsp和Servlet都是单例的(假单例)
  • jsp第一次访问的时候比较慢,为什么?

    • 第一次访问

      1. 要把jsp文件翻译为java源文件
      2. java源文件要编译生成class文件
      3. 然后通过class创建servlet对象
      4. 调用servlet的init方法
      5. 调用servlet的service方法
    • 第二次访问

      • 直接调用单例对象的service方法
  • jsp是什么?

    • jsp是java程序
    • jsp是:JavaServer Page的缩写(基于java实现的服务端页面)
    • jsp是JavaEE的13个子规范之一
  • 对JSP执行错误调试时,要打开JSP文件对应的java文件,检查java代码

  • JSP基础语法

    • 在JSP中编写的文字,都会被自动翻译到Servlet类当中的out.write("这里当中"),被java程序当作普通字符串打印输出到浏览器当中。

    • 解决中文乱码

      • <%@page contentType="text/html; charset=utf-8" %>
        
    • 怎么在JSP中编写java代码

      • <% java 语句%>
        • 在这个语句内写的语句被视为java代码被翻译到service方法内部
        • <%%>这里本质上是在service方法体中写java代码,只有能出现在方法体的代码才能写上
      • <%--%>jsp注释,使用该注释,注释内容不会被翻译到java源文件中
      • service方法体中写的代码要遵循顺序,依次逐行执行
      • <%! %>这是在service方法之外,类体里面写代码
  • Jsp和Servlet有什么区别?

    • 职责不同
      • Servlet的职责是什么?收集数据(纯java,连接数据库收集数据,逻辑业务处理)
      • JSP的职责是什么?展示数据,(jsp的强项是做数据的展示)
    • 本质上JSP是Servlet,只是擅长的方向不一样
  • 怎么在jsp中输出java变量

    • 使用jsp内置对象,out.write("i =" + i);
    • 如果输出的内容含有java代码
      • <%=%>在=后面编写要输出的内容:<%=i%>
      • <%=%>这个符号会被翻译到哪个地方?什么时候用到?
        • 当你输出的内容中含有变量时
        • 最终被翻译到service方法中的out.print()代码
  • JSP基础语法总结

    • JSP中直接编写普通字符串
      • 翻译到service方法的内部,翻译为:out.write("");
    • <%%>
      • 翻译到service方法内部,里面是一条一条java语句
    • <%!%>
      • 翻译到service方法体外部,类体内部
    • <%=%>
      • 翻译到service方法内部,翻译为:out.print();

标签:index,翻译,java,service,Jsp,JSP,原理,jsp,底层
From: https://www.cnblogs.com/RepublicLine/p/16991688.html

相关文章