servlet上传多个文件(乱码解决)

首先,建议将编码设置为GB2312,并在WEB-INF\lib里导入:commons-fileupload-1.3.jar和commons-io-2.4.jar,

可百度下下载,然后你编码完成后,上传时可能会遇到"servlet Bad version number in .class file"错误。

解决:

1.Window --> Preferences -->Java --> compiler中的compiler compliance level对应的下拉菜单中选择JDK版本.

2.Window --> Preferences -->MyEclipse --> Servers-->Tomcat --> Tomcat n.x -->JDK中的Tomcat JDKname下的下拉菜单中选择自己电脑上安装的JDK版本(必须与步骤1中的JDK版本一致).

如果还是没有解决,不用着急,因为有些MyEclipse版本自带有JDK版本,所以也要将它改过来.

3.Window --> Preferences -->Java -->Installed JRES,然后在右边选择与步骤1和2版本一致的JDK版本,如果没有,可以自己添加.然后选中就可以了.

4、.Window --> Preferences -->MyEclipse --> Servers-Resin 3-Resin 3.x-JDK-Resin jdk name:选择jdk1.6.0_03

1.前台jsp:

enctype="multipart/form-data"

  <body style="margin:50px">
  <form action="servlet/UploadServlet" method="post" enctype="multipart/form-data">
     <p>上传文件:</p>
     文件1:<input type="file" name="file1" /><br/>
     描述:<input type="text" name="description1" /><br/>
     文件2:<input type="file" name="file2" /><br/>
    描述:<input type="text" name="description2" /><br/>
  <input type="submit" value=" 上  传 " />  
  </form>
  </body>  

2.后台action:

public class UploadServlet extends HttpServlet {       
    public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
         response.setCharacterEncoding("GB2312");  
         response.getWriter().println("<script>alert('请用POST方式上传文件!')</script>");  
    }    
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        File file=null;  
        String description=null;  
          
        String uploadPath=this.getServletContext().getRealPath("upload");  
        String uploadTemp=this.getServletContext().getRealPath("upload/temp"); 
//设置响应格式(不设置请求格式,因为文件是二进制的,不能使用UTF-8格式化) response.setContentType("text/html;charset=gb2312"); PrintWriter out=response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println("<HEAD><TITLE>文件上传</TITLE></HEAD>"); out.println("<BODY style='margin:50px'>"); out.println("上传日志:<BR/>");
//创建基于磁盘的工厂,针对大文件,临时文件将存储在磁盘 DiskFileItemFactory factory=new DiskFileItemFactory(); //设置缓冲区大小,超出该文件直接写入到磁盘的大小设置门槛。 factory.setSizeThreshold(10240); //这里默认10KB //设置用于大于配置的大小阈值设置的临时存储文件目录。 factory.setRepository(new File(uploadTemp)); //创建一个文件上传的句柄 ServletFileUpload upload=new ServletFileUpload(factory); //设置最大文件尺寸 ,这里是4MB upload.setSizeMax(4194304); upload.setHeaderEncoding("GB2312"); try { //将解析结果放在LIST中 List<FileItem> list =upload.parseRequest(request); out.println("遍历所有的 FileItem ... <br/>"); // 遍历 list 中所有的 FileItem for(FileItem item:list) { // 如果是 文本域 if(item.isFormField()) { if(item.getFieldName().equals("description1")||item.getFieldName().equals("description2")) { description = item.getString("GB2312"); out.println("遍历到 "+item.getFieldName()+" ... <br/>"+description+"<BR/>"); } } else { //否则为文件域,当getName为Null说明没有选则文件 if((item.getFieldName().equals("file1")||item.getFieldName().equals("file2")) &&item.getName()!=null&&!item.getName().equals("")) { try { File remoteFile=new File(item.getName()); out.println("遍历到 file ... <br/>"); out.println("客户端文件位置: " + remoteFile.getAbsolutePath() + "<br/>"); // 服务器端文件,放在 upload 文件夹下 file=new File(uploadPath,remoteFile.getName()); if(!file.getParentFile().exists()) file.getParentFile().mkdirs(); if(!file.exists()) file.createNewFile(); item.write(file); } catch (Exception e) { } finally //总是立即删除保存表单字段内容的临时文件 { item.delete(); } } } } out.println("Request 解析完毕,文件上传完毕!"); } catch (Exception e) { out.println("Request 解析异常!"+e.getMessage()); } out.flush(); out.close(); }
}

web.xml

新建servlet的时候,会自动配置文件  

剖析Commons-fileupload.jar上传原理,解决中文乱码原因  

转载于:https://www.cnblogs.com/estellez/p/4110156.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现JSP和Servlet上传多个文件并回显,可以参考以下步骤: 1. 在JSP页面中添加一个表单,包含一个文件上传输入框和一个提交按钮。 ```html <form action="uploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="files[]" multiple="multiple" /> <input type="submit" value="上传" /> </form> ``` 2. 在Servlet中处理文件上传逻辑,将上传文件保存到服务器的指定目录中。 ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上传文件的集合 List<Part> parts = (List<Part>) request.getParts(); // 遍历所有上传文件 for (Part part : parts) { // 获取上传文件文件名 String fileName = part.getSubmittedFileName(); // 将上传文件保存到服务器指定目录 part.write("D:\\" + fileName); } // 回显上传成功信息 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<h3>文件上传成功!</h3>"); } ``` 3. 在JSP页面中显示上传成功信息和上传文件列表。 ```html <%-- 显示上传成功信息 --%> <% if (request.getParameter("message") != null) { %> <div class="message"><%= request.getParameter("message") %></div> <% } %> <%-- 显示上传文件列表 --%> <% File uploadDir = new File("D:\\"); %> <% if (uploadDir.exists()) { %> <ul class="file-list"> <% for (File file : uploadDir.listFiles()) { %> <li><%= file.getName() %></li> <% } %> </ul> <% } %> ``` 4. 在CSS文件中定义样式。 ```css .message { color: green; font-weight: bold; } .file-list { list-style: none; margin: 0; padding: 0; } .file-list li { margin: 5px 0; padding: 5px; background-color: #EEE; } ``` 这样就可以实现JSP和Servlet上传多个文件并回显的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值