jsp--4.JSP开发业务应用与Commons-FileUpload组件

一、分页实现的思路

1.分页显示的步骤

  • 确定每页显示的数据数量
  • 确定分页显示所需的总页数
  • 编写SQL查询语句,实现数据查询
  • 在JSP页面中进行分页显示设置

2.封装Page类(util包放配置信息文件)

public class Page {
        private int currPageNo = 1; // 当前页码
        private int pageSize = 15;    // 页面大小,即每页显示记录数
        private int totalCount;          // 记录总数
        private int totalPageCount; // 总页数
        List<News> newsList;         // 每页新闻集合

        …… // 省略getter/setter方法
}

3.计算显示的总页数

  • 获取总记录数
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);
       }
}

4.分页SQL语句

  • 使用LIMIT子句(mysql)
SELECT `nid`, `ntitle`, `ncreateDate` FROM `news` LIMIT 0, 3
//LIMIT i1, i2
    ---i1:起始行的下标 = (当前页页码 - 1) * 每页显示的数据量
    ---i2:每页显示的数据量

5.页面的设置

  • 根据已确认的当前页码设置参数(.jsp文件)
<%  
   <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>
%>

6.页码边界的控制

  • 通过判断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> 
<%}%>   
// 获取当前页
String currentPage = request.getParameter("pageIndex");
if (currentPage == null) {
     currentPage = "1";//修正页码

}    
int pageIndex = Integer.parseInt(currentPage); 

二、Commons-FileUpload

1.Commons-FileUpload简介

Commons-FileUpload组件

  • Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目

Commons-FileUpload组件特点

  • 使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能
  • 能够全程控制上传内容:可以获得全部上传文件的信息,包括文件名称、类型、大小等,方便操作
  • 能够对上传文件的大小、类型进行控制:为了避免在上传过程中出现异常数据,在Commons-FileUpload组件中,专门提供了相应的方法用于对上传文件进行控制。

获取Commons-FileUpload组件的方式

1)http://commons.apache.org/fileupload下载Commons-FileUpload组件

  • 类库:commons-fileupload-1.2.2.jar
  • API文档:commons-fileupload-1.2.2\site\apidocs 

2)http://commons.apache.org/io下载Commons-IO组件

  • 类库:commons-io-2.4.jar
  • API文档:commons-io-2.4\docs

2.Commons-FileUpload组件应用

环境准备 (上传文件时form标签的method属性必须设置为“post”,不能设置为“get”)

  • 在项目中引入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" />

3.Commons-FileUpload组件的API

  • ServletFileUpload类的常用方法

方法名称

方法描述

public void setSizeMax (long  sizeMax)

设置请求信息实体内容的最大允许的字节数

public  List  parseRequest (

                        HttpServletRequest  req)

解析form表单中的每个字符的数据,返回一个FileItem对象集合

public static final boolean isMultipartContent(HttpServletRequest req)

判断请求信息中的内容 是否是multipart/form-data类型

public  void  setHeaderEncoding (

                                     String  encoding)

设置转换时所使用的字符集编码

  • FileItem接口的常用方法

方法名称

方法描述

public  boolean  isFormField( )

判断FileItem对象封装的数据类型(普通表单字段返回true,文件表单字段返回false)

public  String  getName( )

获得文件上传字段中的文件名(普通表单字段返回null)

public  String  getFieldName( )

返回表单字段元素的name属性值

public  void  write( )

将FileItem对象中保存的主体内容保存到指定的文件中

public  String  getString( )

将FileItem对象中保存的主体内容以一个字符串返回。其重载方法public  String  getString(String encoding)中的参数用指定的字符集编码方式

public  long  getSize( )

返回单个上传文件的字节数

  • FileItemFactory接口

实现类:DiskFileItemFactory

方法名称

方法描述

public void  setSizeThreshold(int sizeThreshold)

设置内存缓冲区的大小

public void  setRepositoryPath(String path)

设置临时文件存放的目录

4.文件上传的实现

编写上传文件处理页的实现步骤

1)创建FileItemFactory对象

2)创建ServletFileUpload对象

  • 通过构造方法:ServletFileUpload( FileItemFactory )

3)解析form表单提交的所有表单元素数据

  • 如果是普通表单元素---获取该元素的名和值使用
  • 如果是文件数据---获取文件名的等参数 、 保存文件数据到服务器

5.控制上传文件的属性

  • 控制上传文件的类型
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!");
}

猜你喜欢

转载自blog.csdn.net/weixin_43619912/article/details/94403694