javaweb開發之jsp開發


    一、初始jsp

    在web開發中前台頁面需要使用html,css和js渲染頁面展示給用戶,之前我們學習了Servlet知道如果想要向前台輸出內容需要使用HttpServletResponse對象獲取打印流然后在一行一行的輸出html標簽,這對於開發者來說簡直就是噩夢。針對這種情況SUN公司定義了一種用於開發動態web資源的技術也就是jsp。JSP全稱是Java Server Pages其本質就是servlet但是用戶可以在jsp頁面里直接寫html代碼也可以jsp頁面中嵌套java代碼。jsp的出現大大提高了人們使用java開發軟件的效率。

    二、jsp的運行原理

    jsp的本質就是Servlet。瀏覽器發送請求到服務器也就是tomcat其本質都是在訪問Servlet,因為tomcat訪問所有的資源,都是用Servlet來實現的。當我們第一次訪問jsp時,服務器會把jsp文件轉化為一個servlet然后編譯成class字節碼文件后再執行。jsp被轉譯為一個java文件后繼承了org.apache.jasper.runtime.HttpJspBase這個類,而HttpJspBase 繼承了HttpServlet,所以是jsp的本質就是一個servlet。因為jsp在用戶第一次訪問的時候需要先轉譯為java文件在轉譯為class字節碼文件,所以jsp頁面在用戶第一次訪問的時候會比較的慢,當用戶第二次訪問jsp頁面時是直接訪問的class文件所以速度會比第一次訪問快。

圖片來源地址:https://upload-images.jianshu.io/upload_images/10077403-8d880f94e33ddbae.png?imageMogr2/auto-orient/strip|imageView2/2/w/425/format/webp

    三、jsp內置的九大對象

    在jsp中內置了九大對象,查看jsp轉譯后的java文件得知,這九大內置對象分別是:request、response、session、application、out、pagecontext、config、page、exception。代碼如下:

 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();

其中request,response,session對象對應的就是HttpServletRequest,HttpServletResponse,HttpSession對象,application對象就是ServletContext對象,config對象就是ServletConfig對象,pageContext 對象表示當前頁面的上下文,通過這個對象可以獲取JSP頁面的out、request、reponse、session、application 等對象,page對象表示當前jsp頁面本身。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM