如果表单中有文件要上传,也就是有<input type="file" name="name"/> 就需要在form标签中添加enctype="multipart/form-data"属性 如果添加此属性,在操作 页面servlet中,用request.getParameter("name")获取普通表单数据就会 出错java.lang.NullPointerException 可以使用FileUpload组件操作上传文件 1,导入jar包;commons-fileupload-1.2.2.jar commons-io-1.4.jar
上传jsp页面fileupload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>上传表单</title> </head> <body> <form action="${pageContext.request.contextPath }/servletupload1" method="post" enctype="multipart/form-data"> <p>用户名:<input type="text" name="username"></p> <input type="file" name="file1"/><br/> <input type="file" name="file2"/><br/> <input type="submit" value="上传"/> </form> </body> </html>
servlet页面进行操作
package com.henau.fileupload; import java.io.IOException; import java.util.Iterator; 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.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class servletupload1 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); DiskFileItemFactory factory=new DiskFileItemFactory();//磁盘工厂 ServletFileUpload upload=new ServletFileUpload(factory);//创建处理工具 if(!upload.isMultipartContent(request)){//判断是否有multipart/form-data return; } upload.setHeaderEncoding("UTF-8");//解决中文文件名乱码问题 upload.setFileSizeMax(10*1024*1024);//设置最大上传文件10M try { List<FileItem> items=upload.parseRequest(request);//获取表单列表 Iterator<FileItem> it=items.iterator();//获取列表迭代器 while(it.hasNext()){ FileItem item=it.next(); String fieldname=item.getFieldName(); if(!item.isFormField()){//isFormField()是否是普通文本 response.getWriter().write(fieldname+":文件大小:"+item.getSize()+"<br/>"); response.getWriter().write(fieldname+":文件名称:"+item.getName()+"<br/>"); response.getWriter().write(fieldname+":文件类型:"+item.getContentType()+"<br/>"); }else{ response.getWriter().write(fieldname+":普通文本数据:"+item.getString("UTF-8")+"<br/>"); } } } catch (FileUploadException e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
页面显示效果
username:普通文本数据:用户名 file1:文件大小:14 file1:文件名称:IO流.txt file1:文件类型:text/plain file2:文件大小:2621 file2:文件名称:javaSE需求.txt file2:文件类型:text/plain