1. 文件上传下载展示和思路
(1) 图片的上传,是把图片数据以二进制的方式放入数据库,还是把图片上传到服务器的某个目录下,数据库记录这个目录?哪种方式好?
将图片上传到服务器的某个目录,比较好,访问起来比较方便,缺点是当服务器重启时,MYEclipse图片也会消失
(2) 图片的上传下载在java中有哪些jar包支持?

2. 开始上传并理解上传API的作用
(1) 简述文件上传的步骤
//1.创建FileItemFactory对象
//2.创建ServletFileUpload对象
//解决file表单项的文件名中文乱码问题
//3.通过ServletFileUpload对象实现上传操作,将客户端一个个表单项封装到一个个FileItem中
//4.遍历各个FileItem(相当于对各个表单项进行处理)
(2) FileItem类的方法有哪些,分别是什么意思?
System.out.println(Item.isFormField());//是否是file表单项 是file false 不是file true
System.out.println(Item.getFieldName());//表单项的name属性的值
// System.out.println(Item.getString());//对于非file表单项,value属性的值,对于file表单项,是文件内容
System.out.println(Item.getString("utf-8"));//对于非file表单项的中文乱码问题
System.out.println(Item.getName());//对于file表单项,上传文件的名称,对于非file表单项,返回null
System.out.println(Item.getContentType());//对于file表单项,上传文件mime类型,对于非file表单项,返回null
System.out.println(Item.getSize());//对于非file表单项 ,上传文件mime类型 ;对于非file表单项 ,返回null
3. 上传文件到指定目录
(1) 如何上传文件到指定目录?写出步骤
//1.创建FileItemFactory对象
FileItemFactory factory = new DiskFileItemFactory();
//2.创建ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8"); //解决file表单项的文件名中文乱码问题
//3.通过ServletFileUpload对象实现上传操作,将客户端一个个表单项封装到一个个FileItem中
List<FileItem> ItemList = null;
try {
ItemList = upload.parseRequest(request);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(ItemList.size());
//4.遍历各个FileItem(相当于对各个表单项进行处理)
String name= null;
int age = 0 ;
double score =0;
for (int i = 0; i < ItemList.size(); i++) {
//取出第i个表单项
FileItem Item = ItemList.get(i);
//输出item的内容,熟悉FileItem的主要方法
if (Item.isFormField()) {//非file表单项
if ("name".equals(Item.getFieldName())) {
name=Item.getString("utf-8");
}
if ("age".equals(Item.getFieldName())) {
age = Integer.parseInt(Item.getString());
}
if ("score".equals(Item.getFieldName())) {
score = Double.parseDouble(Item.getString());
}
}else{//file表单项
//photo
if ("photo".equals(Item.getFieldName())) {
//指定上传的文件夹
File dir = new File("D:apache-tomcat-7.0.56webappsupload0/img"); //servlet是服务器技术,此处只上传到服务器的路径
if (!dir.exists()) {//判断文件夹名是否存在
dir.mkdir(); //不存在则创建新文件夹
}
//指定上传的文件名
String photoName = Item.getName();
//指定上传的文件夹和文件名
File file = new File(dir, photoName);
//上传该照片到指定位置
try {
Item.write(file);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
4. 完善上传文件到指定目录
(1) 本节课完善了文件上传的哪些点?实现代码是什么?
完善: 由逻辑路径得到物理路径提高灵活性
String realPath = this.getServletContext().getRealPath("/upload");
File dir =new File(realPath);
//完善2;为了防止文件的同名覆盖,上传到服务器端的文件重新命名
UUID uuid = UUID.randomUUID();
String extName = realName.substring(realName.lastIndexOf("."));
photoName = uuid.toString()+extName;
File file = new File(dir, photoName);
完善4 :只上传jpg.jpeg和gif文件
String contentType = Item.getContentType();//images/jpg
photoType = contentType;
if (!"image/jpeg".equals(contentType) && !"image/gif".equals(contentType)) {
request.setAttribute("mess", "只能上传jpg和gif文件");
request.getRequestDispatcher("/add.jsp").forward(request, response);
return;
}
//完善5:限制上传的单个和所有文件的大小,建议使用该方式
upload.setFileSizeMax(300*1024);//单个文件的上限
upload.setSizeMax(5*1024*300);//一次上传的所有文件的总大小的上限
upload.setHeaderEncoding("utf-8"); //完善解决file表单项的文件名中文乱码问题
5. 保存上传信息到数据库
(1) 本节课要往数据库里面存哪些数据?这些数据的作用是什么?
RealName:文件的真实姓名 显示给用户时,需要使用的名称
photoType:图片的类型 文件的类型,判断文件的类型时需要
PhotoName:图片的访问名称 后台调用的是文件的原始姓名
6. 将服务器的图片在客户端下载
(1) 简述下载的步骤,视图层怎么写,控制层怎么写?贴出代码,并写出注释
视图层:标签连接 指向servlet(DownServlet)
控制层:
7. 完善下载操作
(1) 本节课完善了下载的哪些点?贴出对应代码和注释
// User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763
if(type.toLowerCase().indexOf("khtml")>0){
realName = URLEncoder.encode(realNames,"utf-8");
}else {
realName=new String(realNames.getBytes("utf-8"),"iso-8859-1");//解决get提交方式的中文下载乱码问题
}
//下载方式 弹窗提示
resp.setContentLength( (int)file.length());//文件长度
resp.setContentType(student.getPhotoType());//MIME类型
// resp.setHeader("Content-disposition", "inline"); 下载方式 默认inline 直接下载并展示
resp.setHeader("Content-disposition", "attachment;filename="+realName); //下载方式 弹窗提示
8. 版本管理和SVN入门
(1) 什么是版本管理?
工程数据库中的重要概念,是工程数据库管理系统具有的重要功能与特性。版本是记录特定对象 各个可选状态的快照,版本管理的任务就是对对象 的历史演变过程进行记录和维护,根据实际应用背 景选择合适的版本间的拓扑结构,并至少应包括以 下功能:新版本的生成;统一、协调管理各个版本; 有效记录不同版本的演变过程及对不同版本进行有 效管理,以尽可能少的数据冗余记录各版本。同时 还要保证不同版本在逻辑上的一致性和相对独立 性,一个版本的产生和消失不会对其余版本的内容 产生影响。版本切换时,指定了新的当前版本后, 必须保证对象的映象和指定的版本保持一致
为什么需要版本管理?
1 作为数据备份
2 版本管理,避免版本管理混乱
3 提高代码质量
4 提高协同,多人开发时的效率
5. 明确分工责任
6. 除了代码以外,简历等等都可以进行版本管理
(2) 除了svn外,还有哪些版本管理软件?
目前配置管理工具最常用的当然是免费的SVN了,除此之外免费的工具还有CVS(SVN的前身)比较常用,收费的工具有ClearCase、VSS、Firefly等,另外还有些分布式配置管理工具(如GIT)用的人不是太多
基本上SVN、CVS、ClearCase(简称CC)、VSS这4款工具覆盖了至少90%以上
9. 安装和使用Visual SVN
(1) 按照本节课的内容,安装svn并使用visual svn
10. Subclipse的安装和使用1
无
11. Subclipse的安装和使用2
(1) 简述在eclipse中安装svn插件的步骤,以及注意事项
· 一,下载一个svn插件(这里演示用:site-1.8.16.zip),将其解压得到下面的目录结构,然后将这个目录中的features和plugins两个子目录,复制到eclipse中的两个相同目录下,见下图
·

·

之后可以打开eclipse,点击window-->show view-->然后输入‘svn’,如果出现下图所示,就表示配置成功了。
·

·
(2) 简述在eclipse中使用svn的方法
1.
在eclipse中,从Window -> Show view里调出SVN资源库视图
2.

在SVN资源库窗口的空白位置右键选择新建资源库位置

填好服务器的地址

END
1.
接受数字证书,输入用户名密码

资源库导入成功,SVN资源库视图下出现导入的资源库

右键需要上传的project --> Team --> Share project

。