手机版

JSP Servlet实现了上传文件到服务器的功能

时间:2021-08-20 来源:互联网 编辑:宝哥软件园 浏览:

这个例子分享了JSP Servlet的具体代码,实现了上传文件到服务器的功能,供大家参考。具体内容如下

项目目录结构大致如下:

就像我上面红线画的三样东西:Dao、service和servlet是主要的结构,类似于MVC架构,Dao是模型实体类(逻辑层),service是服务层,servlet是视图层,三者协同工作完成项目。

这里的User是用户表定义的一个类,然后封装添加、删除、修改、查询等操作,实现从数据库中查询插入、修改删除、实现分页操作等操作,也实现了把图片放到服务器上运行的效果。

Dao层:主要实现User类的定义和接口IUserDao (userdao impl)的定义和实现;

服务层:直接定义一个接口类IUserService,类似于IUserDao,然后实现它的接口类UserServiceImpl,直接实例化UserDaoImpl然后调用它的方法实现它自己的方法,重用代码。详见代码;

Servlet层:最初把表User的每一个操作方法都定义为一个servlet来实现,虽然简单,但是管理起来太多了,所以用基类BaseServlet来实现“反射机制”,通过得到的动作参数,自己智能调用对应的方法,而UserServlet实现自己的方法进行调用,方便多了。有关详细信息,请参阅之前的博客文章或以下代码。

编译后上传文件到tomcat服务器的过程中,关键是每次编译后都要手动创建这个文件夹来存放对应的上传文件,否则每次tomcat服务器重启后,编译后的项目会覆盖原来的那个,导致没有存放上传文件的文件夹,导致代码找不到这个文件夹并报错,即上传不成功。如下图所示:

主要是考虑图片路径的问题,手动设置路径不能保证不重复,所以在得到上传图片的后缀后,使用随机生成的随机数作为图片名称,这样名称就不会重复了:

字符串扩展名称=picturepath . substring(picturepath . last indexof(' . ')),//截取最后一个“.”的子字符串到字符串的末尾。picturepath . length());//将文件名重命名为世界上唯一的文件名字符串唯一名称=uuid.randomuuid()。tostring();save filename=unique name extended name;//向拼接路径名添加用户时,代码如下:

//增公共void add(httpersvletrequest请求,HttpServletResponse响应)引发ServletException,IOException { system。出去。println(' add方法被调用');//获取数据int id=0;字符串用户名=null字符串密码=nullString sex=null日期生日=null字符串地址=null字符串保存文件名=空;字符串picturePath=null//得到表单是否以enctype="多部分/表单数据"方式提交boolean is multi=servlet file upload。IsMultipartContent(请求);if (isMulti) { //通过文件工厂得到文件上传的对象FileItemFactory fif=new DiskFileItemFactory();servlet文件上传上传=新servlet文件上传(fif);尝试{ ListFileItem items=上传。parserequest(请求);for (FileItem item : items) { //判断是否是普通表单控件,或者是文件上传表单控件布尔值Isform=item。is formfield();if (isForm) {//是普通表单控件字符串名称=项目。getfield name();if ('id ' .equals(name)){ id=integer。parsent(项。getStrIng(' utf-8 ');系统。出去。println(id);} if ('sex ' .equals(name)){ sex=item。getStrIng(' utf-8 ');系统。出去。println(性);} if('用户名' .等于(名称)){用户名=项目。getStrIng(' utf-8 ');System.out.println(用户名);} if('密码' .等于(名称)){密码=项目。getStrIng(' utf-8 ');System.out.println(密码);}如果('生日。equals(name)){ String DrivedayStr=item。getStrIng(' utf-8 ');simpledate格式SDF=新的simpledate格式(' yyyy-MM-DD ');尝试{生日=sdf.parse(生日字符串);} catch(ParseException e){ e . print stack trace();} System.out.println(生日);} if ('address ' .等于(名称)){地址=项目。getStrIng(' utf-8 ');System.out.println(地址);} if ('picturePath ' .equals(name)){ PicturePath=item。getStrIng(' utf-8 ');系统。出去。println(PicturePath);} } else {//是文件上传表单控件//得到文件名xxx.jpg字符串源文件名=项。//得到文件名的扩展名:jpg字符串扩展名称=源文件名。子字符串(源文件名。的最后一个索引(' . '),源文件名。length());//把文件名称重命名为全球唯一的文件名字符串唯一名称=uuid。randomuuid().toString();save filename=唯一名称扩展名称;//得到上传到服务器上的文件路径//c : \ \ Apache-Tomcat-7。0 .47 \ \ web apps \ \ taobaoServlet4 \ \上传\ \ xx。jpg字符串uploadFilePath=请求。getsession().getServletContext().getRealPath(' upload/');文件保存文件=新文件(上传文件路径,保存文件名);//把保存的文件写出到服务器硬盘上请尝试{ item。写(保存文件);} catch(异常e){ e . print stack trace();} } } } catch(numberformateexception e){//TODO自动生成的捕捉块e . print stack trace();} catch(文件上传异常e){//TODO自动生成的捕捉块e . print stack trace();} } //2、封装数据用户用户=新用户(身份证、用户名、密码、性别、生日、地址、保存文件名);//3、调用逻辑层API iuSerservice iuSerservice=new userServiceImpl();//4、控制跳转http会话会话=请求。getSession();if (iUserService.save(用户)0) { System.out.println('添加新用户成功!');列表用户用户=new Arraylistuser();users=iuserservice。listal();session.setAttribute('users ',users);回应。发送重定向(' UserServlet?action=GetPage’);} else { System.out.println('添加新用户失败!');PrintWriter out=响应。getwriter();out.print('脚本类型=' text/JavaScript ' ');out.print('alert('添加新用户失败!请重试!');');出去。打印('/script ');} }修改用户时注意考虑图片更改和没更改这两种情况,图片更改时要先获取原图片并删除其在服务器上的图片,再添加新图片到服务器;图片不更改时则无需更新图片路径。

//改公共void更新(httpersvletrequest请求,HttpServletResponse响应)引发ServletException,IOException { system。出去。println('更新方法被调用');http会话会话=请求。getSession();//获取数据int id=(int)会话。GetAttribute(' id ');字符串用户名=null字符串密码=nullString sex=null日期生日=null字符串地址=null字符串保存文件名=空;字符串picturePath=NullUserServiCe iuserServiCe=new UserServiCeImpl();//得到表单是否以enctype="多部分/表单数据"方式提交boolean is multi=servlet file upload。IsMultipartContent(请求);if (isMulti) { //通过文件工厂得到文件上传的对象FileItemFactory fif=new DiskFileItemFactory();servlet文件上传上传=新servlet文件上传(fif);尝试{ ListFileItem items=上传。parserequest(请求);for (FileItem item : items) { //判断是否是普通表单控件,或者是文件上传表单控件布尔值Isform=item。is formfield();if (isForm) {//是普通表单控件字符串名称=项目。getfield name();if ('sex ' .equals(name)){ sex=item。getStrIng(' utf-8 ');系统。出去。println(性);} if('用户名' .等于(名称)){用户名=项目。getStrIng(' utf-8 ');System.out.println(用户名);} if('密码' .等于(名称)){密码=项目。getStrIng(' utf-8 ');System.out.println(密码);}如果('生日。equals(name)){ String DrivedayStr=item。getStrIng(' utf-8 ');simpledate格式SDF=新的simpledate格式(' yyyy-MM-DD ');尝试{生日=sdf.parse(生日字符串);} catch(ParseException e){ e . print stack trace();} System.out.println(生日);} if ('address ' .等于(名称)){地址=项目。getStrIng(' utf-8 ');System.out.println(地址);} if ('picturePath ' .equals(name)){ PicturePath=item。getStrIng(' utf-8 ');系统。出去。println(PicturePath);} } else {//是文件上传表单控件//得到文件名xxx.jpg图片路径=项目。getname();if (picturePath!='') {//有选择要上传的图片//得到文件名的扩展名:jpg字符串扩展名称=PicturePath。子字符串(PicturePath。的最后一个索引(' . ')),//截取从最后一个'.'到字符串结束的子串picturepath。length());//把文件名称重命名为全球唯一的文件名字符串唯一名称=uuid。randomuuid().toString();save filename=唯一名称扩展名称;//拼接路径名//得到上传到服务器上的文件路径//c : \ \ Apache-Tomcat-7。0 .47 \ \ web app \ \ commonhellowordservlet \ \上传\ \ xx。jpg字符串uploadFilePath=请求。getsession().getServletContext().getRealPath(' upload/');文件保存文件=新文件(上传文件路径,保存文件名);//把保存的文件写出到服务器硬盘上请尝试{ item。写(保存文件);} catch(异常e){ e . print stack trace();} //3、调用逻辑层API //根据编号查询用户并获取其之前的图片用户用户=iuserservice。GetUserBYID(id);字符串oldPic=用户。getpicturepath();字符串oldPicPath=uploadFilePath ' \ \ ' oldPic;文件oldPicTodelete=新文件(oldPicPath);oldpicotodete。delete();//删除旧图片} } } } catch(NumberformatException e){ e . printstacktrace();} catch(文件uploadexception e){ e . print stack trace();} }系统。出去。println(id ' \ t ' username ' \ t ' password ' \ t ' sex ' \ t ' address ' \ t ' PicturePath ' \ t '生日);//2、封装数据用户用户=新用户(身份证、用户名、密码、性别、生日、地址、保存文件名);if (iUserService.update(用户)0) { System.out.println('修改数据成功!');列表用户用户=new Arraylistuser();users=iuserservice。listal();session.setAttribute('users ',users);//4、控制跳转回应。发送重定向(' UserServlet?action=GetPage’);} else { System.out.println('修改数据失败!');PrintWriter out=响应。getwriter();out.print('脚本类型=' text/JavaScript ' ');out.print('alert('修改数据失败!请重试!');');出去。打印('/script ');} }删除的话就比较简单了,直接获取原图片路径并删除,则原图片在服务器上被删除。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:JSP Servlet实现了上传文件到服务器的功能是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。