8.JSP開發業務應用
- 大容量的資料顯示
- 當數量較多時,使用者需要拖動頁面才能瀏覽更多資訊
- 資料定位不便
- 分頁實現的思路
分頁顯示的步驟
- 封裝Page類
將有關分頁的資料封裝到Page類
public class Page {
private int currPageNo = 1; // 當前頁碼
private int pageSize = 15; // 頁面大小,即每頁顯示記錄數
private int totalCount; // 記錄總數
private int totalPageCount; // 總頁數
List<News> newsList; // 每頁新聞集合
…… // 省略getter/setter方法
}
- 計算顯示的總頁數
獲取總記錄數
select count(1) from 表名 效率高於
select count(*) from 表名
根據每頁顯示記錄數計算出總頁數
public void setTotalCount(int totalCount) {
if (totalCount > 0) {
this.totalCount = totalCount;
//計算總頁數
totalPageCount = (this.totalCount % pageSize == 0) ?
(this.totalCount / pageSize) :
((this.totalCount / pageSize) + 1);
}
}
- 分頁SQL語句
使用HTML子句
SELECT `nid`, `ntitle`, `ncreateDate` FROM `news` LIMIT 0, 3
0 --起始行的下標 = (當前頁頁碼 - 1) * 每頁顯示的資料量
3 --每頁顯示的資料量
- 獲取分頁資訊
獲取分頁資訊
- 頁面的設定
根據已經確認的當前頁碼設定引數
<%
<a href="pageControl.jsp?pageIndex=1">首頁</a>
<a href="pageControl.jsp?pageIndex=<%=pageIndex - 1%>">上一頁</a>
<a href="pageControl.jsp?pageIndex=<%=pageIndex + 1%>">下一頁</a>
<a href="pageControl.jsp?pageIndex=<%=totalPages%>">末頁</a>
%>
- 頁碼邊界的控制
// 獲取當前頁
String currentPage = request.getParameter("pageIndex");
if (currentPage == null) {
currentPage = "1";
}
int pageIndex = Integer.parseInt(currentPage);
通過判斷pageIndex變數實現邊界控制
當前頁數:[<%=pageIndex%>/<%=totalpages%>]
<%
if (pageIndex > 1) { // 控制頁面顯示風格
%>
<a href="pageControl.jsp?pageIndex=1">首頁</a>
<a href="pageControl.jsp?pageIndex=<%=pageIndex-1%>">上一頁</a>
<%
} if (pageIndex < totalPages) { // 控制頁面顯示風格
%>
<a href="pageControl.jsp?pageIndex=<%=pageIndex+1%>">下一頁</a>
<a href="pageControl.jsp?pageIndex=<%=totalPages%>">末頁</a>
<%
}
%>
- Commons-FileUpload簡介
- Commons-FileUpload元件
- Commons是Apache開放原始碼組織的一個Java子專案,其中的FileUpload是用來處理HTTP檔案上傳的子專案
- Commons-FileUpload元件特點
- 使用簡單:可以方便地嵌入到JSP檔案中,編寫少量程式碼即可完成檔案的上傳功能
- 能夠全程控制上傳內容
- 能夠對上傳檔案的大小、型別進行控制
- Commons-FileUpload元件
- Commons-FileUpload簡介
- 獲取Commons-FileUpload元件的方式
- http://commons.apache.org/fileupload下載Commons-FileUpload元件
- 類庫:commons-fileupload-1.2.2.jar
- API文件:commons-fileupload-1.2.2\site\apidocs
- http://commons.apache.org/io下載Commons-IO元件
- 類庫:commons-io-2.4.jar
- API文件:commons-io-2.4\docs
- http://commons.apache.org/fileupload下載Commons-FileUpload元件
- 獲取Commons-FileUpload元件的方式
- Commons-FileUpload元件應用
- 環境準備
在專案中引入commons-fileupload-1.2.2.jar和commons-io-2.4.jar檔案
-
- 設定表單的enctype屬性
<form enctype="multipart/form-data" method="post">
-
- 在表單中使用File控制元件選擇檔案
<input type="file" name="nfile" />
注意:
上傳檔案時form標籤的method屬性必須設定為“post”,不能設定為“get”
- Commons-FileUpload元件的API -1
ServletFileUpload類的常用方法
- Commons-FileUpload元件的API 3-2
FileItem介面的常用方法
- Commons-FileUpload元件的API 3-3
FileItemFactory介面
實現類:DiskFileItemFactory
- 檔案上傳的實現
編寫上傳檔案處理頁的實現步驟
-
- 建立FileItemFactory物件
- 建立ServletFileUpload物件
- 解析form表單提交的所有表單元素資料
- 如果是普通表單元素
- 獲取該元素的名和值使用
- 如果是檔案資料
- 獲取檔名的等引數
- 儲存檔案資料到伺服器
- 如果是普通表單元素
- 控制上傳檔案的屬性2-1
控制上傳檔案的型別
List<String> fileType = Arrays.asList("gif", "bmp", "jpg");
String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
if (! fileType.contains(ext)) { // 判斷檔案型別是否在允許範圍內
out.print("上傳失敗,檔案型別只能是gif、bmp、jpg");
} else {
//上傳檔案
}
控制上傳檔案的型別
List<String> fileType = Arrays.asList("gif", "bmp", "jpg");
String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
if (! fileType.contains(ext)) { // 判斷檔案型別是否在允許範圍內
out.print("上傳失敗,檔案型別只能是gif、bmp、jpg");
} else {
//上傳檔案
}
控制上傳檔案的大小
ServletFileUpload upload = new ServletFileUpload(factory);
// 設定一個完整請求的最大限制
upload.setSizeMax(1024 * 30);
try {
// ……省略上傳程式碼
} catch (FileUploadBase.SizeLimitExceededException ex) {
out.print("上傳失敗,檔案太大,全部檔案的最大限制是:" +
upload.getSizeMax() + "bytes!");
}
- 總結