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="字首" %>
- page 指令
-
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型別,那麼就需要我們自己進行轉換
-