JSP運行原理
1.客戶端訪問zhangpeng.jsp
2.服務器讀取zhangpeng.jsp內容到內存
3.服務器根據zhangpeng.jsp內容生成servlet程序--存在tomcat/work下
4.servlet編譯運行
圖解:
JSP中的代碼都會被翻譯至servlet中的_jspService()方法中
翻譯規則:
1.JSP中HTML翻譯成out.write()
2.JSP中java代碼不會被翻譯,會原樣不動的放進_jspService()中
JSP程序的翻譯過程
JSP腳本元素
1.聲明<!%%> 將被翻譯成servlet類成員變量和方法以及內部類等
2.表達式<%=%> 用於向頁面輸出內容 將被翻譯成servlet的out.print()方法
3.代碼塊 <%%> 可以編寫任何的java程序。代碼塊可以和HTML嵌套使用
JSP和servlet的關係
JSP和servlet都是動態網頁技術,只是分工不同。
有人恰當的比喻:servlet就是嵌入HTML的java文件,JSP就是嵌入java的HTML文件
JSP技術的企業最佳實踐
生成HTML內容
JSTL,全稱(jsp standard Taglib Liberary) JSP標準標籤庫
JSTL有什麼用?
簡化頁面<%%>與HTML嵌套寫法,說白了就是簡化JSP開發。
--------------------------------------------------------------------------------------------------------------------------------
JSP基本語法
JSP腳本元素
JSP頁面註釋
JSP指令元素
JSP內置對象
JSP標籤
JSP四種數據範圍
JSP中的pageEncoding和contentType的作用
pageEncoding
在編寫階段,當我們編寫完jsp文件時,點擊"save"時,jsp將保存在硬盤,pageEncoding就是JSP文件
保存在硬盤上的編碼格式。
contentType
用來對servlet生成的HTML頁面進行編碼,同時指定瀏覽器查看內容的編碼。
圖解:
錯誤友好頁面的設置
當頁面發生錯誤時不應該給用戶看到含有代碼的錯誤頁面,應該給一個友好的頁面。
通過errorPage 和 isErrorPage控制JSP頁面發生錯誤時的跳轉
errorPage在發生錯誤的jsp中設置發生錯誤時跳轉的頁面
isErrorPage設置true ,就是錯誤頁面本身,只有設置了這個屬性,才能使用jsp的內置對象
excetion打印出錯誤信息。
這種方式的配置只能處理一個頁面的錯誤,處理多個頁面的時候需要每個頁面都要
做如上的配置。
實際開發中,通常用這個方法。
web.xml中配置
<error-page>
<error-code>500</error-code>
<location>/zhangpeng/500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/zhangpeng/404.jsp</location>
</error-page>
這種方式能處理所有頁面的錯誤,同時它不僅可以處理500,還可以處理404.
JSP 的include指令
用來靜態包含頁面---將頁面的公共部分提取出來,通過include完成頁面的佈局
include包含目標頁面的整個內容,被包含頁面不需要一個完整的HTML,只要編寫HTML片段就可以了,同時保留它的編碼。
靜態包含的原理:
index.jsp-------翻譯------index_jsp.java
在翻譯的過程中,遇到這句時<% include file="/demo6/logo.jsp"%>.翻譯logo.jsp將p翻譯後的servlet內容嵌入到index_jsp中。
靜態包含:包含include中的文件的源代碼,將兩者的源代碼合併至一起,結果就是生成一個servlet。
動態包含的原理:
taglib指令,用來在jsp中引用標籤庫文件的。
JSP9大內置對象
JSP Servlet
page ---this(HttpServlet) 代表當前jsp生成的servlet對象
pageContext ---PageContext 頁面上下文對象 1.向page範圍存儲數據 2..可以獲得另外8個內置對象
request ---HttpServletRequest
session ---HttpServletSession
application ---ServletContext
response ---HttpServletResponse
out ---JspWriter
config ---ServletConfig
exception ---Throwable
應用上下文:可以獲取應用的所有信息
頁面上下文可以獲取頁面中的所有信息
servlet上下文可以獲取servlet生命週期中的所有信息
out對象的原理,和response.getWriter()有什麼區別
兩者都是向瀏覽器輸出內容
但是後者輸出的內容在前者的內容之前
什麼是內置對象?
JSP翻譯爲servlet代碼時候,有些對象默認在servlet中已經創建好的,這類對象可以直接在JSP中使用。