Servlet编程专题11之Servlet3.0特性实现文件上传

- 使用Servlet3.0实现文件上传,不需要借助第三方的jar包。

1、在index.jsp文件中编写文件上传的表单:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
	<title>Insert title here</title>
	<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body>
  	<form action="${pageContext.request.contextPath }/uploadServlet" method="POST" enctype="multipart/form-data">
  		文件:<input type="file" name="photo" /> <br>
  		<input type="submit" value="上传" />
  	</form>
  </body>
</html>

2、需要在对应的自定义Servlet类中添加相应代码:

package com.geeklicreed.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@WebServlet("/uploadServlet")
@MultipartConfig // 表明当前Servlet可以处理Multipart请求
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public UploadServlet() {
		super();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 获取服务器保存上传文件的目录路径
		String path = this.getServletContext().getRealPath("images");
		System.out.println(path);
		// 从请求中获取Multipart请求中的上传文件“部分”
		Part part = request.getPart("photo");
		//获取指定的头部属性
		String header = part.getHeader("Content-Disposition");
		System.out.println(header);

		int index = header.lastIndexOf("=");
		String fileName = header.substring(index + 2, header.length() - 1);
		System.out.println(fileName);

		fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
		System.out.println(fileName);
		// 完成文件上传
		part.write(path + "/" + fileName);

		/*
		        我电脑中的输出结果为:
		 	C:\Users\Administrator\Workspaces\MyEclipse 2016 CI\.metadata\.me_tcat7\webapps\fileUpload\images
			form-data; name="photo"; filename="C:\Users\Administrator\Desktop\魔术格言.txt"
			C:\Users\Administrator\Desktop\魔术格言.txt
			魔术格言.txt
		 */
	}

}

-  代码解析:

-  javax.servlet.http.HttpServletRequest接口中的getPart(java.lang.String name)方法用于获取给定名称的Part对象:(即用<input type="file" name="photo"/>表单组件中的name属性来获取Part对象)

 Part getPart(java.lang.String name)
Gets the Part with the given name.

-  javax.servlet.http.Part接口:

-  这个接口代表用于接收multipart/form-data POST请求的部分或者单项。(只用于Serlvet3.0)

This class represents a part or form item that was received within a 
multipart/form-data POST request.

Since:
Servlet 3.0

-  该接口中主要用到的方法为:

-  getHeader(java.lang.String name)方法:获取指定名称的请求头部信息,作为字符串返回。

java.lang.String getHeader(java.lang.String name)
Returns the value of the specified request header as a
String.

-  write(java.lang.String fileName)方法:一个便捷的方法用于将上传的文件写入硬盘中。

 void write(java.lang.String fileName)
A convenience method to write this uploaded item to disk.

3、在myEclipse自带的浏览器中访问index.jsp页面。可以看到,在运行的tomcat对应的硬盘目录中已经上传:

-  附加说明:

-  在myEclipse中,默认会把Web项目放到Eclipse的工作空间下的.metadata\.me_tcat7\webapps。(在myEclipse中指定服务器为tomcat7)

时间: 2024-10-08 10:34:44

Servlet编程专题11之Servlet3.0特性实现文件上传的相关文章

Servlet3.0简化实现文件上传

注意事项 POST请求可以传输二进制数据,而GET只能传输文本信息 form表单标签中声明属性 enctype="multipart/form-data" 给Servlet添加注解@MultipartConfig,开启Servlet3.0文件上传组件开关 Servlet实现 @WebServlet(name = "UploadServlet",value = "/upload") @MultipartConfig public class Upl

用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传

第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三部分: https://www.cnblogs.com/cgzl/p/8525541.html 第四部分: https://www.cnblogs.com/cgzl/p/8536350.html 这部分就讲从angular5的客户端上传图片到asp.net core 2.0的 web api. 这是

中文乱码问题(使用Servlet3.0新特性实现文件上传——上传文件名中文乱码问题)

问题描述:就是文件传送过来的文件名等是乱码 解决方法:将传送的JSP页面(即含有表单的页面)的页面编码方式改为: <%@ page contentType="text/html; charset=GB2312" language="java" import="java.sql.*" errorPage="" %> <meta http-equiv="Content-Type" conten

ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)

Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uploading files is a common requirement in web applications. In ASP.NET Core 1.0 uploading files and saving them on the server is quite easy. To that end

express4.0以上版本文件上传

发现很多node的书介绍express文件上传都是基于3.*版本的, 现在express的版本都是4.+的,很多以前的代码跑不动了 所以自己折腾了个小demo 实现了限制上传文件种类和大小 例子是基于formidable模块的 github地址为https://github.com/felixge/node-formidable var express = require('express'); var formidable = require('formidable'); var router

【自动化专题】selenium如何轻松搞定文件上传

使用selenium做自动化时,我们经常会遇到的一个让人头疼的问题就是文件上传. 问题的难点在于selenium无法识别并操作Windows窗口,若我们可以绕过弹出框直接把文件信息上传给选择按钮,难点就解决了. 以下是常见页面形式: 分析HTML,发现无论是普通前台还是Extjs,他们的html有一个共同的特点,具有以下代码: <input ..... type="file" ...../> ok,只要我们使用selenium自带的sendkeys把文件路径(相对绝对无所谓

【Servlet】利用Servlet3.0标准与JSTL表达式实现文件上传系统,支持图片上传后显示

伴随着JDK1.6一起出现的Servlet3.0标准,使得JSP的文件上传系统不再艰难,此前在JSP的文件上传系统需要<[Jsp]使用jspsmartupload完成简单的文件上传系统>(点击打开链接)类似这样的插件才能完成的文件上传系统,还不支持中文,使得各位程序猿掏空心思才能解决这个问题.现在Servlet3.0对文件上传的方法进行封装,无须分块就可以实现.而且Servlet3.0还不用类似<[Servlet]最简单的Servlet JavaWeb程序>(点击打开链接)在web

使用Servlet3.0提供的API实现文件上传

在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了. 一.使用Servlet3.0提供的API实现文件上传 1.1.编写上传页面 1 <%@ page language="java" pageEncoding="UTF-8"

jsp Servlet 3.0文件上传

Servlet 3.0之前上传文件一般都要借助与第三方插件上传,有了servlet3.0后,上传文件从此变得简单.老规矩,直接上代码. 1.建立一个index.jsp用于表单提交 1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html PUBLIC "-//W3