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測試結果都為空
相關推薦
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
【SpringMVC】SpringMVC之檔案上傳/下載
學習一個框架少不了學習檔案上傳和下載,原理來說上傳和下載都是基本二進位制流的轉換,所以搞清楚了這一點就很容易理解上傳和下載了 在使用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 Mvc】SpringMVC 檔案上傳配置,多檔案上傳,使用的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