JSP的全稱是javaserverpage,java服務頁面。是提供java服務的頁面~
那么和Servlet有什么區別呢?JSP的頁面既可以寫java代碼~也可以寫html代碼哦??!
JSP的特點JSP的作用:JSP是主要用來開發動態資源的技術~
那么JSP怎么運行呢?我這里交給Tomcat服務器運行了~
Jsp運行的目錄%tomcat%/work是tomcat服務器運行jsp頁面的臨時目錄。
那么我們來看看JSP的原理,JSP是怎么運行的~我們用瀏覽器輸入:http://localhost:8080/day12/01.hello.jsp
第一次訪問時: 找到文件-翻譯-編譯-構造實例-調用方法
1)在day12web應用下找到01.hello.jsp文件
2)tomcat服務器將01.hello.jsp文件翻譯成java源文件。例如01.hello_jsp.java
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的原理問題:Jsp文件翻譯成的java源文件是什么類??
publicfinalclass hello extends HttpJspBase
publicabstractclassorg.apache.jasper.runtime.HttpJspBaseextends HttpServletimplements HttpJspPage{
繼承自HttpServlet?。。?/p>
結論:Jsp就是一個servlet??!
注意
1)Jsp文件的html代碼,通過out.writer()方法寫出到瀏覽器。
2)Jsp文件的java代碼,直接拷貝到java源文件中,通過_jspService()方法執行。
那么我們下面來體驗一下JSP吧~
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模板Jsp模塊:就是jsp頁面中的html代碼
Jsp表達式例如:<%=x%>表達式<%=x*y+k-n%>
這樣寫的表達式,翻譯后實質上是用過out.PRint()來輸出。
格式:<%=變量或表達式計算%>
作用:用于向瀏覽器輸出變量的值或表達式計算的結果
注意:
1)表達式的原理就是通過out.print()方法向瀏覽器輸出內容。
2)表達式后面不能帶分號。
Jsp腳本 也就是html中的java代碼格式:<%java代碼%>
作用:執行java代碼
注意:
1)可以寫多行java代碼
2)原理是把腳本代碼原封不動拷貝到_jspService方法中執行。
3)jsp腳本可以穿插html代碼結合使用
Jsp聲明聲明里面的 變量和方法是成員變量和成員方法格式:<%!%>
作用:聲明jsp的變量和方法
注意:
1)Jsp腳本聲明的變量是局部變量,Jsp聲明的變量是成員變量。
2)Jsp腳本中不能聲明方法的,Jsp聲明的方法是成員方法。
3)jsp聲明的方法不能和翻譯成的java類的方法重復。
Jsp注釋jsp注釋只會出現在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三大指令一)taglib指令(這個我們以后再說)主要用于導入jsp標簽庫
二)include指令include指令----》把其它頁面一并翻譯到java文件里,這個頁面不需要具備html,body,head標簽,因為它會被翻譯到jsp文件對應的html的body內作用:主要用于包含其他頁面
格式:<%@inculdefile="被包含的頁面"%>
注意:
1)include指令原理:包含與被包含的頁面內容先合并翻譯到一個java文件中,再編譯運行。(先合并再翻譯),這種包含叫靜態包含。(源碼包含)
2)如果使用include指令包含,那么被包含的頁面不需要使用全局的html標簽(例如,html,body,head)
page指令作用:主要用于告訴服務器如何翻譯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>
新聞熱點
疑難解答