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!");
}
- 总结