CKEditor:
网页中实现所见即所得的编辑器
第三方组件:
第三方组织提供的组件,会用就行
要求:
- 会用就行,知道步骤就可以,不用管怎么开发的,不需要理解
- 不需要记住,因为可能会有更好的
使用CKEditor步骤:
- 下载CKEditor
- 解压到项目中
- 在页面中加入CKEditor
- 使用CKEditor编辑内容
- 提交CKEditor编辑的内容
enctype="multipart/form-data" : 这是一个多部分表单数据的提交(有普通的,还有传文件的)
Commons-FileUpload简介:
Commons-FileUpload组件:
Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目
Commons-FileUpload组件特点:
- 使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能
- 能够全程控制上传内容
- 能够对上传文件的大小、类型进行控制
获取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
Commons-FileUpload组件应用:
环境准备:
在项目中引入commons-fileupload-1.2.2.jar和commons-io-2.4.jar文件
设置表单的enctype属性:
<form enctype="multipart/form-data" method="post">
上传文件时form标签的method属性必须设置为“post”,不能设置为“get”
在表单中使用File控件选择文件:
<input type="file" name="nfile" />
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) | 设置临时文件存放的目录 |
文件上传的实现:
编写上传文件处理页的实现步骤:
1. 创建FileItemFactory对象
2. 创建ServletFileUpload对象
3. 解析form表单提交的所有表单元素数据
a. 如果是普通表单元素:
获取该元素的名和值使用
b. 如果是文件数据:
获取文件名的等参数
保存文件数据到服务器
控制上传文件的属性:
控制上传文件的类型:
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!");
}
实现分页查询:
先编写分页查询sql语句,再编写分页查询方法,将分页查询分步实现
新闻数据分页展示
计算新闻总条数(1000)
去数据库中分页查询数据(10条10条的查)
都放进NewsService(impl) ---> NewsDao(impl)中
分页工具类中放计算的总页数:1000/10=100页
分页显示的步骤:
1. 确定每页显示的数据数量
公用的分页sql:分页后每页显示几条新闻(页面容量)pageSize
从第几条数据开始显示(当前页码pageNo-1)*pageSize
2. 确定分页显示所需的总页数
select count(1) from 表名 效率高于 select count(*) from 表名
计算总页数:
public void setTotalPageCountByRs(){
if(this.totalCount%this.pageSize==0){
this.totalPageCount = this.totalCount/this.pageSize;
}else if(this.totalCount%this.pageSize != 0){
this.totalPageCount = this.totalCount/this.pageSize+1;
}else{
this.totalPageCount=0; } }
3. 编写SQL查询语句,实现数据查询
SELECT id,title,author,createdate FROM news_detail WHERE 1=1 LIMIT (pageNo-1)*pageSize,pageSize
4. 在JSP页面中进行分页显示设置
a. 传参数的方法传递页面信息
<% if(pageIndex>1){ %>
<a href="newsDetailList.jsp?pageIndex=1">首页</a>
<a href="newsDetailList.jsp?pageIndex=<%=pageIndex-1 %>">上一页</a>
<% }if(pageIndex<totalpage){ %>
<a href="newsDetailList.jsp?pageIndex=<%=pageIndex+1 %>">下一页</a>
<a href="newsDetailList.jsp?pageIndex=<%=totalpage %>">最后一页</a>
<% } %>
b. 传标签的方法传递页面信息
<% if(pageIndex>1){ %>
<a href="javaScript:page_nav(document.forms[0],1)">首页</a>
<a href="javaScript:page_nav(document.forms[0],<%=pageIndex-1%>)">上一页</a>
<% }if(pageIndex<totalpage){ %>
<a href="javaScript:page_nav(document.forms[0],<%=pageIndex+1%>)">下一页</a>
<a href="javaScript:page_nav(document.forms[0],<%=totalpage%>)">最后一页</a>
<% } %>