Spring MVC-表单(Form)标签-文件上传(File Upload)示例(转载实践)

2023-10-27

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_upload.htm

说明:示例基于Spring MVC 4.1.6

以下示例显示如何使用Spring Web MVC框架在表单中使用文件上传控件。首先,让我们使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态窗体的Web应用程序:

步骤 描述
1 创建一个名为HelloWeb的项目,在一个包com.tutorialspoint下,如Spring MVC - Hello World Example章节所述。
2 在com.tutorialspoint包下创建一个Java类FileModel,FileUploadController。
3 在jsp子文件夹下创建一个视图文件fileUpload.jsp,success.jsp。
4 在WebContent子文件夹下创建一个文件夹temp。
5 下载Apache Commons FileUpload库commons-fileupload.jar和Apache Commons IO库commons-io.jar。把它们放在你的CLASSPATH中。
6 最后一步是创建所有源和配置文件的内容并导出应用程序,如下所述。

FileModel.java

package com.tutorialspoint;

import org.springframework.web.multipart.MultipartFile;

public class FileModel {
   private MultipartFile file;

   public MultipartFile getFile() {
      return file;
   }

   public void setFile(MultipartFile file) {
      this.file = file;
   }
}

FileUploadController.java

package com.tutorialspoint;

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.FileCopyUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class FileUploadController {
    
   @Autowired
   ServletContext context; 

   @RequestMapping(value = "/fileUploadPage", method = RequestMethod.GET)
   public ModelAndView fileUploadPage() {
      FileModel file = new FileModel();
      ModelAndView modelAndView = new ModelAndView("fileUpload", "command", file);
      return modelAndView;
   }

   @RequestMapping(value="/fileUploadPage", method = RequestMethod.POST)
   public String fileUpload(@Validated FileModel file, BindingResult result, ModelMap model) throws IOException {
      if (result.hasErrors()) {
         System.out.println("validation errors");
         return "fileUploadPage";
      } else {            
         System.out.println("Fetching file");
         MultipartFile multipartFile = file.getFile();
         String uploadPath = context.getRealPath("") + File.separator + "temp" + File.separator;
         //Now do something with file...
         FileCopyUtils.copy(file.getFile().getBytes(), new File(uploadPath+file.getFile().getOriginalFilename()));
         String fileName = multipartFile.getOriginalFilename();
         model.addAttribute("fileName", fileName);
         return "success";
      }
   }
}

 HelloWeb-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package="com.tutorialspoint" />

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>
 
   <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
</beans> 

这里第一个服务方法fileUploadPage(),我们已经通过名为“command”的ModelAndView对象中传递了一个空的FileModel对象,因为如果您在JSP中使用<form:form>标签,Spring框架会期望一个名为“command”的对象文件。所以当fileUploadPage()方法被调用时,它返回fileUpload.jsp视图。

将在HelloWeb/fileUploadPage URL上针对POST方法调用第二个服务方法fileUpload()。您将根据提交的信息准备要上传的文件。最后,将从服务方法返回“success”视图,这将导致渲染success.jsp。

fileUpload.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<title>File Upload Example</title>
</head>
<body>
   <form:form method="POST" modelAttribute="fileUpload" enctype="multipart/form-data">
      Please select a file to upload : 
      <input type="file" name="file" />
      <input type="submit" value="upload" />
   </form:form>
</body>
</html>

这里我们使用带有value =“fileUpload”的modelAttribute属性将文件上传控件与服务器模型进行映射。

success.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>File Upload Example</title>
</head>
<body>
   FileName : 
   <b> ${fileName} </b> - Uploaded Successfully.
</body>
</html>

完成创建源文件和配置文件后,导出应用程序。右键单击应用程序并使用Export->WAR File选项,并将您的HelloWeb.war文件保存在Tomcat的webapps文件夹中。

现在启动您的Tomcat服务器,并确保您可以使用标准浏览器从webapps文件夹访问其他网页。现在尝试URL http://localhost:8080/HelloWeb/fileUploadPage,如果您的Spring Web应用程序的一切都很好,您应该会看到以下结果:

提交所需信息后,点击提交按钮提交表单。如果您的Spring Web应用程序的一切都很好,您应该会看到以下结果:

Maven示例:

https://github.com/easonjim/5_java_example/tree/master/springmvc/tutorialspoint/test15 

转载于:https://www.cnblogs.com/EasonJim/p/7482670.html

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

Spring MVC-表单(Form)标签-文件上传(File Upload)示例(转载实践) 的相关文章

  • 使用 JPA/ORM 生成数据库模式是一个坏主意吗?

    Salve Part of 另一个问题 答案 https stackoverflow com questions 7595578关于 SO 以及其他声称相同的声明 如果您通过 JPA 更新数据库架构 但通常不是一个好的做法 您是否真的不应该
  • Grizzly 和 Servlet 容器上下文

    我试图在我编写的 在 Grizzly 上运行的 Servlet 中获取一些注入的上下文 例如 Session 或 HttpServletRequest 但我所做的似乎都不起作用 整个过程似乎过早地停止了 并出现以下错误 SEVERE Mis
  • AbstractCollection 的 toArray 方法的实现中的代码有什么用

    public Object toArray Estimate size of array be prepared to see more or fewer elements Object r new Object size Iterator
  • Java 的 System.arraycopy() 对于小数组有效吗?

    是Java的System arraycopy 对于小数组来说是高效的 或者它是本机方法这一事实是否使其可能比简单的循环和函数调用效率低得多 本机方法是否会因跨越某种 Java 系统桥梁而产生额外的性能开销 稍微扩展一下 Sid 所写的内容
  • 使用 Hibernate 或 Spring 打印 DBMS_OUTPUT.put_line

    我想知道 Hibernate 或 Spring 或任何第 3 方库是否提供将 DBMS OUTPUT put line 消息直接打印到 system out 或日志文件的能力 目的是在控制台中同时显示 PLSQL 日志消息和 java 日志
  • 如何限制用户键入时 JTextPane 中的字符数 (Java)

    我需要不允许在输入 X 后输入任何字符 我需要在输入 X 个字符后发出蜂鸣声 我知道如何在用户按 Enter 键后执行此操作 但我需要在用户按 Enter 键之前执行此操作 我从 Oracle 站点找到的方法是将 DocumentSizeF
  • 寻找 WebElements,最佳实践

    在我们当前的自动化 使用 Selenium WebDriver Java 中 我们使用 FindBy very广泛地 例如 FindBy css a name bcrumb protected List
  • 将位于 jar 中的文件读取为 java.io.File 对象

    与此类似的问题已发布 但似乎没有一个答案对我的情况有帮助 我正在编写一个程序包 它使用 Google 的凭据来获取 Google Apps 用户 为此 我使用服务帐户 因此为了检索凭据 我需要提供 除其他外 一个 p12 签名文件 Cred
  • splitByWholeSeparatorPreserveAllTokens 和 split 之间的区别

    有什么区别StringUtils splitByWholeSeparatorPreserveAllTokens and String split With splitByWholeSeparatorPreserveAllTokens 我们可
  • java中main的返回类型

    我想知道为什么java中main方法只有void返回类型 public static void main String args 为什么main方法除了void之外没有其他返回类型 Thanks 简短的回答是 因为这就是语言规范 http
  • 使用 eclipse 配置mockito 时出现问题。给出错误:java.lang.verifyError

    当我将我的mockito库添加到类路径中 并使用一个简单的mockito示例进行测试时 我尝试使用模拟对象为函数add返回错误的值 我得到java lang verifyerror 以下是用于测试的代码 后面是 logcat Test pu
  • 将 @RequestLine 与 Feign 一起使用

    我有一个工作 Feign 接口定义为 FeignClient content link service public interface ContentLinkServiceClient RequestMapping method Requ
  • 在Java程序中计算zip文件的md5哈希值

    我有一个 zip 文件 在我的 Java 代码中我想计算 zip 文件的 md5 哈希值 有没有我可以用于此目的的 java 库 一些例子将非常感激 谢谢 几周前我通过这篇文章做到了这一点 http www javalobby org ja
  • 如何强制初始化 Hibernate JPA 代理以在 JSON 调用中使用它

    我有一个 Spring 3 JPA 2 0 应用程序 在我的 Controller我需要一个初始化的对象 但我有代理 我需要能够以编程方式初始化它 我需要类似的功能org hibernate Hibernate initialize Obj
  • 如何检测java控制台中而不是GUI中的箭头键? [复制]

    这个问题在这里已经有答案了 我正在编写一个应用程序 我需要检测其中的箭头键 C 有getch 函数 我们想要获取输入 然后添加对 ASCII 值的检查 我们如何检测输入箭头键 谢谢 我写了一个Java类原始控制台输入 http www so
  • JTable中动态加载大量数据

    这是我的问题 我目前有一个 JTable 其中包含 5 000 到超过 200 000 行 你知道我要说什么了 数据已经加载到内存中了 这不是问题 但是如何 我可以创建一个高效的 JTable 以便它只加载以下行 是可见的 并且任何事件仅作
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下
  • 用于从链表中删除元素的大 O 表示法[重复]

    这个问题在这里已经有答案了 我正在阅读有关链接列表的内容 我发现 从链表中删除所需的元素需要 O n 运行时间 其中 n 是元素的数量 列表中的元素 http www cs mcgill ca dprecup courses IntroCS
  • Spring 和 Hibernate 连接池

    如何使用 Spring 和 Hibernate 配置连接池 Thanks Venu 您可以使用 DBCP 组件
  • 生成签名和加密的 JWT

    我正在尝试使用生成签名和加密的 JWT 令牌雨云智威汤逊 http connect2id com products nimbus jose jwt private void generateToken throws JOSEExceptio

随机推荐

  • CMake:Tutorial-Step4

    Step4 Installing and Testing 安装和测试 本小结简介简单的安装和测试命令配置 0 安装规则 安装语法很简单 对于MathFunctions我们想要的是安装库和头文件 对于应用程序我们想要的是安装可执行程序和con
  • 跳跃游戏-计蒜客

    给定一个非负整数数组 假定你的初始位置为数组第一个下标 数组中的每个元素代表你在那个位置能够跳跃的最大长度 请确认你是否能够跳跃到数组的最后一个下标 例如 A 2 3 1 1 4 A 2 3 1 1 4 能够跳跃到最后一个下标 输出true
  • 人口生育老龄化政策数据表(1971-2023年)

    人口生育老龄化政策是指政府为应对人口老龄化现象 通过制定一系列政策措施 促进人口增长 优化人口结构和保障老年人福利的过程 人口生育老龄化政策数据表可以进行以下科研 1 人口增长政策 政府采取 鼓励生育的措施 如提供生育津贴 延长产假 提高生
  • RAM、ROM、SRAM、DRAM、SSRAM、SDRAM、FLASH、EEPROM的区别

    RAM Random Access Memory 随机存储器 存储单元的内容可按需随意取出或存入 且存取的速度与存储单元的位置无关的存储器 这种存储器在断电时将丢失其存储内容 故主要用于存储短时间使用的程序 按照存储信息的不同 随机存储器又
  • java英文面试常见问题归纳

    1 Tell me a little about yourself I hava been working as a computer programmger over fives years I have the ability to d
  • Python-reduce()

    functools reduce function iterable initializer 将两个参数的 function 从左至右积累地应用到 iterable 的条目 以便将该可迭代对象缩减为单一的值 例如 reduce lambda
  • vb基于SC结构服装专卖店设计与实现

    摘 要 本论文描述了 服装专卖店店管理系统 的设计与实现 在我国数量众多的企业中 中小企业占了绝大多数 这些企业也不可避免地要加入国际化企业的竞争行列 而实现企业信息化是参与挑战的必要条件 但是中小企业的多样性及其灵活多变的经营方式 加上相
  • 【Python 3.7】立方:数字的三次方被称为其立方。请绘制一个图形,显示前 5个整数的立方 值,再绘制一个图形,显示前 5000个整数的立方值。

    题目 Python 3 7 立方 数字的三次方被称为其立方 请绘制一个图形 显示前 5个整数的立方值 再绘制一个图形 显示前 5000个整数的立方值 前 5个整数的立方值的程序为 import matplotlib pyplot as pl
  • TPS5430设计24v转15v电源

    目录 前言 一 芯片输入输出特性 1 输出电压 2 输出电流 3 输出功率 二 芯片各引脚的设计和外围电路元器件的选型 1 ENA脚 2 VIN脚的输入电容 3 输入纹波 4 分压电阻 5 输出电感 6 输出电容 7 BOOT电容器 8 环
  • linux基本命令,一份就够了,初学者指南,基于centos和redhat

    一 文件或者文件本身 ls a 显示隐藏文件 l 长格式显示 h 人性化显示 显示文件大小 d 显示目录本身非目录里面的内容 touch 可改变文件时间戳 mkdir 创建多个目录mkdir a b c p 创建多级目录 mkdir a b
  • SpringBoot2.0(过滤器,监听器,拦截器)

    目录 一 过滤器 1 1 自定义Filter 1 2 启动类代码 1 2 创建filter类和LoginFilter包 1 2 1 编写loginFilter类 过滤器代码 1 2 2 创建二个Controller类 二 监听器 2 1 自
  • 2023年智能车辆国际会议(ICoIV 2023)

    2023年智能车国际会议 ICoIV 2023 重要信息 会议网址 www icoiv org 会议时间 2023年5月26 28日 召开地点 中国长沙 截稿时间 2023年3月20日 录用通知 投稿后2周内 收录检索 EI Scopus
  • 利用php的mail()函数发送邮件

    利用PHP的mail函数发送邮件 mail 函数的作用 连接到邮件服务器 利用smtp协议 与该服务器交互并投邮件 注意 1 mail函数不支持esmtp协议 即只能直投不能登录 2 由上条知 我们只能直投至最终的收件服务器地址 而该地址需
  • Vuex——控制侧边栏是否折叠使用vuex,本次简单使用到了state,mutations

    项目中在store vuex js 使用vuex管理isCollapse export default state isCollapse false 默认不折叠 mutations collapseMenu state state isCo
  • 中国蚁剑安装使用教程

    中国蚁剑安装使用教程 前言 一 中国蚁剑安装 二 中国蚁剑使用 2 1中国蚁剑连接木马 2 2中国蚁剑设置代理 2 3中国蚁剑参数设置 2 4中国蚁剑其他使用 三 中国蚁剑绕过Waf 3 1 编码绕过WAF 3 2插件绕过waf 3 3 修
  • windows ce操作系统能用哪个导航_Windows 和 Linux 比较

    1 操作系统设计复杂度对比 就操作系统复杂度windows server 要比 linux server 更复杂 2 市场占有率对比 特指的服务器市场占有率 非PC桌面 1 linux 大多数版本是免费的 windows 收费 在大规模集群
  • 基于matlab的长短期神经网络lstm的股票预测

    目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的股票预测 MATALB编程实现 附有代码 及链接基于matlab编程的的长短期神经网络LSTM的股票价格的预测 基于深度学习神经网络的股票价格预测 深度学
  • Unity 中控(二)

    前面写到控制投影 接着就是对电脑的开关的控制 依然是先到网上查资料 然后总结下 在同一局域网下 远程开电脑是同通过网卡的Mac地址 UDP广播数据实现开机 关机是调用系统的运行命令 shutdown s m 192 168 0 106 t
  • 10个每个人都用得到的视频下载网站

    1 油管视频下载 www 4kvideodownloader com 2 哔哩哔哩视频解析下载 bilibili iiilab com 3 小视频下载 www downfi com video 4 图二工具 www tool2 cn 5 小
  • Spring MVC-表单(Form)标签-文件上传(File Upload)示例(转载实践)

    以下内容翻译自 https www tutorialspoint com springmvc springmvc upload htm 说明 示例基于Spring MVC 4 1 6 以下示例显示如何使用Spring Web MVC框架在表