Java Jsp使用

一、Jsp基礎

1Jsp的執行過程html

tomcat服務器完成:jsp文件->翻譯java文件->編譯class字節碼文件-> 構造類對象-> 調用方法java

tomcatwork目錄下存放jsp運行時的臨時文件!!web

2Jsp語法:sql

1jsp表達式:<%=變量或表達式%> 向瀏覽器輸出變量或表達式計算的結果瀏覽器

2jsp腳本: <% java代碼 %> 執行java代碼  原理:翻譯到_jspService()方法中緩存

3jsp聲明: <%! 變量或方法 %> 聲明jsp的成員變量或成員方法tomcat

4jsp註釋: <%!-- jsp註釋 --%> 用於註釋jsp代碼,不會翻譯到java文件中,也不會執行。服務器

 

3jsp的三大指令session

3.1 include指令:用於包含其餘頁面。原理:先合併再翻譯,叫靜態包含app

3.2 page指令:告訴tomcat服務器如何把jsp文件翻譯成java文件

 language: 翻譯的動態語言。

 import: 類導入

jsp文件編碼問題:

pageEncoding: 告訴tomcat服務器使用什麼編碼翻譯jsp文件(jsp->java文件)

contentType: tomcat服務器發送給瀏覽器的數據編碼(tomcat服務器->瀏覽器)

 

 異常錯誤相關的:

errorPage:  指定當前jsp頁面的錯誤處理頁面。

isErorrPage:  指定當前頁面是否爲錯誤處理頁面。false,不是錯誤處理頁面,則不能使用 exception內置對象;true,是錯誤處理頁面,可使用exception內置對象。

 

配置全局的錯誤處理頁面:

 

  <!-- 全局錯誤處理頁面配置 -->

  <error-page>

   <error-code>500</error-code>

   <location>/common/500.jsp</location>

  </error-page>

  <error-page>

   <error-code>404</error-code>

   <location>/common/404.html</location>

  </error-page>

 

session:  是否開啓session功能。false,不能用session內置對象;true,可使用session 置對象。

buffer:  jsp頁面的緩存區大小。

isELIgnore: 是否忽略EL表達式。

2 Jsp的內置對象(重點)

2.1 什麼是內置對象?

jsp開發中,會頻繁使用到一些對象

。例如HttpSession,ServletContext,ServletContext,HttpServletRequet。若是咱們每次要使用這些對象都去建立這些對象就顯示很是麻煩。因此Sun公司設計Jsp時,在jsp頁面加載完畢以後就會自動幫開發者建立好這些對象,而開發者只須要直接使用這些對象調用方法便可!,這些建立好的對象就叫內置對象!!!!

 

舉例:

servlet:

HttpSession session = request.getSession(true); (須要開發者作)

 

jsp:

tomcat服務器: HttpSession session = request.getSession(true);(不須要開發者作)

開發者作的: session.getId();

 

2.2 9大內置對象

內置對象名          類型

   request    HttpServletRequest

  response      HttpServletResponse

   config        ServletConfig

application        ServletContext

 session         HttpSession

exception        Throwable

page            Object(this)

out             JspWriter

pageContext     PageContext

 

  2.3 Out對象

out對象類型,JspWriter類,至關於帶緩存的PrintWriter

 

PrintWriter

wrier(內容): 直接向瀏覽器寫出內容。

 

JspWriter

writer(內容): jsp緩衝區寫出內容

 

當知足如下條件之一,緩衝區內容寫出:

1)緩衝區滿了

2)刷新緩存區

3)關閉緩存區

4)執行完畢jsp頁面

 

  2.4 pageContext對象

pageContext對象的類型是PageContext,叫jsp的上下文對象

 

     1)能夠獲取其餘八個內置對象

 

public class 01_hello_jsp {

public void _jspService(request,response){

建立內置對象

HttpSession session =....;

ServletConfig config = ....;

 

8個常常使用的內置對象封裝到PageContext對象中

PageContext pageContext  = 封裝;

調用method1方法

method1(pageContext);

}

 

public void method1(PageContext pageContext){

但願使用內置對象

PageContext對象中獲取其餘8個內置對象

JspWriter out =pageContext.getOut();

HttpServletRequest rquest = pageContext.getRequest();

........

}

}

 

使用場景: 在自定義標籤的時候,PageContext對象頻繁使用到!!!

       2)自己是一個域對象

ServletContext context

HttpServletRequet  request

HttpSession    session域     --Servlet學習的

PageContext   page        --jsp學習的

 

 

做用: 保存數據和獲取數據,用於共享數據

 

#保存數據

1)默認狀況下,保存到page

pageContext.setAttribute("name");

2)能夠向四個域對象保存數據

pageContext.setAttribute("name",域範圍常量)

 

#獲取數據

1)默認狀況下,從page域獲取

pageContext.getAttribute("name")

2)能夠從四個域中獲取數據

pageContext.getAttribute("name",域範圍常量)

 

域範圍常量:

PageContext.PAGE_SCOPE

PageContext.REQUEST_SCOPE

PageContext..SESSION_SCOPE

PageContext.APPLICATION_SCOPE

3)自動在四個域中搜索數據

pageContext.findAttribute("name");

順序: page-> request-> session- > context域(application域)

3 Jsp中的四個域對象

四個域對象:

pageContext      page

request          request

session          session

application       context

 

1)域對象做用:

保存數據   獲取數據 ,用於數據共享。

 

2)域對象方法:

setAttribute("name",Object) 保存數據

getAttribute("name")  獲取數據

removeAttribute("name") 清除數據

 

3)域對象做用範圍:

page域: 只能在當前jsp頁面中使用(當前頁面)

request域: 只能在同一個請求中使用(轉發)

session域: 只能在同一個會話(session對象)中使用(私有的)

    context域: 只能在同一個web應用中使用。(全局的)

4 Jsp的最佳實踐

Servlet技術: 開發動態資源。是一個java類,最擅長寫java代碼

jsp技術: 開發動態資源。經過java代碼最擅長輸出html代碼。

 

 

各取所長:

web項目中涉及到邏輯:

1)接收參數      servlet

2)處理業務邏輯,返回結果    servlet

3)顯示數據到瀏覽器      jsp

4)跳轉到其餘頁面        servlet

 

 

servlet+jsp模式

 

  servlet:

1)接收參數

2)處理業務邏輯

3)把結果保存到域對象中

4)跳轉到jsp頁面

Jsp:

1)從域對象取出數據

2)把數據顯示到瀏覽器

 

servlet的數據    ->   jsp頁面

List<Contact>    使用域對象 共享數據

 

5 EL表達式

5.1 EL做用

jsp的核心語法: jsp表達式 <%=%>jsp腳本<%  %>

之後開發jsp的原則: 儘可能在jsp頁面中少寫甚至不寫java代碼。

 

使用EL表達式替換掉jsp表達式

 

EL表達式做用: 向瀏覽器輸出域對象中的變量值或表達式計算的結果!!!

 

語法: ${變量或表達式}

 

5.2 EL語法

1)輸出基本數據類型變量

1.1 從四個域獲取

${name}

1.2 指定域獲取

${pageScope.name}

                    域範圍: pageScoep / requestScope / sessionScope / applicationScope

 

    2)輸出對象的屬性值

Student

3)輸出集合對象

   List  Map

4EL表達式計算

6 jsp標籤

6.1 jsp標籤的做用

jsp標籤做用:替換jsp腳本。

 

1)流程判斷(if   for循環)

2)跳轉頁面(轉發,重定向)

3)。。。。。

 

6.2 Jsp標籤分類

1)內置標籤(動做標籤): 不須要在jsp頁面導入標籤

2jstl標籤: 須要在jsp頁面中導入標籤

3)自定義標籤 : 開發者自行定義,須要在jsp頁面導入標籤

6.3 動做標籤

  轉發標籤: <jsp:forward />

            參數標籤:  <jsp:pararm/>

包含標籤:  <jsp:include/>

原理: 包含與被包含的頁面先各自翻譯成java源文件,而後再運行時合併在一塊兒。

(先翻譯再合併),動態包含

 

靜態包含  vs  動態包含的區別?

 

1) 語法不一樣

靜態包含語法: <%@inclue file="被包含的頁面"%>

動態包含語法: <jsp:include page="被包含的頁面">

 

2)參數傳遞不一樣

靜態包含不能向被包含頁面傳遞參數

動態包含能夠向被包含頁面傳遞參數

 

3)原理不一樣

靜態包含: 先合併再翻譯

動態包含: 先翻譯再合併

 

6.4 JSTL標籤

JSTL (全名:java  standard  tag  libarary   -  java標準標籤庫  )

 

核心標籤庫 c標籤庫) 每天用

國際化標籤(fmt標籤庫)

EL函數庫(fn函數庫)

xml標籤庫(x標籤庫)

sql標籤庫(sql標籤庫)

6.5 使用JSTL標籤步驟

1) 導入jstl支持的jar包(標籤背後隱藏的java代碼)

注意:使用javaee5.0的項目自動導入jstl支持jar

2)使用taglib指令導入標籤庫

<%@taglib uri="tld文件的uri名稱" prefix="簡寫" %>

3)在jsp中使用標籤

 

核心標籤庫的重點標籤:

保存數據:

<c:set></c:set>   

獲取數據:

             <c:out value=""></c:out>

單條件判斷

            <c:if test=""></c:if>

多條件判斷

          <c:choose></c:choose>

       <c:when test=""></c:when>

          <c:otherwise></c:otherwise>

    循環數據

          <c:forEach></c:forEach>

          <c:forTokens items="" delims=""></c:forTokens>

重定向

          <c:redirect></c:redirect>

相關文章
相關標籤/搜索