JSP原理

什么是JSP

Java Server Pages :Java服务器端页面

和Servlet一样,用于开发动态web

特点:

  • 和html相仿

  • 区别就是,html只给用户提供静态数据,JSP页面中可以嵌入java代码,为用户提供动态数据

 

JSP如何执行

  • 在项目中,有一个jsp文件,运行后,在target目录下会生成对应的一个jsp文件

  • 在服务器内部

    • 在tomcat的目录下,生成一个work目录,在这个目录中存放着jsp编译后的java代码

  • idea 的tomcat工作空间中

    image-20221019180152524

    在这个目录一直往里走,

    C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat\252f1752-eb9c-4fd3-ae64-270cb11fd94c\work\Catalina\localhost\ROOT\org\apache\jsp

    image-20221019180250021

    就会发现这两个文件,也就是项目中的jsp转换称为的java文件

 

该java类的源码:

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports 

首先,我们发现这个类继承了HttpJspBase

public abstract class HttpJspBase extends HttpServlet implements HttpJspPage 

HttpJspBase 继承了 HttpServlet

所以我们可以得出一个结论:JSP本质上就是一个Servlet

 

我们再回到index_jsp.java,里面的核心方法:

//初始化
public void _jspInit() {
}
//销毁
public void _jspDestroy() {
}
//JSPService
public void _jspService(final jakarta.servlet.http.HttpServletRequest request, final jakarta.servlet.http.HttpServletResponse response)

在JSPService中的功能:

  • 判断请求

  • 内置对象

    final jakarta.servlet.jsp.PageContext pageContext;  //页面上下文
    jakarta.servlet.http.HttpSession session = null;    //session
    final jakarta.servlet.ServletContext application;  //applicationContext
    final jakarta.servlet.ServletConfig config;   //config
    jakarta.servlet.jsp.JspWriter out = null;  //out
    final java.lang.Object page = this;   //page   这里代表当前页
    final jakarta.servlet.http.HttpServletRequest request  //请求 
    final jakarta.servlet.http.HttpServletResponse response  //响应
  • 输出页面前的设置

    response.setContentType("text/html");
    pageContext = _jspxFactory.getPageContext(this, request, response,
                                              null, true, 8192, true);
    _jspx_page_context = pageContext;
    application = pageContext.getServletContext();
    config = pageContext.getServletConfig();
    session = pageContext.getSession();
    out = pageContext.getOut();
    _jspx_out = out;

    这些对象我们可以在jsp页面中直接使用

    在jsp中 使用尖括号和百分号引起来的区域可以写,java代码。 <% %>

  • 输出页面

    out.write("<html>\n");
    out.write("<body>\n");
    out.write("<h2>Hello World!</h2>\n");
    out.write("</body>\n");
    out.write("</html>\n");

 

当你运行这个项目时,work目录会自动被删除,当运行完毕后,又自动生成了这个目录,如果你去访问一个jsp资源,在这个目录的最里面就会生成该jsp转换成的java文件和class文件

 

流程图:

image-20221019184026276

 

 

在jsp代码中,如果是java代码,就会原封不动输出,如果是html代码,就会被转换为

out.write("<html>\r\n")   

等等,用这样的格式输出到前端

原文地址:http://www.cnblogs.com/wztblogs/p/16807363.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性