JavaWeb基礎Day17 (JSP EL表示式 jstl標籤庫 beanutil工具類)

呆呆來啦發表於2020-07-31

JSP

jsp的實質就是指在html介面中嵌入Java程式碼

  • jsp指令碼

    • <%  Java程式碼  %>  相當於寫在service方法中。
    • <%=java 變數或者表示式 %> 相當於在service 內部寫了  out.println
    • <%! java程式碼 %>  實質上翻譯成servlet ,出現在成員變數的位置
    • <!-- 註釋內容 -->,原始碼可見,編譯後的Java檔案可見,最終的html檔案可見
    • // 單行註釋  /*多行註釋*/ 原始碼可見,編譯後的檔案可見,最終的html檔案不可見
  • jsp的執行原理

    • jsp檔案在第一次被訪問時會被解析成servlet ,所以jsp的實質就是一個servlet類,將內部的html標籤在servlet內部使用  response.getWrite.write() 的方式進行輸出
  • jsp的指令

    • page 指令  
      • language:jsp指令碼中可以嵌入的語言種類
      • pageEncoding:當前jsp檔案的本身編碼-----內部可以包含contentType
      • contentType:response.setContentType("text/html;charset=UTF-8");
      • import :匯入Java的包
      • errorPage:當前頁面出錯後跳轉到設定的報錯頁面
      • isErrorPage :當前頁面是一個處理錯誤的頁面,配置後可以獲取異常資訊
    • include 指令,是包含檔案的指令<%@ include  file  =  "被包含的檔案地址" %>
    • taglib指令 : 用於匯入標籤庫<%@  taglib  uri  =  "標籤庫地址"  prefix="字首"  %>
  • jsp九大內建物件

    • pageContext      jsp的頁面容器
    • session                   當前會話物件
    • application                   servlet 配置 , 獲取servlet 資訊
    • config                           servlet 配置,獲取servlet資訊
    • out                                頁面輸出物件
    • page                             當前servlet物件
    • request                         request物件
    • response                      response物件
    • exception                     jsp頁面所發生的異常,在錯誤頁中才起作用
  • pageContext物件

    • 域物件

      • pageContext域中放入資料,所以也是可以存放資料的
    • 資料的寫入,讀取,刪除

      • 向pageContext域中放入資料 setAtrribute(String name , object  obj);
      • 從pageContext域中獲取資料 getAttribute(String name);
      • 從pageContext域中刪除資料 removeAttribute (String name);
    • 作用範圍當前jsp檔案

      • 域物件的作用範圍只在當前的jsp頁面中,所以一般不適用這個域物件存放資料
    • 指定向其他域中存取資料

      • 向指定域中存放資料  setAttribute(String name ,object obj,int scope)
      • 從指定域中獲取資料 getAttribute (String name ,int scope)
      • 從指定域中刪除資料 removeAttrbute(String name,int  scope)
    • 依次從四大域中獲取資料

      • 依次從 pageContext , request , session , servletContext這四大域中獲取資料,找到即停止 findAttribute(String  name)
    • 通過pageContext物件獲取其他8大內建物件

      • pageContext.getRequest();
      • pageContext.getResopnse();
  • out物件

    • 用於向指定頁面輸出語句,在jsp 被翻譯後的檔案中看到的  out.write(),在jsp中使用的<%="abc"%>使用的都是out物件,將資料寫入嘔吐、快取區,然後再從out緩衝區刷入response 緩衝區
  • config物件

    • 獲取當前servlet的配置資訊
  • exception物件

    • 如果當前頁面是一個errorpage ,就是再page指令的屬性中的配置 isErrorPage = true ,通過這個物件可以獲取異常資訊<%=exception.getLocalizedMessage%>
  • 404錯誤總結

  • 1.已啟動web應用裡面的任何資源都是404
         |-web應用是否已經部署
         |-看localhost:8080,直接出不來,基本可以斷定伺服器 沒有啟動
         |tomcat重新裝,1,2,3,將磁碟中的tomcat刪 除,重新解壓新的tomcat,重新配
         |- web.xml問題,導致web應用啟動不起來,重新看控制 臺找異常資訊 
    2.一啟動單個資源是404
         |-如果是servlet,看web.xml中的url-pattern是否和 瀏覽器中的一致 
         |-如果是html,看檔名稱,看這個html在不在webCont ent
    3.介面能顯示,一點選提交按鈕404
         |-看當前form中的action的路徑,看是否是對應的servl et的url-pattern
         |- 明明正確還是404,有可能是瀏覽器的快取問題,在當前 網頁右鍵檢視原始碼, 看路徑是否和eclipse中一致,如果不一致,清除瀏覽 器快取
    4.圖片不正常顯示 
        |-在瀏覽器中點選右鍵檢視原始碼,看當前img的路徑,是 否是正確的路徑 
        |- 看你的img放的目錄是否是在webContent中 以後凡是遇到寫路徑先寫/,除了內部轉發以外,其他的所有路徑 都是從web應用的名字開始, 內部轉發從/從webContent目錄下開始
    

      

EL表示式

  EL  表示式可以嵌入在jsp頁面內部,在於簡化從域中獲取資料的操作

  • 從域中獲取值(重要)

    • 獲取四個域中的資料

      • pageScope :能獲取pageContext域中的資料
      • requestScope :能獲取request域中的資料 ${requestScope.key}
      • sessionScope :能獲取session域中的資料 ${sessionScope.key}
      • applicationScope :能獲取servletContext域中的資料${applicationScope.key}
      • 依次從四個域中查詢對應的值,如果存在就停止查詢 ${key}
  • 內建pageContext物件

    • 最常用的方法就是通過EL獲取應用程式的名稱${pageContext.request.contextPath}
    • <form action="${pageContext.request.contextPat h}/check" method="post"> 
          <input type="text" name="username"> 
          <input type="password" name="pwd"> 
          <input type="submit"> 籃球
          <input type="checkbox" value="lq" name="hob by">足球
          <input type="checkbox" value="zq" nam e="hobby">乒乓球
          <input type="checkbox" value="pp q"name="hobby">
       </form>
      

        

  • 常用表示式

    • ${name eq "張三"} 返回true 或者false, 比較字串  (  ==  是比較記憶體地址)

JSTL標籤庫

  • jstl常用標籤

    •  c:url  路徑標籤 <a href="<c:url value="/index.jsp"/>"> 超連結</a> == <a href="${pageContext.request.contextPath}/index.jsp">超連結</a>
    • c:if 判斷標籤 <c:if test="${1==1}"> 判斷成功  </c:if>
    • c:choose  多條件,判斷標籤
      • <c:choose> 
            <c:when test="${name == 1 }"> 
            <h1 style="color: red;">判斷正確了</h1> 
            </c:when> <c:when test="${name == 2 }">
            </c:when> <c:when test="${name == 3 }">
            </c:when> <c:otherwise>上述情況均不滿足</c:otherwise> 
        </c:choose>

         

    • c:forEach   迴圈遍歷標籤
      • begin  表示開始索引
      • end   表示結束索引
      • step     表示頻率
      • varstatus  表示當前的狀態
        • index屬性 表示迴圈當前的索引
        • count屬性表示迴圈的當前次數 從 1 開始
      • items   表示遍歷的集合元素
      • var       表示每次將集合的元素賦值給的變數名
      • <c:forEach begin="0" end="100" step="1" varStat us="status">
             <!--獲取當前迴圈的索引值-->
             ${status.index } 
            <!--獲取當前迴圈的次數--> 
            ${status.count } 
            </c:forEach>
             遍歷集合
            <c:forEach items="${list }" varStatus="status" var="item">
             ${status.index }:${item.name } 
        </c:forEach>
      • fmt:formatDate  格式化日期標籤
        • 需要匯入fmt標籤庫  <%@  taglib  prefix = "fmt"  uri = " http://java.sun.com/jsp/jstl/fmt "  %>
        • <fmt:formatDate value="${user.updateTime}" type="both" pattern="MM-dd HH:mm"/>
  • BeanUtils工具類

    • 在servlet中獲取表單資料使用 Map<String, String[]> map= request.getParameterMap(); ,並建立對應的model物件 People pe = new People();
      呼叫DBUtils的 BeanUtils.populate(pe, map); 此方法會將表單資料封裝到對應的pe的屬性中
    • 意BeanUtils會進行預設的資料型別封裝,也就是說如果我們定義的成員變數的型別是int,BeanUtils會自動的將String轉換為int型別,但是對於多選框 checkbox 型別的,我們必須將成員變數的型別定義為 String [] 否則就會出現轉換異常,如果是在有需求是List型別,那麼就需要我們自己進行轉換

相關文章