JSP基礎
JSP(JavaServer Pages) 是與 PHP、ASP、ASP.NET 等類似的腳本語言,JSP是為了簡化Servlet的處理流程而出現的替代品,早期的Java EE因為只能使用Servlet來處理客戶端請求而顯得非常的繁瑣和不便,使用JSP可以快速的完成后端邏輯請求。
正因為在JSP中可以直接調用Java代碼來實現后端邏輯的這一特性,黑客通常會編寫帶有惡意攻擊的JSP文件(俗稱WebShell)來實現對服務器資源的惡意請求和控制。
現代的MVC框架(如:Spring MVC 5.x)已經完全拋棄了JSP技術,采用了模板引擎(如:Freemark)或者RESTful的方式來實現與客戶端的交互工作,或許某一天JSP技術也將會隨著產品研發的迭代而徹底消失。
JSP 三大指令
<%@ page ... %>定義網頁依賴屬性,比如腳本語言、error頁面、緩存需求等等<%@ include ... %>包含其他文件(靜態包含)<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>引入標簽庫的定義
JSP 表達式(EL)
EL表達式(Expression Language)語言,常用于在jsp頁面中獲取請求中的值,如獲取在Servlet中設置的Attribute:${名稱}。使用EL表達式可以實現命令執行,我們將會在后續EL表達式章節中詳細講解。
JSP 標準標簽庫(JSTL)
JSP標準標簽庫(JSTL)是一個JSP標簽集合,它封裝了JSP應用的通用核心功能。
JSTL支持通用的、結構化的任務,比如迭代,條件判斷,XML文檔操作,國際化標簽,SQL標簽。 除了這些,它還提供了一個框架來使用集成JSTL的自定義標簽。
JSP 九大對象
從本質上說 JSP 就是一個Servlet,JSP 引擎在調用 JSP 對應的 jspServlet 時,會傳遞或創建 9 個與 web 開發相關的對象供 jspServlet 使用。 JSP 技術的設計者為便于開發人員在編寫 JSP 頁面時獲得這些 web 對象的引用,特意定義了 9 個相應的變量,開發人員在JSP頁面中通過這些變量就可以快速獲得這 9 大對象的引用。
如下:
| 變量名 | 類型 | 作用 |
|---|---|---|
| pageContext | PageContext | 當前頁面共享數據,還可以獲取其他8個內置對象 |
| request | HttpServletRequest | 客戶端請求對象,包含了所有客戶端請求信息 |
| session | HttpSession | 請求會話 |
| application | ServletContext | 全局對象,所有用戶間共享數據 |
| response | HttpServletResponse | 響應對象,主要用于服務器端設置響應信息 |
| page | Object | 當前Servlet對象,this |
| out | JspWriter | 輸出對象,數據輸出到頁面上 |
| config | ServletConfig | Servlet的配置對象 |
| exception | Throwable | 異常對象 |
Java Web安全