本期小編將帶你走進JSP,學習到Java的前后端交互的時候,我們會接觸到JSP,今天我們來學習一下JSP的一些內容: 1 JSP的由來 1.1 為什么有JSP規(guī)范 Servlet技術產生以后,在使用時最麻煩的是使用大量的out.print語句輸出頁面。這樣的形式在系統(tǒng)變更、維護、預覽效果時都不能方便快捷的完成任務,于是推出JSP這種技術,用來將Servlet中負責顯示的語句抽取出來。 class xxxServlet{ ...service(){ ... out.println(''); ... out.println(''); ... 1.2什么是JSP Sun公司制定的一種服務器端動態(tài)頁面技術的組件規(guī)范。 JSP是一個以“. jsp”為后綴的文件,在該文件中,主要是HTML和少量的Java代碼。JSP文件會被容器轉換成一個Servlet類,然后執(zhí)行。 < html=""> java代碼... 2. JSP編寫規(guī)范 2.1 如何編寫JSP step1:寫一個以” .jsp”為后綴的文件 step2:在該文件中可以包含如下內容: - HTML(CSS、JavaScript)- 注釋- Java代碼- 指令- 隱含對象 2.2 JSP頁面中的HTML 代碼 作用:控制頁面在瀏覽器中顯示的效果 轉譯成Servlet時的規(guī)則:成為Servlet中的service()方法的out.write語句 2.3 JSP頁面中的注釋 語法: 1) HTML注釋,注釋中的內容如果包含Java代碼,這些Java代碼,會被忽略 2)<%-- 注釋內容 --%> JSP特有的注釋,如果注釋的內容中出現(xiàn)Java代碼,會被忽略 2.4 JSP頁面中的Java代碼 JSP頁面中的Java代碼,包含以下三種:
編寫位置:頁面的任意位置 作用:控制頁面中可變內容的產生 2.5 JSP表達式 語法規(guī)則:<%= ... ... %> 合法內容: 變量、變量加運算符組合的表達式、有返回值的方法 轉譯成Servlet時的規(guī)則: 在service( )方法中用out.print語句輸出該變量、表達式、方法的值 Eg: The square root of 5 is <%=Math.sqrt(5)%> 轉換成 out.write(' The square root of 5 is ');out.write(Math.sqrt(5));out.write(' ');2.6 JSP小腳本 語法規(guī)則:<% ... ... %> 合法內容:能夠寫在方法里的Java代碼片段都可以作為小腳本 轉移成Servlet時的規(guī)則:原封不動成為Servlet類的service( )方法里面的一段代碼 Eg: <% String name = request.getParameter('name'); if(name!=null && !name.equals('')){%> Your name is <%=name %> <% }%>轉換成如下代碼插入到service方法中 String name = request.getParameter('name'); if(name!=null && !name.equals('')){ out.write(' Your name is'); out.print(name); out.write(' ');前幾天有私信我要Java的學習資料,我連夜整理了一些有深度的Java教程和參考資料,從入門到高級的都有,文件已經打包好了,正在學習Java的同學可以免費下載學習學習。文件下載方式:點擊我的頭像,關注后私信回復'資料”即可下載。首先把代碼擼起來!首先把代碼擼起來!首先把代碼擼起來!重要的事說三遍,哈哈。 “編程是門手藝活”。什么意思?得練啊。 2.7 JSP聲明 語法聲明:<%! ... ... %> 合法內容:成員屬性或成員方法的聲明 轉譯成Servlet時的規(guī)則:成為JSP頁面轉譯成的Servlet類中成員屬性或成員方法 Eg: <%! public String getResult(){ //... }%> 將代碼整體插入到Servlet類中 public class Index_JSP extends JSPBase{ public String getResult(){ //... } public void service()... } 2.8 JSP頁面中的指令 語法規(guī)則:<% @指令名 屬性=值 %> 常用指令:
作用:控制JSP 在轉譯成Servlet類時生成的內容 2.9 page指令 作用:用于導包、設置頁面屬性 Eg: <%-- 導包 --><%@ page import='java.util.*' %><%@ page import='java.util.*,java.sql.*' %><%-- 設置response.setContentType()方法的參數值 --><%@ page contentType = 'image/gif' %><%-- 設置容器讀取該文件時的解碼 --><%@ page pageEncoding='UTF-8' %> 2.10 include指令 作用:在JSP頁面轉換成Servlet時,能夠將其他文件包含進來,可以包含JSP文件也可以是靜態(tài)的HTML文件。 通過該語句能方便的在每一個JSP頁面中包含導航欄、版權聲明、logo等 語法: <%@ include file = 'url' %> Eg: <%@include file = 'header.html' %><%@include file = 'footer.html' %> 2.11 JSP頁面中的隱含對象 什么是隱含對象? 容器自動創(chuàng)建,在JSP文件中可以直接使用的對象 作用:JSP預先創(chuàng)建的這些對象可以簡化對HTTP請求,響應信息的訪問 3. JSP運行原理 3. 1 JSP是如何運行的 3. 2 JSP是如何轉換成Java 3. 3 如何將靜態(tài)頁面轉化成動態(tài)頁面 step1:拷貝靜態(tài)頁面代碼到JSP頁面 step2:添加page指令pageEncoding和contentType step3:修改頁面內容與目標內容一致 step4:將需要動態(tài)生成的內容刪除,替換為Java代碼 4. 轉發(fā) 4. 1 什么是轉發(fā) 一個Web組件(Servlet/JSP)將未完成的處理通過容器轉交給另一個Web組件繼續(xù)完成 常見問題:一個Servlet獲得數據之后(比如通過調用dao),將這些數據轉發(fā)給一個JSP,由這個JSP來展現(xiàn)這些數據(比如,以表格的方式來展示) 4. 2 如何實現(xiàn)轉發(fā)
4. 3 綁定數據到request對象 實現(xiàn)綁定 request.setAttribute(String name,Object obj); name : 綁定名 obj : 綁定值 讀取綁定值 Object request.getAttribute(String name) 如果綁定名對應的值不存在,返回null 4. 4 獲得轉發(fā)器 RequestDispatcher rd = request.getRequestDispatcher(String path); path:轉發(fā)的目的地,即將未完成的處理繼續(xù)下去的另一個組件,比如一個JSP文件 4. 5 轉發(fā) 實現(xiàn)轉發(fā):rd.forward(request,response); 通常情況下第2步和第3步合并為一行語句,如下: request.getRequestDispatcher(path).forword(request,response); 4. 6 轉發(fā)的原理 4. 7 轉發(fā)的特點 轉發(fā)以后,地址欄不會發(fā)生變化。原因是轉發(fā)的過程是發(fā)生在服務器內部的,瀏覽器并不知道。 轉發(fā)的目的地必須是同一個應用內部的某個地址 轉發(fā)所涉及的各個web組件會共享同一個request對象和response對象 注意:在forward之后的其他語句還會執(zhí)行嗎? 答:一定會執(zhí)行,只要不報異常。 4. 8 轉發(fā)和重定向的區(qū)別
5 JSP開發(fā)常見問題 5.1 異常處理 1)編程式的異常處理 使用轉發(fā)跳轉到指定頁面進行提示說明 try{ //... ... }catch(Exception e){ request.getRequestDispatcher(url).forward(request,response); 2)容器中的聲明式處理 step1:將異常拋給容器,但底層的錯誤提示不要返回給用戶 注意:異常只允許拋service指定的異常,不能超出指定范圍使用如下寫法:throw new ServletException(e); step2:在web.xml文件中配置錯誤處理頁面節(jié)點 5.2 路徑問題 1)路徑使用 2)相對路徑
3)絕對路徑
4)路徑的處理技巧 在使用絕對路徑時:
String request.getContextPath(); 謝謝閱讀本文哦,如果喜歡本問可以收藏哦,讓我們一起學習進步! |
|