• 初识JSP


    这几天琐事太多,影响学习了,好在已经解决,还是继续,考研最后的冲刺阶段,我也跟随考研党们最后冲刺一波,三楼西的很多人都已经眼熟,愿你们一个月后有一个好的结果。

     jsp用过好久了,这次又看了一遍,还是搞明白了很多以前半知半解的东西。

    什么是jsp呢?

    jsp=html+java脚本+jsp标签(指令)

    为什么会出现它呢?

    首先看看servlet:

    之前学习的时候知道,它是服务器用来接收请求并响应请求的,想一下,响应的时候它是怎么把html的响应体发给浏览器的呢?是通过response.getWriter()得到的这个流对象输出到浏览器,如果每一句html都需要这么办,那不是要浪费很多代码吗?

    这时候想可以用html啊,可是html是静态页面,并不能包含变量啊,它并不支持动态响应啊。那这也不行那么不行该怎么办呢

    这时候jsp就出现了,它是在html的基础上添加java脚本,也就是把两者的优点混合了。

    既然有jsp了,还要servlet干嘛?

    想一想如果你所有的处理都用jsp,那么用户在页面一看F12,你怎么弄的这玩意不就都知道了吗。

    所有jsp和servlet是明确分工的:

    jsp:作为请求发起页面。

          作为请求结束页面

    servlet:请求中处理数据的环节。

    那jsp为什么能干servlet的活呢?

    这是因为jsp其实就是一个servlet,当jsp被第一次访问的时候,服务器会把jsp编译成java文件(这个java文件其实就是一个servlet类),然后再把java编译成.class,然后创建该类对象,最后调用他的service()方法,第二次请求统一jsp时,直接访问service()方法。

    服务器是怎么知道要把jsp变成servlet的?

    这也是需要明白的,在web.xml中进行配置,

    这样所有的jsp也就是*.jsp这个url路径进来,会找到servlet-name对应的servlet-class,也就是JspServlet,通过这个类就能把jsp转换成servlet。

    现在先看看一个jsp页面包含的东西再看看编译成servlet之后的代码。

    jsp=html+java脚本+jsp标签(指令)

    html就不用说了,来看看java脚本。

    jsp指令也有三种:

    jsp标签:

    两者的作用都是处理所需要的文件,但处理方式和处理时间不同。
    include指令标记是在编译阶段就处理所需要的文件,被处理的文件在逻辑和语法上依赖于当前的jsp页面,优点是执行速度快。
    include动作标记在jsp页面运行时才被处理的文件,被处理的文件在逻辑和语法上独立与当前的JSP页面,其优点是可以使用param子标记更灵活的处理所需要的文件,缺点是执行要慢一点



    自己写一个简单的jsp

    我们到tomcat服务器下的work文件夹里面找到这个目录看一下

    看到生成了两个servlet,说明动作标签是编译后再到一个页面上显示的。看看生成的这个NewFile.java,里面这个jsp页面到底变成了什么样

    /*
     * Generated by the Jasper component of Apache Tomcat
     * Version: Apache Tomcat/7.0.82
     * Generated at: 2017-11-15 02:16:31 UTC
     * Note: The last modified time of this file was set to
     *       the last modified time of the source file after
     *       generation to assist with modification tracking.
     */
    package org.apache.jsp;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    
    public final class NewFile_jsp extends org.apache.jasper.runtime.HttpJspBase
        implements org.apache.jasper.runtime.JspSourceDependent {
    
      private static final javax.servlet.jsp.JspFactory _jspxFactory =
              javax.servlet.jsp.JspFactory.getDefaultFactory();
    
      private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
    
      static {
        _jspx_dependants = new java.util.HashMap<java.lang.String,java.lang.Long>(1);
        _jspx_dependants.put("/b.jsp", Long.valueOf(1510712186569L));
      }
    
      private volatile javax.el.ExpressionFactory _el_expressionfactory;
      private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
    
      public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
        return _jspx_dependants;
      }
    
      public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
        if (_el_expressionfactory == null) {
          synchronized (this) {
            if (_el_expressionfactory == null) {
              _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
            }
          }
        }
        return _el_expressionfactory;
      }
    
      public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
        if (_jsp_instancemanager == null) {
          synchronized (this) {
            if (_jsp_instancemanager == null) {
              _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
            }
          }
        }
        return _jsp_instancemanager;
      }
    
      public void _jspInit() {
      }
    
      public void _jspDestroy() {
      }
    
      public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
            throws java.io.IOException, javax.servlet.ServletException {
    
        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("
    ");
          out.write("
    ");
          out.write("<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    ");
          out.write("<html>
    ");
          out.write("<head>
    ");
          out.write("<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    ");
          out.write("<title>Insert title here</title>
    ");
          out.write("</head>
    ");
          out.write("<body>
    ");
          out.write(" <p>我的jsp</p>
    ");
          out.write(" ");
     int a=0;
        while(a<5){
            a++;
        }  
       
          out.write("
    ");
          out.write("   ");
          out.print(a );
          out.write("
    ");
          out.write("   ");
          org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "a.jsp", out, false);
          out.write("
    ");
          out.write("   ");
          out.write("
    ");
          out.write("<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    ");
          out.write("<html>
    ");
          out.write("<head>
    ");
          out.write("<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    ");
          out.write("<title>Insert title here</title>
    ");
          out.write("</head>
    ");
          out.write("<body>
    ");
          out.write("<p>B被包含了</p>
    ");
          out.write("</body>
    ");
          out.write("</html>");
          out.write("
    ");
          out.write("</body>
    ");
          out.write("</html>");
        } catch (java.lang.Throwable t) {
          if (!(t instanceof javax.servlet.jsp.SkipPageException)){
            out = _jspx_out;
            if (out != null && out.getBufferSize() != 0)
              try {
                if (response.isCommitted()) {
                  out.flush();
                } else {
                  out.clearBuffer();
                }
              } catch (java.io.IOException e) {}
            if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
            else throw new ServletException(t);
          }
        } finally {
          _jspxFactory.releasePageContext(_jspx_page_context);
        }
      }
    }
    代码有点多,只看看这几点,首先是
    html代码在里面是怎么表示的,然后是java脚本是怎么显示的。

    然后第二点是看看

    这里定义的是什么呢?

    这里面就涉及到另一个东西了,那就是jsp的九大内置对象。

    这九大内置对象是不用在jsp中定义就可以直接使用的,现在知道为什么了么?在转换之后它会给你自动定义。来看看这九大内置对象

  • 相关阅读:
    Redis命令——小白学习 Redis 数据库日记(2017-06-13)
    Buses(形容城市公车交通情况)
    Things you need to prepare before going to airport
    bathroom words
    this指针
    友元
    成员对象和封闭类
    静态成员变量和静态成员函数、 常量对象和常量成员函数
    C++类
    shell选择语句、循环语句
  • 原文地址:https://www.cnblogs.com/wxw7blog/p/7837713.html
Copyright © 2020-2023  润新知