1. 程式人生 > >SpringMVC教程3【檔案上傳下載,靜態資源處理及資料校驗】

SpringMVC教程3【檔案上傳下載,靜態資源處理及資料校驗】

一,檔案上傳

web.xml配置通用

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>SpringMVC-01-hello</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:Spring-MVC.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>

引入相關jar包

在這裡插入圖片描述

自定義頁面表單

表單提交方式必須是post方式提交,enctype必須是multipart/form-data 在這裡插入圖片描述 在這裡插入圖片描述

自定義Controller接受資料

在這裡插入圖片描述

配置springmvc的配置檔案

<?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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		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-4.3.xsd">
		<!-- 開啟掃描 -->
	<context:component-scan base-package="com.sxt"/>
	
	<!-- 開啟SpringMVC註解的方式 -->
	<mvc:annotation-driven ></mvc:annotation-driven>
	<!-- 注意id必須叫 multipartResolver-->
	<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
	<!-- 設定檔案上傳最大尺寸 -->
		<property name="maxUploadSize" value="5242880"></property>
	</bean>
	
</beans>

注意: CommonsMultipartResolver這個Bean的id必須為multipartResolver, 原因:CommonsMultipartResolver Bean是在DispatcherServlet中載入的,而DispatcherServlet是通過名字來查詢這個Bean的。而其他的,則是按照型別查詢。

二,檔案下載

1.方式一:基於ResponseEntity實現

/**
	 * 檔案下載方式二
	 * @param request
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/dowmload2")
	public  ResponseEntity<byte[]> fun3(HttpServletRequest request) throws Exception{
		File file = new File("D:/Pictures/54195251823a4.jpg");
		FileInputStream is = new FileInputStream(file);
		 byte[] body = new byte[is.available()];
		    is.read(body);
		    HttpHeaders headers = new HttpHeaders();
		    headers.add("Content-Disposition", "attchement;filename=" + file.getName());
		    HttpStatus statusCode = HttpStatus.OK;
		    ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
		    return entity;
		
		
	}

方式二:通用下載方式

	/**
	 * 檔案下載方式一
	 * @param request
	 * @param response
	 * @throws IOException
	 */
	@RequestMapping("/dowmload")
	public void fun2(HttpServletRequest request,HttpServletResponse response) throws IOException{
		File file = new File("D:/Pictures/54195251823a4.jpg");
		FileInputStream in = new FileInputStream(file);
		response.setCharacterEncoding("utf-8");
		response.setContentType("multipart/form-data");
		response.setHeader("Content-Disposition", "attachment;fileName="+file.getName());
		ServletOutputStream out = response.getOutputStream();
		int num = 0;
		byte[] b = new byte[1024];
		while ((num = in.read(b)) != -1) {
			out.write(b, 0, num);
		}
		out.flush();
		out.close();
		in.close();
		
	}

自定義頁面(響應就行了)

<h1><a href="dowmload">下載</a></h1><h1><a href="dowmload2">下載2</a></h1>

在這裡插入圖片描述

三靜態資源過濾

在SpringMVC中,預設情況下,所有的靜態資源都會被攔截,對於靜態資源,需要手動配置靜態資源過濾。

第一種在web.xml配置

<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>

第二種在配置檔案通過標籤設定

<!--  防止資原始檔被spring MVC攔截-->
 <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>
  <mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>
   <mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/> 

例如,瀏覽器傳送http://localhost:8080/static/img/01.png請求,該請求符合/static/img/*,此時,*代表01.png,那麼springmvc會將01.png補充到對應的location後面,進而查詢到檔案。 這裡需要注意: *表示一層路徑 ; ** 表示多層路徑對映

四資料校驗

資料校驗說明

最早的校驗,就是服務端校驗。早期的網站,使用者輸入一個郵箱地址,校驗郵箱地址需要將地址傳送到服務端,服務端進行校驗,校驗成功後,給前端一個響應。有了JavaScript,校驗工作可以放在前端去執行。那麼為什麼還需要服務端校驗呢? 因為前端傳來的資料不可信。前端很容易獲取都後端的資料介面,如果有人繞過頁面,就會出現非法資料,所以服務端也要資料校驗,總的來說: 1.前端校驗要做,目的是為了提高使用者體驗 2.後端校驗也要做,目的是為了資料安全

普通校驗

SpringMVC 本身沒有校驗功能,它使用hibernat的校驗框架,hiber的校驗框架和orm沒有關係

建立專案,引入相關jar包

在這裡插入圖片描述

建立properties檔案

在這裡插入圖片描述

在springmvc的配置w檔案配置

<?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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		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-4.3.xsd">
	
	
	<!-- 開啟SpringMVC註解的方式 -->
	<mvc:annotation-driven validator="validator"></mvc:annotation-driven>
		<!-- 開啟掃描 -->
	<context:component-scan base-package="com.sxt"/>
	<!--新增對JSR-303驗證框架的支援  -->
	<bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" id="validator">
			<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
			 <!--不設定則預設為classpath下的 ValidationMessages.properties -->
			<property name="validationMessageSource" ref="validationMessageSource"></property>
	</bean>
	<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="validationMessageSource">
			<property name="basename" value="classpath:user"/>
			<property name="fileEncodings" value="utf-8"/>
			<property name="cacheSeconds" value="120"/>
	
	
	</bean>
	
	
</beans>

在這裡插入圖片描述

bean物件配置校驗規則

在這裡插入圖片描述

| @Null | 被註解的元素必須為 null |

| @NotNull | 被註解的元素必須不為 null |

| @AssertTrue | 被註解的元素必須為 true |

|@AssertFalse | 被註解的元素必須為 false |

| @Min(value) |被註解的元素必須是一個數字,其值必須小於等於指定的最大值 |

| @DecimalMin(value) | 被註解的元素必須是一個數字,其值必須大於等於指定的最小值 |

| @DecimalMax(value) | 被註解的元素必須是一個數字,其值必須小於等於指定的最大值 |

|@Size(max=, min=) | 被註解的元素的大小必須在指定的範圍內 |

| @Digits (integer, fraction) | 被註解的元素必須是一個數字,其值必須在可接受的範圍內 |

|@Past | 被註解的元素必須是一個過去的日期 |

| @Future | 被註解的元素必須是一個將來的日期 |

| @Pattern(regex=,flag=) |被註解的元素必須符合指定的正則表示式 |

|@NotBlank(message =) |驗證字串非null,且長度必須大於0 |

|@Email | 被註解的元素必須是電子郵箱地址 |

|@Length(min=,max=) | 被註解的字串的大小必須在指定的範圍內 |

|@NotEmpty | 被註解的字串的必須非空 |

|@Range(min=,max=,message=) | 被註解的元素必須在合適的範圍內 |

在自定義Controller校驗



import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.sxt.bean.Book;

@Controller
public class Conreoller {
	/**
	 * @Validated 表示book接受的資料跟據指定規則進行了校驗
	 * BindingResult 封裝驗證結果,必須緊跟在驗證變數後,成對出現,多個資訊驗證,多個BindingResult
	 * @param book
	 * @param br
	 */
	@RequestMapping("/update")
	@ResponseBody
	public void fun1(@Validated Book book,BindingResult br){
		List<ObjectError> errors = br.getAllErrors();
		if(errors != null && errors.size() > 0){
			// 肯定有錯誤資訊
			for (ObjectError e : errors) {
				System.out.println(e.getDefaultMessage());
			}
		}else{
			// 資料合格
			System.out.println(book);
		}
		
	}
}

定義一個頁面表單

在這裡插入圖片描述

測試

在這裡插入圖片描述 在這裡插入圖片描述

分組校驗

為什麼需要分組校驗? 因為一個物件有多個屬性,而不同的controller校驗的需求是不一樣的,所以分組校驗就解決這個問題了

定義分組(兩個接口裡面不需要寫任何程式碼)

在這裡插入圖片描述

使用分組

在這裡插入圖片描述

在Controller使用

/**
	 * @Validated 表示book接受的資料跟據指定規則進行了校驗
	 * BindingResult 封裝驗證結果,必須緊跟在驗證變數後,成對出現,多個資訊驗證,多個BindingResult
	 * @param book
	 * @param br
	 */
	@RequestMapping("/update1")
	public String fun3(@Validated(value=GroupIntance.class) Book book,BindingResult br,Model m){
		List<ObjectError> errors = br.getAllErrors();
		if(errors != null && errors.size() > 0){
			// 肯定有錯誤資訊
			for (ObjectError e : errors) {
				System.out.println(e.getDefaultMessage());
			}
			m.addAttribute("errors", errors);
		}else{
			// 資料合格
			System.out.println(book);
		}
		return "/user.jsp";
	}
	/**
	 * @Validated 表示book接受的資料跟據指定規則進行了校驗
	 * BindingResult 封裝驗證結果,必須緊跟在驗證變數後,成對出現,多個資訊驗證,多個BindingResult
	 * @param book
	 * @param br
	 */
	@RequestMapping("/add1")
	public String fun4(@Validated(value=GroupIntance2.class) Book book,BindingResult br,Model m){
		List<ObjectError> errors = br.getAllErrors();
		if(errors != null && errors.size() > 0){
			// 肯定有錯誤資訊
			for (ObjectError e : errors) {
				System.out.println(e.getDefaultMessage());
			}
			m.addAttribute("errors", errors);
		}else{
			// 資料合格
			System.out.println(book);
		}
		return "/user.jsp";
	}

頁面

在這裡插入圖片描述

測試

都為空測試 在這裡插入圖片描述

將請求由add1改為update1測試結果都為空 在這裡插入圖片描   
 
 </div> 
 <div class=

相關推薦

SpringMVC教程3檔案下載靜態資源處理資料

一,檔案上傳 web.xml配置通用 <?xml version="1.0" encoding=&q

SpringMVC筆記八之檔案下載

一、檔案上傳 1、普通檔案上傳 新建頁面WebContent/file.jsp <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

servlet 3.0 檔案下載

1.需求場景 利用servlet3.0 實現檔案上傳 2.專案環境 servlet  jsp  javabean 3.功能實現 package com.demo.action; import java.io.File; import java.io.IOExceptio

thymeleaf + easy + springboot 檔案下載以及列表展示 介面

這裡只是隨便寫寫,如果有大佬看到請不要噴我。 上傳下載 在上一篇部落格裡面有寫到我就不在描述了,這裡我只是寫一下我的思路。 首先可以讓程式碼可以複用起來 這裡用到的是 thymeleaf的include標籤。 檔案列表 <!-- 這裡是檔案列表 只需要放在需要顯示檔案

Linux檔案下載rz和sz

Linux上傳、下載yum安裝方式在聯網的情況下,執行以上命令即可:yum install -y lrzszrz/ sz 命令的使用 :rz 上傳命令      sz 下載命令rz  上傳輸入命令後,會彈出上傳框選擇檔案上傳即可sz 下載直接使用sz,後面加上檔名即可下載地址

java-web檔案下載可解決多個安全訪問問題

檔案上傳下載,可解決多個安全訪問問題。這個是上年老師教給我們的一個方法,這裡當做筆記記錄一下。說明:對於檔案上傳,瀏覽器在上傳的過程中是將檔案以流的形式提交到伺服器端的,如果直接使用Servlet獲取上傳檔案的輸入流然後再解析裡面的請求引數是比較麻煩,所以一般選擇採用apac

SpringMVCSpringMVC檔案/下載

學習一個框架少不了學習檔案上傳和下載,原理來說上傳和下載都是基本二進位制流的轉換,所以搞清楚了這一點就很容易理解上傳和下載了 在使用springMVC進行系統實現時,springMVC預設的解析器裡面是沒有加入對檔案上傳的解析的,這可以方便我們實現自己的檔案上傳。但如果

springmvc檔案/下載

檔案上傳 1,配置檔案上傳解析器 在springmvc-servlet.xml中配置 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.Commons

springmvc +uploadify 3.2.1 檔案

<%@page import="com.ist.pojo.User"%> <%@page import="com.ist.constant.ConstantField"%> <%@ page language="java" contentType="tex

SpringMVC——實現檔案下載

一、檔案上傳 1.引入依賴包 在pom.xml檔案中新增如下內容,引入 commons-fileupload 和 commons-io 兩個包。 <dependency> <groupId>commons-f

SSM框架-SpringMVC 例項檔案下載

目錄(?)[+] 本文詳細講解了SpringMVC例項單檔案上傳、多檔案上傳、檔案列表顯示、檔案下載。 一、新建一個Web工程,匯入相關的包 springmvc的包+commons-fileupload.jar+connom-io.jar+com

使用springmvc 和nginx 搭建一個檔案下載伺服器

public final class FileUploadUtil { public static JSONObject upload(String httpurl, String fileName, InputStream inputStream) { String result

SpringMVC和jQuery的Ajax簡單檔案下載示例

準備工作:  前端引入:1、jquery,我在這裡用的是:jquery-1.10.2.min.js          2、ajaxfileupload.js  這裡可能會報一些錯,所以在json判斷那裡修改為(網上也有):  Js程式碼  

經測試能用springmvc檔案下載並解決ie8檔案後提示下載

這兩天領導讓寫一個檔案上傳下載的功能,由於是新手,忙了一天查資料,終於搞定了,經過測試了,給各位看一下,共同學習 一、先寫測試好的上傳功能 首先是實體類 @Data public class FileUpload { private byte[] bytes; //

SpringMVC框架中實現檔案下載

首先在springmvc.xml中配置檔案上傳的屬性 <!-- 檔案上傳的屬性值 --> <bean id="multipartResolver" class="org.springframework.web.multi

spring MvcSpringMVC 檔案配置檔案使用的MultipartFile

基本的SpringMVC的搭建在我的上一篇文章裡已經寫過了,這篇文章主要說明一下如何使用SpringMVC進行表單上的檔案上傳以及多個檔案同時上傳的步驟 SpringMVC 基礎教程 框架分析:ht

SpringMVC實現頁面和java模型的資料互動以及檔案下載資料

1. 專案結構 2.  springMVC-servlet.xml 配置檔案 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org

SpringMVC檔案下載功能(附上完整的springmvc檔案下載示例)

========================================================== 以下使用maven建立檔案上傳下載 ============================ pom.xml <project xmlns="h

基於springmvc檔案下載的後臺程式碼

檔案上傳: @RequestMapping("uploadFile") private void uploadFile(@RequestParam("file")MultipartFile uploadfile, HttpServletRequest request

SpringMVC整合Mybatis之檔案下載

工程結構 第一步: 匯入commons-fileupload-1.3.1.jar和commons-io-2.4.jar以及SpringMVC與Mybatis的整合jar包 第二步:在applicat