В следующем примере показано, как использовать элемент управления загрузкой файлов в формах с использованием среды Spring Web MVC. Начнем с того, что нам нужно иметь работающую Eclipse IDE и придерживаться следующих шагов для разработки веб-приложения на основе динамических форм с использованием Spring Web Framework.
шаг | Описание |
---|---|
1 | Создайте проект с именем HelloWeb в пакете com.tutorialspoint, как описано в главе Spring MVC — Hello World. |
2 | Создайте классы Java FileModel, FileUploadController в пакете com.tutorialspoint. |
3 | Создайте файлы представлений fileUpload.jsp, success.jsp в подпапке jsp. |
4 | Создайте временную папку в подпапке WebContent. |
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 () мы передали пустой объект FileModel в объект ModelAndView с именем «command», потому что среда Spring ожидает объект с именем «command», если вы используете <form: form> теги в вашем файле JSP. Поэтому, когда вызывается метод fileUploadPage () , он возвращает представление fileUpload.jsp .
Второй сервисный метод fileUpload () будет вызываться для метода POST по URL-адресу HelloWeb / fileUploadPage . Вы подготовите файл для загрузки на основе предоставленной информации. Наконец, из метода службы будет возвращено представление «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>
Здесь мы используем атрибут modelAttribute со значением = «fileUpload» для сопоставления элемента управления загрузки файла с моделью сервера.
success.jsp
<%@ page contentType = "text/html; charset = UTF-8" %> <html> <head> <title>File Upload Example</title> </head> <body> FileName : lt;b> ${fileName} </b> - Uploaded Successfully. </body> </html>
Когда вы закончите создавать исходные файлы и файлы конфигурации, экспортируйте ваше приложение. Щелкните правой кнопкой мыши свое приложение, выберите « Экспорт» → «Файл WAR» и сохраните файл HelloWeb.war в папке веб-приложений Tomcat.
Теперь запустите сервер Tomcat и убедитесь, что вы можете получить доступ к другим веб-страницам из папки веб-приложений с помощью стандартного браузера. Попробуйте URL — http: // localhost: 8080 / HelloWeb / fileUploadPage, и мы увидим следующий экран, если все в порядке с веб-приложением Spring.
После отправки необходимой информации, нажмите на кнопку отправки, чтобы отправить форму. Вы должны увидеть следующий экран, если все в порядке с веб-приложением Spring.