JSP的全稱是java server page, java服務頁面。是提供java服務的頁面~html
那麼和Servlet有什麼區別呢?JSP的頁面既能夠寫java代碼~也能夠寫html代碼哦!!java
JSP的做用:JSP是主要用來開發動態資源的技術~web
那麼JSP怎麼運行呢?我這裏交給Tomcat服務器運行了~apache
%tomcat%/work是tomcat服務器運行jsp頁面的臨時目錄。瀏覽器
咱們用瀏覽器輸入: http://localhost:8080/day12/01.hello.jsptomcat
第一次訪問時: 找到文件-翻譯-編譯-構造實例-調用方法服務器
1)在day12web應用下找到01.hello.jsp文件session
2)tomcat服務器將01.hello.jsp文件翻譯成java源文件。例如 01.hello_jsp.javajsp
3)tomcat服務器將java源碼編譯成class字節碼, 例如 01.hello_jsp.class工具
4)tomcat服務器構造01.hello_jsp類的實例,調用類中的方法。
第n次訪問時: 已經存在了jsp文件對應的class對象的一個實例,直接用該實例調用方法
tomcat服務器再也不翻譯和編譯jsp文件
注意: jsp文件被修改,或jsp臨時文件被刪除,服務器都會從新翻譯和編譯jsp文件。
1)當修改了jsp文件時的第一次訪問,從新再翻譯和編譯jsp文件。
2)當刪除%tomcat%/work的jsp臨時文件的第一次訪問,從新再翻譯和編譯jsp文件。
問題: Jsp文件翻譯成的java源文件是什麼類??
public final class hello extends HttpJspBase
public abstract class org.apache.jasper.runtime.HttpJspBase extends HttpServlet implements HttpJspPage {
繼承自HttpServlet!!!
結論: Jsp就是一個servlet!!
注意
1) Jsp文件的html代碼,經過out.writer()方法寫出到瀏覽器。
2) Jsp文件的java代碼,直接拷貝到java源文件中,經過_jspService()方法執行。
那麼咱們下面來體驗一下JSP吧~
需求: 用jsp向瀏覽器輸出當前時間。下面是核心代碼:
<body> <h1><font color='red'>歡迎來到此頁面</font></h1> <% SimpleDateFormat simaple = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String date = simaple.format(new Date()); request.setAttribute("aa", "123"); %> 當前的時間是:<%=date %> <% String ip = request.getRemoteAddr(); out.write(ip); %> </body>
而後用瀏覽器直接訪問這個jsp,就能看到如下的效果了~
體驗完JSP,是否是很本身寫一個體驗一下呢?下面咱們就來學習JSP的語法吧!
Jsp模塊:就是jsp頁面中的html代碼
例如:<%=x%> 表達式<%=x*y+k-n%>
這樣寫的表達式,翻譯後實質上是用過out.print()來輸出。
格式: <%=變量或表達式計算%>
做用: 用於向瀏覽器輸出變量的值或表達式計算的結果
注意:
1)表達式的原理就是經過out.print()方法向瀏覽器輸出內容。
2)表達式後面不能帶分號。
格式:<% java代碼 %>
做用: 執行java代碼
注意:
1)能夠寫多行java代碼
2)原理是把腳本代碼原封不動拷貝到_jspService方法中執行。
3)jsp腳本能夠穿插html代碼結合使用
格式: <%! %>
做用: 聲明jsp的變量和方法
注意:
1)Jsp腳本聲明的變量是局部變量,Jsp聲明的變量是成員變量。
2)Jsp腳本中不能聲明方法的,Jsp聲明的方法是成員方法。
3)jsp聲明的方法不能和翻譯成的java類的方法重複。
格式: <%-- jsp註釋 --%>
注意:
html的註釋會翻譯到java源代碼中,會被執行的。
jsp的註釋不會翻譯到java源代碼中,不會被執行的。
看完前面的介紹那麼久寫一段代碼來體現下吧~
<body> <%--模板 --%> <h1><font color='red'>歡迎來到此頁面</font></h1> <%--腳本 --%>> <% SimpleDateFormat simaple = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String date = simaple.format(new Date()); request.setAttribute("aa", "123"); %> <%--表達式 --%>> 當前的時間是:<%=date %> <% String ip = request.getRemoteAddr(); out.write(ip); out.write(s); %> <%--聲明--%> <%! String s = "hello"; %> </body>
而後看看輸出的結果把~:
上述就是JSP的基本語法,除了基本語法,咱們還須要學習JSP的三大指令。
主要用於導入jsp標籤庫
做用: 主要用於包含其餘頁面
格式:<%@inculde file="被包含的頁面"%>
注意:
1)include指令原理: 包含與被包含的頁面內容先合併翻譯到一個java文件中,再編譯運行。(先合併再翻譯),這種包含叫靜態包含。(源碼包含)
2)若是使用include指令包含,那麼被包含的頁面不須要使用全局的html標籤(例如,html,body,head)
做用: 主要用於告訴服務器如何翻譯jsp文件,主要有下面幾種設置:
<%@ page language="java" --告訴服務器用什麼語言翻譯此jsp頁面 import="java.util.*" --導包,在jsp頁面編寫java須要手動導包。除了java.lang包覺得都須要導入。多個包之間用逗號分隔
buffer="8kb" --jsp頁面緩衝區大小
session="true" -- 是否開啓session功能
isELIgnored="false" --是否忽略EL表達式
關於jsp文件的編碼: pageEncoding="utf-8" --告訴服務器用什麼編碼翻譯此jsp文件 contentType="text/html; charset=utf-8" --服務器發送給瀏覽器數據的編碼 注意: 1)contentType屬性的編碼看pageEncoding編碼 2)在開發工具中,保存jsp文件的編碼自動根據pageEncoding的編碼改變。 結論: 1)在開發工具中,jsp文件的編碼問題只須要設置pageEncoding便可! 2)若是用記事本開發jsp文件,要注意保存jsp文件的編碼。 異常相關的: errorPage="" -指定錯誤處理頁面,當頁面出現錯就會轉跳到錯誤頁面。 isErrorPage="" --指定當前頁面是不是錯誤處理頁面。 true:是,那麼可使用exception的內置對象,使用它的一些方法。 false:不是。不可使用exception對象。 全局異常處理:在web.xml中加上配置
<!-- 配置全局異常 --> <error-page> <error-code>500</error-code> <location>/common/500.jsp</location> 505錯誤都會轉跳到這個頁面 </error-page> <error-page> <error-code>404</error-code> <location>/common/404.html</location> 404錯誤都會轉跳到這個頁面 </error-page>