JSP端服務器端頁面技術
JSP:Java Server Pages Java服務器頁面,發(fā)布的項目翻譯到work目錄中

jsp腳本:
1、<%java代碼%> ----- 內(nèi)部的java代碼翻譯到service方法的內(nèi)部
2、<%=java變量或表達式> ----- 會被翻譯成service方法內(nèi)部out.print()
3、<%!java代碼%> ---- 會被翻譯成servlet的成員的內(nèi)容
jsp注釋:? 不同的注釋可見范圍是不同
1、Html注釋:<!--注釋內(nèi)容--> ---可見范圍 jsp源碼、翻譯后的servlet、頁面顯示html源碼
2、java注釋://單行注釋? /*多行注釋*/ --可見范圍 jsp源碼 翻譯后的servlet
3、jsp注釋:<%--注釋內(nèi)容--%> ----- 可見范圍 jsp源碼可見
JSP執(zhí)行原理(本質是servlet)
jsp第一次訪問的時候,會被WEB容器翻譯成servlet,否則在work中查詢對應的.java文件
第一次訪問-->helloServlet.jsp-->helloServlet_jsp.java--->編譯運行
.jsp的訪問通過web.xml配置訪問到org.apache.jasper.servlet.JspServlet
JSP指令
指導jsp翻譯和運行的命令,jsp包括三大指令:
1、page指令 --- 屬性最多的指令(實際開發(fā)中page指令默認)
屬性最多的一個指令,根據(jù)不同的屬性,指導整個頁面特性
格式:<%@ page 屬性名1= "屬性值1" 屬性名2= "屬性值2" ...%>
常用屬性如下:
1、language:jsp腳本中可以嵌入的語言種類
2、pageEncoding:當前jsp文件的本身編碼---內(nèi)部可以包含contentType
3、contentType:response.setContentType(text/html;charset=UTF-8)
4、session:是否jsp在翻譯時自動創(chuàng)建session
5、import:導入java的包
6、errorPage:當前頁面出錯后跳轉到哪個頁面
7、isErrorPage:當前頁面是一個處理錯誤的頁面
2、include指令
頁面包含(靜態(tài)包含)指令,可以將一個jsp頁面包含到另一個jsp頁面中,便于后期的維護。
格式:<%@ include file="被包含的文件地址"%>

3、taglib指令
在jsp頁面中引入標簽庫(jstl標簽庫、struts2標簽庫)
格式:<%@ taglib uri="標簽庫地址" prefix="前綴"%>
使用page執(zhí)行JSP編碼問題
1、pageEncoding:當前jsp文件的本身編碼---內(nèi)部可以包含contentType
2、contentType:response.setContentType(text/html;charset=UTF-8)
使用page執(zhí)行導入JSP使用的類
1、import:導入java的包
列舉JSP內(nèi)置對象
名稱 類型 描述
out javax.servlet.jsp.JspWriter 用于頁面輸出
request javax.servlet.http.HttpServletRequest 得到用戶請求信息,
response javax.servlet.http.HttpServletResponse 服務器向客戶端的回應信息
config javax.servlet.ServletConfig 服務器配置,可以取得初始化參數(shù)
session javax.servlet.http.HttpSession 用來保存用戶的信息
application javax.servlet.ServletContext 所有用戶的共享信息
page java.lang.Object 指當前頁面轉換后的Servlet類的實例
pageContext javax.servlet.jsp.PageContext JSP的頁面容器
exception java.lang.Throwable 表示JSP頁面所發(fā)生的異常,在錯誤頁中才起作用,只有isErrorPage存在
1、out對象
out的類型:JspWriter
out作用就是想客戶端輸出內(nèi)容----out.write()
out緩沖區(qū)默認8kb 可以設置成0 代表關閉out緩沖區(qū) 內(nèi)容直接寫到respons緩沖器
最終返回到response緩沖區(qū)中,將out對象刷新到response緩沖區(qū)中。

2、pageContext對象
jsp頁面的上下文對象,作用如下:
page對象與pageContext對象不是一回事
1、pageContext是一個域對象
setAttribute(String name, Object obj)
getAttribute(String name)
removeAttrbute(String name)
2、pageContext可以向指定的其他域中存取數(shù)據(jù)(維護其他域對象)
setAttribute(String name, Object obj, int scope)
getAttribute(String name, int scope)
removeAttrbute(String name, int scope)
findAttribute(String name)
---依次從pageContext域,request域,session域,application域中獲取屬性,在某個域中獲取后將不在向后尋找
<%=pageContext.findAttribute("name")? %>
3、可以獲得其他8大隱式對象
例如: pageContext.getRequest()
pageContext.getSession()
列舉JSP四大作用域
page域:當前jsp頁面范圍
request域:一次請求
session域:一次會話
application域:整個web應用
jsp標簽(動作)
1. 頁面包含(動態(tài)包含):<jsp:include page="被包含的頁面"/>
2. 請求轉發(fā):<jsp:forward page="要轉發(fā)的資源" />
比較靜態(tài)包含和動態(tài)包含
