(jsp和Servlet 功能篇) Servlet 实现文件上传

2023-11-17

在开发过程中用得比较多的上传组件是commons-fileupload和japSmartUpload,这两个组件都可以很好的完成文件上传的功能!

此例用commons-fileupload.这个组件在http://jakarta.apache.org/右边的搜索里面就能找到,顺带下载commons-io,commons-fileupload组件需要它的支持!将这两个组件的jar包放到项目的WEB-INF/lib文件夹,此时commons-fileupload组件的配置就算完成了!下面贴上源码....

 

上传文件(servlet)代码:

 

package com.rf.upload;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
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.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		// 判断提交过来的表单是否为文件上传菜单
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		// 上传文件
		if (isMultipart) {
			// 构造一个文件上传处理对象
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);
			// 迭代类
			Iterator items;
			try {
				// 解析表单中提交的所有文件内容
				items = upload.parseRequest(request).iterator();
				while (items.hasNext()) {
					FileItem item = (FileItem) items.next();
					// 取出上传文件的文件名称
					String name = item.getName();
					// 取得上传文件以后的存储路径
					String fileName = name.substring(
							name.lastIndexOf('\\') + 1, name.length());
					// 上传文件以后的存储路径(Tomact项目部署创建file文件)
					String path = request.getRealPath("file")
							+ File.separatorChar + fileName;
					// 上传文件
					File uploaderFile = new File(path);
					item.write(uploaderFile);
					// 打印上传成功信息
					response.setContentType("text/html");
					response.setCharacterEncoding("GB2312");
					PrintWriter out = response.getWriter();
					out.print("<font size='2'>上传文件为:" + name + "<br>保存的地址为"
							+ path + "</font>");
				}

			} catch (Exception e) {
				e.printStackTrace();
			}

		}

	}

	@Override
	public void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(req, resp);
	}

}


页面代码(jsp):

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title>My JSP 'index.jsp' starting page</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	</head>

	<body>
		<!-- enctype 默认是 application/x-www-form-urlencoded -->
		<form action="FileUpload" enctype="multipart/form-data" method="post">
			上传文件:
			<input type="file" name="file1">
			<br />
			<input type="submit" value="提交" />
		</form>
	</body>
</html>


结果截图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(jsp和Servlet 功能篇) Servlet 实现文件上传 的相关文章

  • MySQL数据库——DDL基本操作

    文章目录 前言 数据库操作 查看已存在的所有数据库 创建数据库 选中数据库 删除数据库 修改数据库编码 表操作 创建表 显示创建表时的语句 显示表结构 删除表 修改表的结构 增加列 修改列 删除列 修改表名 前言 DDL 操作是与数据库结构
  • Makefile执行报错——CONFIG_X86_X32 enabled but no binutils support

    错误描述 在学习Linux驱动的时候 编写完一个demo 执行make的时候 报了如标题所示的错误 使用的makefile如下 KERNELDIR lib modules uname r build hello world objs hel
  • ESP8266_MQTT协议

    1 了解下MQTT协议 虽然上一篇用起来了MQTT 但是并不十分了解 基本就局限于 发布主题是发送数据 订阅主题是接收数据 今天就再好好了解一下吧 分享下网页版的 MQTT协议中文版 链接 Introduction MQTT协议中文版 1

随机推荐

  • HTTP 字体跨域问题

    一 背景介绍 最近在做公用菜单时 由于除了提供给子应用系统html代码外还需要提供样式 脚本 样式中涉及到了字体 跨域的情况下 样式脚本都可以正常访问 但是字体访问就会出现跨域问题了 二 问题描述 问 什么是字体跨域 答 就是你所引用css
  • unity和VS2019联调问题解决

    以前使用VS2015和17的时候联调的时候是可以附加到unity进行联调的 今天用的2019发现不可以了 研究了一下是少装了一个插件 装上插件就解决了 过程如下 当前使用VS版本2019企业版 如图 更多内容请关注微信公众号 unity风雨
  • 《Android面试题及解析》分享,一文带你搞懂Android多线程Handler

    网易游戏 严格来说我投的是网易互娱 区别于雷火 盘古 后面再说更多区别 走的内推 网易游戏以其笔试难度大著名 这次也不例外 所有的内推都要求参加统一笔试 我记得笔试有几场 我是在第一场 内推的岗位是网易游戏最核心的 游戏研发工程师 地点是杭
  • Call to localhost/127.0.0.1:9000 failed on connection exception错误。

    解决方案 1 首先查看hdfs site xml配置文件 如下面所示
  • nginx+tomcat实现代理访问java web项目

    最近由于部署考试系统 遇到一系列问题 由于Ubuntu上软件安装的混乱 参考的博客过于坑爹 所以环境配置的乱七八糟 在一个午夜 把一根烟抽的透透的 然后开始重装了一次系统 使用的Ubuntu 16 04LTS 由于时间原因一直没有吧我的这个
  • 用acme.sh申请免费ssl证书-let‘s encrypt

    这个是申请泛域名证书 移动端和电脑端直接用这个就可以了 不需要分开申请 安装脚本 curl https get acme sh sh 进入 cd acme sh 看下目录有什么 root csdn ls adl acme sh drwx 8
  • CO_XT_COMPONENTS_DELETE 删除工单组件

    REPORT zdtest6 判断是否有原始组件 如有全删 DATA ls return TYPE coxt bapireturn DATA lt resbkeys TYPE coxt t resbdel lt return TYPE ST
  • RabbitMQ--扩展--03--日志文件,故障恢复,集群迁移,集群监控

    RabbitMQ 扩展 03 日志文件 故障恢复 集群迁移 集群监控 1 RabbitMQ日志查看 如果在使用RabbitMQ 的过程中出现了异常情况 通过查看RabbitMQ 的服务日志可以让你在处理异常的过程中事半功倍 RabbitMQ
  • python基础—字符串操作

    1 字符串 Python内置了一系列的数据类型 其中最主要的内置类型是数值类型 文本序列 字符串 类型 序列 列表 元组和range 类型 集合类型 映射 字典 类型 本章在介绍字符串 列表 元组和range类型共有的通用序列操作方法的基础
  • 常用的相似度计算方法原理及实现

    在数据分析和数据挖掘以及搜索引擎中 我们经常需要知道个体间差异的大小 进而评价个体的相似性和类别 常见的比如数据分析中比如相关分析 数据挖掘中的分类聚类 K Means等 算法 搜索引擎进行物品推荐时 相似度就是比较两个事物的相似性 一般通
  • 笔记本计算机bios设置,联想笔记本BIOS设置详解

    大部分用户朋友遇到系统损坏时 不得不选择重装系统这样简单粗暴快的方式来解决 然而在准备重装时却遇到BIOS设置难题 不得不求助网络上各路大神 却还是没能真正得到帮助 下面快启动小编为大家分享联想笔记本BIOS设置详解 希望能为大家排忧解难
  • 一些杂七杂八的概率统计基础(变分推断所需)

    在开始之前要了解以下这个统计学中背景知识 贝叶斯学派与频率学派 极大似然估计学派 最大的区别就是 贝叶斯学派认为参数 不是一个确定值 而是一个随机变量 且随机变量一定是服从某个分布的 在概率统计中 随机变量 随机数量 变量中的值是随机现象的
  • 莫烦强化学习视频笔记:第五节 5.2 Policy Gradients 算法更新和思维决策

    目录 1 要点 2 算法流程 3 算法代码形式 3 1 算法更新 3 2 思维决策 3 2 1 初始化 3 2 2 建立 Policy 神经网络 3 2 3 选行为 3 2 4 存储回合 3 2 5 学习 1 要点 Policy gradi
  • linux vim/vi 跳转到最后一行 跳转快捷键

    vim vi操作 跳到文本的最后一行 按 G 即 shift g 跳到文本的第一行的第一个字符 按两次 g 跳到当前行的最后一个字符 在当前行按 键 即 shift 4 跳到当前行的第一个字符 在当前行按 0
  • 《数字图像处理》笔记

    目录 第1章 绪论 1 1 图像概述 1 1 1 基本概念和术语 1 1 2 不同波段的图像示例 1 1 3 不同类型的图像示例 1 2 图像工程概述 1 2 1 图像工程的三个层次 1 3 图像表示和显示 1 3 1图像和像素的表示 1
  • Vue使用babel-polyfill兼容IE解决白屏及语法报错

    解决vue elementUI项目使用webpack打包上线后 服务器环境下IE报语法错误及白屏问题 在最近的项目中 在使用webpack打包后发布 有用户反馈使用IE浏览器访问会白屏 这就不能忍受了 经过排查发现 发生这个错误应该是有文件
  • Theos(七):常见问题

    目录 Theos 故障排除 Theos Troubleshooting 空的 THEOS 环境变量或者损坏的符号链接 Empty THEOS or corrupt symlink 缺少 SDK Missing SDK SDK 体积过小 Sm
  • js逆向之浏览器控制台

    js逆向之浏览器控制台 首先介绍一下浏览器控制台的使用 以开发者使用最多的chrome为例 Windows操作系统下的F12键可以打开控制台 mac操作系统下用Fn F12键打开 我们选择平时使用较多的模块进行介绍 2 1 Network
  • 详解HashMap+源码讲解(慎看!!!)

    HashMap 一 Map 1 关于Map的说明 2 Map常用方法说明 二 了解HashMap原理 自己实现 1 常用方法说明 使用 会用就行 1 实现一个HashMap对象 2 调用 put k v 3 调用 get k 2 什么是哈希
  • (jsp和Servlet 功能篇) Servlet 实现文件上传

    在开发过程中用得比较多的上传组件是commons fileupload和japSmartUpload 这两个组件都可以很好的完成文件上传的功能 此例用commons fileupload 这个组件在http jakarta apache o