• JSP概述


    JSP

    JSP是Sun为了解决动态生成HTML文档的技术,通过Servlet输出简单html页面信息都非常不方便。如果要输出一个复杂页面的时候,就更加的困难,而且不利于页面的维护和调试。所以sun公司推出一种叫做jsp的动态页面技术来实现对页面的输出繁锁工作。JSP就是替代Servlet输出HTML的

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <table>
    <%
    for(int i=1;i<10;i++){
       
    out.println("");
    for(int k=1;k<=i;k++){
       
    %>
    <td><%=k%>*<%=i%>=<%=i*k%></td>
    <% }
    out.println("");
    }
    %>
    </table>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    JSP技术最大的特点在于写JSP就像在写html,但是相比html而言,html只能为用户提供静态数据,而
    JSP技术允许在页面中嵌套 java 代码,为用户提供动态数据。

    核心运行原理

    JSP执行需要有二次编译,生成的类继承于HttpJspBase类,这是一个jsp文件生成Servlet程序要继承的基类。这个HttpJspBase类继承于HttpServlet类。

    • 当jsp页面第一次被访问时【不访问则不会自动编译】,首先由服务器进行定位,如果不存在则404
      • 如果使用过程中发现修改则自动会触发重新编译加载
    • 如果存在,则使用jsp引擎将jsp页面文件转换为servlet类文件[index.jsp–>index_jsp.java,包名称
      为org.apache.jsp]
    • 如果编译失败,则运行报错【500】,否则继续调用servlet引擎将Servlet类文件编译转换为字节码文件[index_jsp.java–>index_jsp.class]
    • 然后加载初始化类文件【反射–无参构造器,事实上由于java文件是jsp引擎生成的,所以类名称无
      法确定】
    <%!
    public index_jsp(){
       } //语法报错
    %>
    
    • 1
    • 2
    • 3
    • 4
    • 三生命周期

    三生命周期

    public void _jspInit() {
        在构造完成后自动执行初始化操作,在整个jsp生命周期过程中执行
    且只执行一次
    }
    public void _jspDestroy() {
        在jsp页面对象销毁前自动执行的资源回收方法,在整个jsp生命
    周期过程中执行且只执行一次
    }
    public void _jspService(final javax.servlet.http.HttpServletRequest request,
    final javax.servlet.http.HttpServletResponse response) throws
    java.io.IOException, javax.servlet.ServletException {
        用于对客户端的请求进行响
    应,jsp默认单实例多线程的方式,执行响应结束后常驻内存
    if
    (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
       
    final java.lang.String _jspx_method = request.getMethod();
    if ("OPTIONS".equals(_jspx_method)) {
       
    response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
    return;
    }
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) &&
    !"HEAD".equals(_jspx_method)) {
       
    response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
    response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP
    只允许 GETPOSTHEAD。Jasper 还允许 OPTIONS");
    return;
    }
    }
    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;
    try {
       
    response.setContentType("text/html;charset=UTF-8");
    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;
    out.write("\r\n");
    out.write("\r\n");
    out.write("\r\n");
    out.write("\r\n");
    out.write(" Title\r\n");
    out.write("\r\n");
    out.write("\r\n");
    out.write("\r\n");
    out.write("您是第");
    out.p
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
  • 相关阅读:
    桌面云组件介绍与安装
    Flink1.17 DataStream API
    ERP管理系统的重要性
    亚马逊高级API申请
    搭建达梦8国产数据库一主一从双机热备案例达梦DMHS插件实战
    HTML5 跨屏前端框架 Amaze UI
    JavaScript sort() 方法你真的了解吗?
    凸优化问题定义及其凸函数、凸集、仿射函数相关概念和定义
    小程序自定义tabbar如何显示隐藏
    docker安全
  • 原文地址:https://blog.csdn.net/qq_39756007/article/details/127987997