一。导入工程所需要的包
二。建web工程
n层框架的的包名dao.daoimpl .service.seriveimpl.servlet.serlvetimpl.controller.utils.exception.
三。建数据库
四。先设计工具类的包。utils
1.JdbcUtil
1) 用c3p0连接池获取dataSource
private static CombopooledDataSource ds =null;
static{
ds=new CombopooledDataSource();
};
public static DataSource getDataSource()
{
return ds;
}
2) Daofactory泛型工厂(单例模式)
private Daofactory(){};
private static Daofactory instance = new Daofactory();
public static Daofactory getDao()
{
return instance;
}
public static <T> T createdao(String classname,Class<T> type)
{
return (T) class.forname(classname).newInstance;
}
五. 设计Dao
upfileDao
public void add()
{
QueryRunner runner = new QueryRunner(jdbcUtils.getDataSource);
String sql ="";
Object param[] ={"","","",""......};
runner.update(sql,param);
}
public Upfile find(String id)
{
QueryRunner runner = new QueryRunner(jdbcUtils.getDataSource);
String sql ="select * from upfile where id = ?";
runner.query(sql,id,new BeanHandler(Upfile.class));
}
public List<Upfile> getAll()
{
QueryRunner runner = new QueryRunner(jdbcUtils.getDataSource);
String sql ="select * from upfile";
return (List<upfile>) runner.query(sql,new BeanListHandler(Upfile.class));
}
六. 设计service
BusnessService
private UpfileDao dao = Daofactory.getInstance().createDao("类路径",接口名.class)
public void add(Upfile file)
{
dao.add(file);
}
public Upfile find (String id)
{
dao.find(id);
}
七。设计serlvet
uploadServlet
doPost()
{
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(facotory);
}
listfileServlet
downloadServlet
八.设计web
list.jsp
upload.jsp
注意的八大项
1.如何设置上传文件最大值,并实现超出最大值时给用户一个友好提示
upload.setFileSizeMax(1024*10); //设置最大值
实现超出最大值时给用户一个友好提示:在程序中捕获FileUploadBase.FileSizeLimitExceededException
只要程序抛出这个异常,代表用户上传的文件超出最大值
2.上传过程中的乱码问题
2.1 普通输入项的乱码
item.getString("码表 ")
2.2 上传文件名的乱码
ServletFileUpload.setHeaderEncoding("码表")
3.上传文件的安全性问题
为防止用户直接上传文件,危害服务器安全,程序应禁止用户直接访问上传文件(即把上传文件保存在用户无法直接访问的目录)
4.防止文件覆盖(UUID)
5.文件打散存储(一个目录下面不能存超出1000个文件)
用hash算法生成目录保存
6.设置监听器,监听文件上传进度
upload.setProgressListener(new ProgressListener(){
public void update(long arg0, long arg1, int arg2) {
System.out.println("当前已上传" + arg0 + ",当前处理的文件总大小" + arg1);
}
});
7.临时文件的删除问题
处理完每一个文件上传后,一定要记得调用Fileitem.delete方法,删除临时文件
8.限定上传文件类型
判断上传文件后缀名