JSP原理剖析

JSP原理剖析

1、定义

  1. JSP(Java Servet Page)即:java服务器端页面,也和Servlet一样,是用于开发动态Web的技术
  2. 最大的特点
    • 写JSP就像在写HTML
    • 区别:HTML只给用户提供静态的数据,而JSP页面中可以嵌入java代码为用户提供动态数据

2、JSP原理

  1. JSP怎么执行的

    • 服务器内部工作

      • Tomcat中有一个work目录

      • IDEA中使用Tomcat时,会在IDEA的Tomcat中产生一个work目录,即在

        C:\Users\夕‘风\.IntelliJIdea2019.3\system\tomcat\Unnamed_webapp\work\Catalina\localhost\s6\org\apache\jsp
        
      • 发现jsp页面转变为了java程序

        JSP原理剖析

      • 所以浏览器向服务器发送请求,不管访问什么资源其实都是在访问Servlet,jsp最终被转换为java类

      • jsp本质上就是一个Servlet

      • index_jsp.java源码分析

        //初始化
        public void _jspInit() {
            
        }
        //销毁
        public void _jspDestroy() {
            
        }
        //JSPService(JSP服务)
        public void _jspService(HttpServletRequest request,HttpServletResponse response){
            
        }
        
      • public void _jspService()分析

        1. 判断请求

          if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
          response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
          return;
          }
          
        2. 内置一些对象

        final javax.servlet.jsp.PageContext pageContext;           //页面上下文
        javax.servlet.http.HttpSession session = null;             //Session
        final javax.servlet.ServletContext application;            //Servlet中的ServletContext改名为application
        final javax.servlet.ServletConfig config;                  //config(配置)
        javax.servlet.jsp.JspWriter out = null;                    //out
        final java.lang.Object page = this;                        //page:当前页
        HttpServletRequest request                                 //请求
        HttpServletResponse response                               //响应
        
        1. html页面输出前的代码

          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页面中直接使用

        2. 如果在jsp页面中写的java代码会被原封不动的写入到:xxx_jsp.java中,而写的html代码则会被转换为如:

          out.write("<html>\r\n");
          
上一篇:A Survey on Multi-Agent Reinforcement Learning Methods for Vehicular Networks


下一篇:EL表达式内置对象