jsp文件能转换html吗,html怎么转换成jsp
眾所周知,每一個JSP頁面都會被Web容器編譯成一個Java類,供web容器調用,并且生成HTML葉面回饋給用戶。而了解其中的變異方法和規則,對我們學習JSP是非常有好處的,可以說學習好了這個編譯原理,就已經學習好了大部分的JSP知識,剩下的工作就只剩下熟記一些tablib和反復應用以使自己更加熟練而已了。。
先來看一下JSP頁面所對應的Class的基本結構。每一個JSP頁面都會被編譯成成如下的格式樣子,先給一個大致的印象,詳細的說明在后面。
public class My$jsp extends HttpJspBase { static {} public date$jsp() {} private static boolean _jspx_inited = false; public final void _jspx_init() throws org.apache.jasper.runtime.JspException {}; public void _JSP pageservice(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; String _value = null; try { if (_jspx_inited == false) { synchronized (this) { if (_jspx_inited == false) { _jspx_init(); _jspx_inited = true; } } } _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response, "", true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); // HTML // begin [file="/date.jsp";from=(0,0);to=(7,6)] out.write("\r\n\r\n\r\n" + "\r\n\r\n\r\n" + "The date is\r\n"); // end // begin [file="/date.jsp";from=(7,8);to=(7,57)] out.println((new java.util.Date()).toString()); // end // HTML // begin [file="/date.jsp";from=(7,59);to=(10,7)] out.write("\r\n \r\n \r\n"); // end } catch (Throwable t) { if (out != null && out.getBufferSize() != 0) { out.clearBuffer(); } if (pageContext != null) { pageContext.handlePageException(t); } } finally { if (_jspxFactory != null) { _jspxFactory.releasePageContext(pageContext); } } } }
我們可以清楚地看到,這里面最重要的函數就是pageservice,web容器在編譯好一個JSP類以后,
就申請這個類的對象,并且直接調用pageservice來獲得Response,最后返回給客戶。
作為細節,我們可以總結如下:
所有的JSP頁面翻譯出來的class,都從HttpJspBase繼承,并且命名為PageName$jsp
在第一次調用pageservice函數的時候,該class會進行一次初始化,而這個初始化函數是_jspx_init,如果我們想,我們還可以自定義這個函數,來實現JSP頁面的初始化。
這樣的代碼被轉換成什么了?
這樣的代碼被直接轉成Java代碼放到pageservice函數里面。
這樣的代碼被轉換成什么了?
這樣的代碼被翻譯成成員函數和成員變量,也就是說,這些聲明在JSP的生命周期內都是存在的。
HTML代碼呢?
html代碼直接被寫到PrintWriter里面回饋給用戶。非常的直接
為什么JSP頁面有那么多省寫方式,比如說session , out , page , context之類。
這都是在pageservice里面定義的臨時變量,具體的初始化可以參看上面的例子代碼,每一次調用JSP頁面,這些變量都會被重新初始化一次。當然我們也可以方便的聲明自己的變量。
省寫方式 這么理解? 這種省寫方式調用doSomething所得到的Object的toString(),然后直接寫到out里面。相當于:
out.print(object.doSomethiing().toString())
JavaBean 里面的scope定義了作用域范圍,這個范圍在這里的意思是?
這是Bean對象句柄保存的地方的意思。我們可以想象一下,一個page范圍的Bean只是pageservice里面的一個局部變量,當一次處理結束后,這個變量就會被Java虛擬機回收。而session變量。而request級別的Bean就應該是JSP頁面的成員變量。而session和application則不能在JSP頁面class里面保存,而應該保存在JSP頁面的調用對象里面。
關于命令,這個就太簡單了,只是一個一個的對應為response.setContentType()的語句而已。
關于JSP頁面轉向問題。這個語句被翻譯為getServletContext().getRequestDispatcher("/List.jsp").forward(req, res);語句。
遇到這個語句,JSP翻譯器就會把這個文件的代碼和現在文件的代碼混合然后一起編譯,生成JSP類。這個方法很好,可以讓我們統一文檔的樣式,比如說吧header寫成一個文件,,而把footer也寫成一個JSP ,并且在index.html里面把這兩個文件包含近來,這樣,不管Content怎么變,上下樣式都不會變,有利于樣式的統一。
總結
以上是生活随笔為你收集整理的jsp文件能转换html吗,html怎么转换成jsp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 15.7.2 正式版修复大量错误
- 下一篇: 电脑系统自带驱动如何卸载(如何卸载电脑的