java服务器文件互传数据(jsp上传文件到服务器)

java服务器文件互传数据(jsp上传文件到服务器)

对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,struts上传的功能就是基于这个实现的。common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。

如下两个jar包:

java服务器文件互传数据(jsp上传文件到服务器)

接下来就是实现文件上传

1.先写两个jsp页面,作为上传页面(upload.jsp)和消息提示页面(message.jsp),如下代码所示:

upload.jsp:

<%@ page language=”java” pageEncoding=”UTF-8″%> <!DOCTYPE HTML> <html> <head> <title>文件上传</title> </head> <body> <form action=”${pageContext.request.contextPath}/servlet/UploadHandleServlet” enctype=”multipart/form-data” method=”post”> 上传用户:<input type=”text” name=”username”><br/> 上传文件1:<input type=”file” name=”file1″><br/> 上传文件2:<input type=”file” name=”file2″><br/> <input type=”submit” value=”提交”> </form> </body> </html>

message.jsp:

<%@ page language=”java” pageEncoding=”UTF-8″%> <!DOCTYPE HTML> <html> <head> <title>消息提示</title> </head> <body> ${message} </body> </html>

2.处理文件上传的severlet(uploadhandleseverlet)代码如下:

package me.gacl.web.controller; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadHandleServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全 String savePath = this.getServletContext().getRealPath(“/WEB-INF/upload”); File file = new File(savePath); //判断上传文件的保存目录是否存在 if (!file.exists() && !file.isDirectory()) { System.out.println(savePath+”目录不存在,需要创建”); //创建目录 file.mkdir(); } //消息提示 String message = “”; try{ //使用Apache文件上传组件处理文件上传步骤: //1、创建一个DiskFileItemFactory工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //2、创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); //解决上传文件名的中文乱码 upload.setHeaderEncoding(“UTF-8”); //3、判断提交上来的数据是否是上传表单的数据 if(!ServletFileUpload.isMultipartContent(request)){ //按照传统方式获取数据 return; } //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合 // 每一个FileItem对应一个Form表单的输入项 List<FileItem> list = upload.parseRequest(request); for(FileItem item : list){ //如果fileitem中封装的是普通输入项的数据 if(item.isFormField()){ String name = item.getFieldName(); //解决普通输入项的数据的中文乱码问题 String value = item.getString(“UTF-8”); //value = new String(value.getBytes(“iso8859-1″),”UTF-8”); System.out.println(name + “=” + value); }else{//如果fileitem中封装的是上传文件 //得到上传的文件名称, String filename = item.getName(); System.out.println(filename); if(filename==null || filename.trim().equals(“”)){ continue; } //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的 //如:c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt //处理获取到的上传文件的文件名的路径部分,只保留文件名部分 filename = filename.substring(filename.lastIndexOf(“\\”)+1); //获取item中的上传文件的输入流 InputStream in = item.getInputStream(); //创建一个文件输出流 FileOutputStream out = new FileOutputStream(savePath + “\\” + filename); //创建一个缓冲区 byte buffer = new byte; //判断输入流中的数据是否已经读完的标识 int len = 0; //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据 while((len=in.read(buffer))>0){ //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + “\\” + filename)当中out.write(buffer, 0, len); } //关闭输入流 in.close(); //关闭输出流 out.close(); //删除处理文件上传时生成的临时文件 item.delete(); message = “文件上传成功!”; } } }catch (Exception e) { message= “文件上传失败!”; e.printStackTrace(); } request.setAttribute(“message”,message); request.getRequestDispatcher(“/message.jsp”).forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

3.在web.xml文件中注册uploadhandleseverlet

<servlet> <servlet-name>UploadHandleServlet</servlet-name> <servlet-class>me.gacl.web.controller.UploadHandleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadHandleServlet</servlet-name> <url-pattern>/servlet/UploadHandleServlet</url-pattern> </servlet-mapping>

文件上传成功后,保存在WEB-INF下的upload目录里。

4.文件上传需要注意的一些细节:

1、为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如放于WEB-INF目录下。

2、为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名。

3、为防止一个目录下面出现太多文件,要使用hash算法打散存储。

4、要限制上传文件的最大值。

5、要限制上传文件的类型,在收到上传文件名时,判断后缀名是否合法。

本文【java服务器文件互传数据(jsp上传文件到服务器)】由作者: 前端后端 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4403.html

(0)
上一篇 2023-03-12 08:54:48
下一篇 2023-03-12 09:03:57

相关推荐

  • openssl漏洞修复可以不卸载原openssl吗 openssl是干什么的

    OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 OpenSSL是Openssl团队的一个开源的能够实现安全套接层(SSLv2/v3)和安全传输层(TLSv1)协议的通用加密库。该产品支持多种加密算法,包括对称密码、哈希算法、安全散列算法等。 OpenSSL 常…

    2023-03-16
    100
  • c语言指针符号用键盘怎么打_c语言指针符号键盘怎样打

    摘要:如果问C语言中最重要、威力最大的概念是什么,答案必将是指针!威力大,意味着使用方便、高效,同时也意味着语法复杂、容易出错。指针用的好,可以极大的提高代码执行效率、节约系统资源;如果用的不好,程序中将会充满陷阱、漏洞。 这篇文章,我们就来聊聊指针。从最底层的内存存储空间开始,一直到应用层的各种指针使用技巧,循序渐进、抽丝剥茧,以最直白的语言进行讲解,让你…

    2023-03-09
    300
  • seo外链怎么做能看到效果

    现在很多人都在做SEO优化的时候,对它的排名位置很感兴趣,那么我们该如何实现SEO优化的霸屏效果呢? 1、关键词布局 首先我们要做的是对网站进行合理的关键词布局。比如我们在做网站排名时,会通过一些热门词来增加网站的流量和权重,但是这些词的竞争压力是非常大的,所以我们需要对这些词做好优化处理。比如我们可以把长尾词放在首页或者栏目页上,这样不仅能够提升网站的流量…

    2023-03-16
    100
  • access数据库修复命令_access数据库备份和还原

    微软的产品并不是很稳定,这是有目共睹的。 因此编制程序,一定要记得备份!否则出了问题再修复解决就麻烦了。我也吃过这样的亏,希望后来的人不犯同样的错。 现在我推荐我所使用的方法,给大家。希望对大家有所帮助。 我使用的是用rar的命令行做压缩和备份。它能够在他人使用源文件的同时进行压缩和备份,不占空间,每次运行可自动备份成不同的文件等等。 方法一: 建立一个ba…

    2023-03-13
    700
  • 配对t检验典型例题及答案_配对样本的典型例子

    配对样本均数t检验公式 例题 某研究评估咖啡因对运动者心肌血流量的影响,先后测定了12名男性志愿者饮用咖啡前后运动状态下的心肌血流量,数据如表所示,问饮用咖啡前后运动者的心肌血流量有无差异。 解析 配对设计资料具有对子内数据一一对应的特征,研究者应关心对子的效应差值而不是各自的效应值。因此进行配对t检验时,首先应计算各对数据间的差值d,将d作为变量计算均数。…

    2023-03-20
    100
  • python爬虫有什么用处_python爬虫要学多久

    首先,Python语言是比较适合自学的,一方面Python语言的语法比较简单,另一方面Python语言的应用场景非常多,相关的开发案例也非常多。Python作为当前流行程度比较高的全场景编程语言,在未来的工业互联网时代会有大量的应用,而且与Java语言主要应用在IT互联网行业不同,Python语言在传统行业领域也有广泛的应用。 自学Python可以按照以下几…

    2023-03-10
    300
  • c语言scanf输入浮点型_double类型用scanf输入

    程序是人机交互的媒介,有输出必然也有输入,我们开始讲解如何从键盘输入数据。在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。 getchar()、getche()、getch():这三个函数都用于输入单个字符。 gets():获取一行数据,并作为字符串处理。 scanf() 是…

    2023-03-08
    700
  • 如何安装linux镜像文件

    【六】安装管理应用程序 6.1应用程序与系统命令的关系 典型应用程序的目录结构 常见的软件包封装类型 6.2 RPM软件包 RPM Package Manager 由Red Hat公司提出,被众多Linux发行版所采用,建立统一的数据库文件,详细记录软件包安装、卸载等变化信息,能够自动分析软件包依赖关系。 RPM软件包一般命名格式: RPM命令格式 几个常用…

    2023-03-09
    600
  • php国外是不是没人用了

    「有人的地方就有江湖,有江湖的地方必然有纷争。」 在昨日发布的《Android 告急》一文中,曾于 Google 工作了 13 年技术人 Steve Yegge 揭露,在 Google 内部不为外人所熟知的技术圈中,存在一种难以想象的“鄙视链”,即高高在上的是用着 C++ 写搜索引擎的工程师,而他们自认为要 Java 工程师酷,再者 Java 要比 Pyth…

    2023-03-20
    000
  • 鼠标指针代码是什么

    鼠标指针形状在Excel中有多种形式,实际上在操作系统中也有不同样式,只不过,我们在使用的时候并不注意如何修改。 本节就对Excel中的鼠标指针形式选择,做一个介绍,没有实际意义,但有时候也会用到。 如上图所示,Excel给出了4种鼠标样式: 常量 值 说明 xlDefault -4143 默认指针 xlIBeam 3 I形指针 xlNorthwestArr…

    2023-03-16
    200

发表回复

登录后才能评论
返回顶部
错说博客上线啦!