SP是Servlet 技術(shù)的擴展,所有的jsp文件都會被翻譯為一個繼承HttpServlet的類,也就是說jsp最終也是一個Servlet ,這個Servlet對外提供服務(wù)。
Servlet 和jsp最主要的不同點在于jsp側(cè)重于視圖,Servlet 主要用于控制邏輯。
Servlet 的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來,Servlet如果要實現(xiàn)HTML的功能,必須使用Writer輸出對應(yīng)的HTML,比較麻煩。而jsp的情況是Java和HTML可以組合成一個擴展名為 .jsp 的文件,做界面展示比較方便而嵌入邏輯比較復雜。
SP:Java Server Pages。JSP是一種網(wǎng)頁的編碼格式,不同于HTML的是JSP中是由 HTML中的標簽指令 和 Java邏輯代碼 拼湊而成, 其中的Java代碼類似于JavaScript中的邏輯代碼, 但相對比來說JSP中的Java代碼更方便閱讀和書寫.
當JSP頁面被運行時,WEB容器會把請求交給JSP引擎處理,會將JSP翻譯成一個_jspServlet,然后按照Servlet的調(diào)用方式來進行調(diào)用,
瀏覽器向服務(wù)器發(fā)請求,不管訪問的是什么資源,其實都是在訪問Servlet,所以當訪問一個jsp頁面時,其實也是在訪問一個Servlet,服務(wù)器在執(zhí)行jsp的時候,首先把jsp翻譯成一個Servlet,所以我們訪問jsp時,其實不是在訪問jsp,而是在訪問jsp翻譯過后的那個Servlet,
Tomcat在Web中的作用:
Tomcat是Web中的容器,
當客戶在Web服務(wù)器中輸入請求的時候, 如果請求的動態(tài)頁面, 那么Web服務(wù)器會創(chuàng)建一個Servlet來處理, Servlet就是Java代碼, 只是在服務(wù)器端的Java代碼, Servlet通過配置文件來攔截客戶所發(fā)出的請求, 并進行相應(yīng)的處理, 最后反饋到客戶端.
在這一系列的請求中,Web服務(wù)器是如何創(chuàng)建出Servlet來對請求進行處理? 而Tomcat的作用就是幫助Web服務(wù)器來創(chuàng)建Servlet的
Tomcat是應(yīng)用(java)服務(wù)器,它只是一個Servlet容器,是Apache的擴展,處理動態(tài)頁面的部分
Tomcat各個文件夾的含義
當我們通過瀏覽器訪問index.jsp時,服務(wù)器首先將index.jsp翻譯成一個index_jsp.class,在Tomcat服務(wù)的work\Catalina\localhost\項目名\org\apache\jsp 目錄下可以看到index_jsp.class的源代碼文件index_jsp.java,
index_jsp這個類是繼承 org.apache.jasper.runtime.HttpJspBase這個類的,通過查看Tomcat服務(wù)器的源代碼,可以知道在apache-tomcat-6.0.20-src\java\org\apache\jasper\runtime目錄下存HttpJspBase這個類的源代碼文件
HttpJspBase 類是繼承 HttpServlet 的,所以 HttpJspBase 類是一個 Servlet ,而 index_jsp 又是繼承 HttpJspBase類的,所以index_jsp類也是一個Servlet,所以當瀏覽器訪問服務(wù)器上的index.jsp頁面時,其實就是在訪問index_jsp這個Servlet,index_jsp這個Servlet使用_jspService這個方法處理請求。
1:jsp中的代碼是由 Java代碼 和 HTML 代碼組成的 但是兩種不同的代碼是如何實現(xiàn)他們的作用的?
在客戶端發(fā)出請求時(請求的是動態(tài)代碼) 但是客戶端卻只能看到HTML代碼, Java代碼是客戶端看不到的
原因是: 請求的JSP頁面中,所有的代碼是通過了Web服務(wù)器(在Tomcat下)編譯后的Servlet代碼, 在jsp中編寫的java代碼和html代碼都會被翻譯到_jspService方法中去,在jsp中編寫的java代碼會原封不動地翻譯成java代碼,如<%out.print("HelloJsp");%>直接翻譯成out.print("Hello Jsp");,而HTML代碼則會翻譯成使用out.write("<html標簽>\r\n");的形式輸出到瀏覽器。在jsp頁面中編寫的html排版標簽都是以out.write("<html標簽>\r\n");的形式輸出到瀏覽器,瀏覽器拿到html代碼后才能夠解析執(zhí)行html代碼。
當執(zhí)行_jspService方法處理請求時,就會執(zhí)行在jsp編寫的java代碼了,所以Jsp頁面中的java代碼服務(wù)器是通過調(diào)用_jspService方法處理請求時執(zhí)行的。(_jspService中的Java代碼是實現(xiàn)動態(tài)頁面的邏輯基礎(chǔ))
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。