JSP(介紹,語法,指令)
什麽是JSP
JSP全名為Java Server Pages,java服務器頁面。JSP是一種基於文本的程序,其特點就是HTML和Java代碼共同存在!
JSP的工作原理
其實JSP在第一次被訪問的時候會被編譯為HttpJspPage類(該類是HttpServlet的一個子類)
編譯過程是這樣子的:瀏覽器第一次請求1.jsp時,Tomcat會將1.jsp轉化成1_jsp.java這麽一個類,並將該文件編譯成class文件。編譯完畢後再運行class文件來響應瀏覽器的請求。
以後訪問1.jsp就不再重新編譯jsp文件了,直接調用class文件來響應瀏覽器。當然了,如果Tomcat檢測到JSP頁面改動了的話,會重新編譯的。
- 既然JSP是一個Servlet,那JSP頁面中的HTML排版標簽是怎麽樣被發送到瀏覽器的?我們來看下上面1_jsp.java的源碼就知道了。原來就是用write()出去的罷了。說到底,JSP就是封裝了Servlet的java程序罷了。
- JSP頁面的代碼服務器是怎麽執行的?再看回1_jsp.java文件,java代碼就直接在類中的service()中。
JSP比Servlet更方便更簡單的一個重要原因就是:內置了9個對象!內置對象有:out、session、response、request、config、page、application、pageContext、exception
JSP生命周期
JSP也是Servlet,運行時只有一個實例,JSP初始化和銷毀時也會調用Servlet的init()和destroy()方法。另外,JSP還有自己初始化和銷毀的方法
public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); }public void _jspDestroy() { }
JSP的語法
JSP代碼可以分為兩部分:
模板數據:就是HTML代碼
元素:JSP頁面中的java代碼、JSP指令、JSP標簽
JSP腳本
JSP的腳本就是JSP頁面中的java代碼,也叫做scriptlet。JSP的腳本必須使用<%%>括起來,不然會被當成是模板數據的!
JSP腳本有三種方式
<%%>【定義局部變量,編寫語句】---------------<jsp:scriptlet>行為代替
<%!%>【定義類或方法,但是沒人這樣用!】
<%=%>(也稱之為表達式輸出)【輸出各種類型的變量,int、double、String、Object等】
JSP註釋
<%--這是JSP註釋--%>
<%--%>
JSP指令
JSP指令用來聲明JSP頁面的相關屬性,例如編碼方式、文檔類型等等
JSP指令的語法
<%@指令 屬性名="值" %>
page指令
page指令常見屬性
-
-
- language="java"
- extends="package.class"
- import="{package.class | package.*}, …"
- session="true | false"
- buffer="none | 8kb | sizekb"
- autoFlush="true | false"
- isThreadSafe="true | false"
- info="text"
- errorPage="relative_url"
- 錯誤跳轉友好頁面,屬於服務器跳轉
- 可以在web.xml文件中全局設置錯誤頁,只要發生了404錯誤或者空指針異常的錯誤都會跳轉到error.jsp頁面上
-
<error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/error.jsp</location> </error-page>
- isErrorPage="true | false"
- 錯誤頁面本誤
- contentType="mimeType ;charset=characterSet " | "text/html ; charset=ISO-8859-1"
- contentType 不僅僅可以指定以text/html的方式顯示,還可以使用其他的形式顯示出來。在conf/web.xml文件中可以查詢出來
- pageEncoding="characterSet | ISO-8859-1"
- isELIgnored="true | false"
-
include指令
include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
<%@include file="head.jsp" %>
taglib指令
JSP支持標簽技術,要使用標簽技術就先得聲明標簽庫和標簽前綴。taglib指令就是用來指明JSP頁面內使用標簽庫技術。
JSP(介紹,語法,指令)