JSP和HTML标签一起使用,来允许用户把文件上传到服务器。
首先我们需要创建一个前端界面,创建上传文件表单时,需要注意以下几点:
(1) 表单的method属性必须设置为POST方法, 不能使用GET方法。
(2) 表单enctype属性应该设置为multipart/form-data。
(3) 表单action属性应设置为对应的Servlet,Servlet包含处理上传文件的代码。
(4) 使用<input/>标签上传单个文件,属性type设置为file,上传多个文件需要添加多个input标签。
前端我们使用html页面来实现,首先新建一个upload.html,该html的内容如下
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<!--文件上传表单-->
<form method="post" enctype="multipart/form-data" action="uploadServlet">
姓名:<input type="text" name="uname"><br>
文件:<input type="file" name="myfile"><br>
<button>提交</button>
</form>
</body>
</html>
其中button的默认类型是提交类型,type=”submit”。在该表单中普通的表单项使用type=”text”,附件类型的表单项使用type=”file”。不要忘了设置表单元素的name属性,表单提交一定要设置表单元素的name属性,否则后台无法接收数据。
接下来需要准备接收表单数据的Servlet。首先创建一个UploadServlet,该Servlet的具体代码如下
@WebServlet("/uploadServlet")
@MultipartConfig //如果是文件上传,需要设置该注解
public class UploadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("文件上传...");
//设置请求的编码格式
request.setCharacterEncoding("UTF-8");
//获取普通表单项
//此处uname和表单元素的name属性相对应
String uname = request.getParameter("uname");
System.out.println("uname: " + uname);
//获取Part对象,Servlet将multipart/form-data的POST请求封装成Part对象
Part part = request.getPart("myfile");
//通过Part对象得到上传的文件名
String fileName = part.getSubmittedFileName();
System.out.println("上传文件名:" + fileName);
//得到文件的存放路径
String filePath = request.getServletContext().getRealPath("/");
//保存文件到制定目录
part.write(filePath + "/" + fileName);
}
}
使用@MultipartConfig 注解将一个Servlet标记为支持文件上传。
启动该Web应用,在浏览器地址栏中输入URL: http://localhost:8080/s001/upload.html
在“姓名”输入框中输入测试文本,并选择一个文件进行上传,在下图所示路径下可以看到上传的文件