国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

springmvc工程文件上傳下載

2019-11-11 03:12:01
字體:
來源:轉載
供稿:網友

作為程序員,可能會在不經意間就寫出來了一段讓自己感到驕傲、欣喜、自豪的垃圾代碼.

github已上傳:https://github.com/kevindai007/sPRingmvcTestProject

今天想新建一個springmvc工程實現上傳下載功能,結果在Idea中折騰了半天才弄好,現在記錄一下這填坑的過程

File—new—project 這里寫圖片描述 然后一直點下一步直到Finish.這是idea會自動新建工程,看到Build success說明工程新建成功,如圖 這里寫圖片描述 現在跑一下這個工程,看能否跑起來 這里寫圖片描述 這里寫圖片描述 這里寫圖片描述 啟動tomcat,看到hello world界面說明工程新建成功 這里寫圖片描述

下面來配置springmvc,首先引入springmvc所需的jar包,在pom.xml中添加以下引用

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.6.RELEASE</version></dependency><!--jsp要使用到的,開始沒加,打開Jsp的時候報錯 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!--文件上傳--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency>

然后在web.xml配置springmvc過濾;但在這之前咱們需要稍微更新一下web.xml的版本,可以支持更高級的一些語法,如下:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Archetype Created Web Application</display-name></web-app>

然后添加springmvc的servlet

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping></web-app>

該servlet名為springmvc(名稱可修改),用于攔截請求(url-pattern為 / ,說明攔截所有請求),并交由Spring MVC的后臺控制器來處理。這一項配置是必須的。

為了能夠處理中文的post請求,再配置一個encodingFilter,以避免post請求中文出現亂碼情況(我開始忘記了,導致提交表單中文亂碼):

<!-- 字符過濾 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

到這里web.xml的配置就完成了,下面咱們來一個總體預覽

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 字符過濾 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>

在配置完web.xml后,需在web.xml同級目錄下新建 springmvc-servlet.xml(-servlet前面是在servlet里面定義的servlet名): 這里寫圖片描述

要指定springmvc掃描路徑時發現自己需要一個保存controller的包,在src/main下新建一個java文件夾由于存放java代碼,這時發現不能在該文件夾下新建java文件,需要進行如下操作: 這里寫圖片描述 然后在java文件夾下新建com.kevindai.web包,并在該包下新建indexController.java文件,新建過程不贅述,代碼如下

package com.kevindai.web;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/** * Created by daiwenkai on 2017/2/7. */@Controllerpublic class IndexController { @RequestMapping("/") public String index(){ return "index"; }}

好的,回到springmvc-servlet.xml,進行相關配置.首先加入component-scan標簽,指明controller所在的包,并掃描其中的注解(需要同時引入context命名空間,后面會給出)

<!--指明 controller 所在包,并掃描其中的注解--><context:component-scan base-package="com.kevindai.web"/>

然后開啟注解

<!-- 開啟注解 --> <mvc:annotation-driven/>

然后配置視圖解析器:

<!--ViewResolver 視圖解析器--> <!--用于支持Servlet、JSP視圖解析--> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>

這里就是確定controller如何找到視圖文件,這里需要詳細的說明.在 controller 的一個方法中,返回的字符串定義了所需訪問的jsp的名字(如上面的index).在jspViewResolver中,有兩個屬性,一個是prefix,定義了所需訪問的文件路徑前綴,另一是suffix,表示要訪問的文件的后綴,這里為 .jsp.那么,如果返回字符串是 xxx,SpringMVC就會找到 /WEB-INF/jsp/xxx.jsp 文件. 所以咱們還需要在WEB-INF下新建一個jsp文件夾,并在jsp文件夾下新建index.jsp文件(可以把工程中自帶的index.jsp刪除掉)

然后因為咱們要做上傳功能所以還需要配置文件上傳的解析器:

<!-- 上傳文件 --> <bean id="mult至此springmvc-servlet.xml的配置已經完成,來個總體預覽

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--指明 controller 所在包,并掃描其中的注解--> <context:component-scan base-package="com.kevindai.web"/> <!-- 開啟注解 --> <mvc:annotation-driven/> <!--ViewResolver 視圖解析器--> <!--用于支持Servlet、JSP視圖解析--> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 上傳文件 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" > </bean></beans>

下面修改WEB-INF/jsp/index.jsp頁面,form表單中不要忘記加enctype=”multipart/form-data”,代碼如下

<%-- Created by IntelliJ IDEA. User: daiwenkai Date: 2017/2/7 Time: 15:34 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>package apk</title></head><body><form action="/packagedApk" enctype="multipart/form-data" method="post"> <table> <tr> <td>渠 道 號:</td> <td> <input type="text" name="channelNum" id="channelNum"> </td> </tr> <tr> <td>請選擇文件:</td> <td><input type="file" name="fileMsg" id="fileMsg"></td> </tr> <tr> <td> <input type="reset" value="重置"> </td> <td> <input type="submit" value="提交"> </td> </tr> </table></form></body></html>

在IndexController中添加packagedApk()方法,最終代碼如下:

package com.kevindai.web;import com.kevindai.pojo.PackageApkPojo;import org.apache.commons.io.FileUtils;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpStatus;import org.springframework.http.MediaType;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import java.io.*;/** * Created by daiwenkai on 2017/2/7. */@Controllerpublic class IndexController { @RequestMapping("/") public String index(){ return "index"; } /** * 方法寫的很粗糙,就是接收上傳文件并保存返回下載文件 * @param packageApkPojo * @return * @throws IOException */ @RequestMapping(value = "/packagedApk") @ResponseBody public ResponseEntity<byte[]> packagedApk(PackageApkPojo packageApkPojo) throws IOException { System.out.println(packageApkPojo.getChannelNum()); InputStream inputStream = packageApkPojo.getFileMsg().getInputStream(); String fileName = packageApkPojo.getFileMsg().getOriginalFilename(); OutputStream outputStream = new FileOutputStream("d:" + File.separator + fileName); byte[] b = new byte[1024]; int c; while((c = inputStream.read(b)) > 0){ outputStream.write(b); } inputStream.close(); outputStream.flush(); outputStream.close(); File file = new File("d:" + File.separator + fileName); String dfileName = new String(fileName.getBytes("gb2312"), "iso8859-1"); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", dfileName); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); //return "upload success"; }}

PackageApkPojo.java代碼如下

package com.kevindai.pojo;import org.springframework.web.multipart.MultipartFile;/** * Created by daiwenkai on 2017/2/7. */public class PackageApkPojo { private String channelNum; private MultipartFile fileMsg;//與jsp中文件框id保持一致 public String getChannelNum() { return channelNum; } public void setChannelNum(String channelNum) { this.channelNum = channelNum; } public MultipartFile getFileMsg() { return fileMsg; } public void setFileMsg(MultipartFile fileMsg) { this.fileMsg = fileMsg; }}

OK就這么簡單的東西也折騰了一上午,填不完的坑啊,mdzz


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凉山| 德安县| 乌拉特中旗| 无为县| 东平县| 凭祥市| 兰溪市| 礼泉县| 汪清县| 剑阁县| 宣化县| 平陆县| 宁河县| 新竹县| 石阡县| 西峡县| 怀化市| 临清市| 龙泉市| 阿巴嘎旗| 两当县| 祁门县| 从江县| 深泽县| 富阳市| 襄樊市| 武夷山市| 赫章县| 田东县| 嘉义县| 马龙县| 招远市| 揭东县| 赣榆县| 永嘉县| 东源县| 陵水| 静乐县| 池州市| 虎林市| 莱西市|