这篇文章主要讲解了JavaWeb servlet如何实现下载与上传功能,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
servlet实现下载功能
实现流程
1。首先制作一个jsp页面,主要是用来触发下载的。这里可以根据你的想法来做,当然servlet那边就要相应的更改了。我这里使用一个简单的一个标签来触发。
2。设置响应信息,告诉浏览器要将传过来的数据识别成下载,根据提交上来的数据找到对应文件,转成流,返回给浏览器;
中文文件名问题:
- <李>虽然真的不建议使用中文文件名。但还是给一下处理手段。李>
先给出触发的条件:
中文文件名需要解决两个问题:
1。浏览器提交上来的中文文件名要识别:这里是普通的get和post的中文数据问题
得到方式:<强>字符串文件名=新的字符串(filename.getBytes (“iso - 8859 - 1 -“),“utf-8");【tomcat8不需要】强>
发布方式:<强> request.setCharacterEncoding (“utf-8") 强>
2。返回给浏览器时,浏览器能识别,即能正确显示回来的下载文件名(如果你下载东西遇到过文件名乱码,就是这个没处理好):
处理方法:
保护无效doGet (HttpServletRequest请求,HttpServletResponse响应) 抛出ServletException IOException {//1 .获取下载目标 字符串文件名=request.getParameter (“target"); System.out.println(文件名);//2 .找到下载目标 字符串路径=getServletContext () .getRealPath(“下载/?+文件名); 文件文件=新文件(路径); 如果(file.exists ()) {//3。如果文件存在,那么设置响应的内容为下载,告诉浏览器将信息识别成下载//判断一下浏览器 字符串剂=request.getHeader (“User-Agent"); 如果(agent.contains (“Firefox")){//火狐 BASE64Encoder BASE64Encoder=new BASE64Encoder (); 文件名=,=,# 63;utf-8& # 63; B& # 63;“+ base64Encoder.encode (filename.getBytes (“utf-8")) +“, # 63;=?; 其他}{//ie和谷歌 文件名=URLEncoder。编码(文件名,“utf-8"); } response.setHeader (“Content-Disposition"“依恋;文件名=?+文件名);//4 .获取文件流 FileInputStream fis=new FileInputStream(文件); OutputStream os=response.getOutputStream ();//5 .返回给浏览器 int len=0; byte[]新字节缓冲区=[1024]; 在((len=fis.read(缓冲)!=1){ 操作系统。写(缓冲区,0,len); } os.flush();//冲洗一下,确保一下 os.close (); fis.close (); 其他}{ response.setContentType (“text/html; charset=UTF-8"); response.getWriter () .write(“找不到文件“); } }<人力资源/>
servlet实现上传功能
1。创建一个页面,用于上传:【这里只用了一个上传,但事实上下面的代码是支持多个上传的】
【当使用了<代码> enctype=代码> <代码>“多部分/form-data"之后,普通输入框的内容,将无法使用getParameter获取代码>
2。导入包,以便使用fileupload: commons-fileupload-1.2.1.jar和commons-io-1.4.jar【这里导入io包主要是用于io流对接,上传的文件流直接对接输出流,如果你不导入,那么需要手动处理流中的数据!】
3。创建DiskFileItemFactory工厂类,用来:DiskFileItemFactory工厂=new DiskFileItemFactory ();
4。创建解析类,用于解析resquest: ServletFileUpload上传=new ServletFileUpload(工厂);
5。解析内容,获取一个列表,数据都存储在列表中:List
现在信息封装方法已经跟之前没有文件上传时不一样了,所以需要解析:
6。操作列表【列表中的每一个元素都是FileItem对象,可以用FileItem对象.isFormField()来判断是否是表单项(认为文件是上传项),如果是真的话,说明是普通的输入框内容,如果你想要存储输入框提交的内容,那么这里可以处理一下,不为真说明是上传项,这里可以针对流进行操作】