日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【SSM框架系列】SpringMVC的文件上传、拦截器及异常处理

發布時間:2025/5/22 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【SSM框架系列】SpringMVC的文件上传、拦截器及异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SpringMVC的文件上傳

服務器端實現文件上傳的技術有很多種,Servlet3.0,FileUtils,框架等等,都可以實現文件上傳,不管使用哪一種上傳技術,都必須滿足三要素:

  • 表單項type=“file”

  • 表單的提交方式是post

  • 表單的enctype屬性是多部分表單形式,及enctype=“multipart/form-data”

<form action="${pageContext.request.contextPath}/user/quick22" method="post" enctype="multipart/form-data">名稱<input type="text" name="username"><br/>文件1<input type="file" name="uploadFile"><br/><input type="submit" value="提交"></form>

SpringMVC的請求-文件上傳-文件上傳的原理

SpringMVC的請求-文件上傳-單文件上傳的代碼實現1

添加依賴

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.3</version></dependency>

配置多媒體解析器

<!--配置文件上傳解析器--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="UYF-8"/><property name="maxUploadSize" value="500000"/></bean>

后臺程序

@RequestMapping(value="/quick22")@ResponseBodypublic void save22(String username, MultipartFile uploadFile) throws IOException {System.out.println(username);System.out.println(uploadFile);}

SpringMVC的請求-文件上傳-單文件上傳的代碼實現2

完成文件上傳

@RequestMapping(value="/quick22")@ResponseBodypublic void save22(String username, MultipartFile uploadFile) throws IOException {System.out.println(username);//獲得上傳文件的名稱String originalFilename = uploadFile.getOriginalFilename();uploadFile.transferTo(new File("C:\\upload\\"+originalFilename));}

SpringMVC的請求-文件上傳-多文件上傳的代碼實現3

多文件上傳,只需要將頁面修改為多個文件上傳項,將方法參數MultipartFile類型修改為MultipartFile[]即可

<form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data">名稱<input type="text" name="username"><br/>文件1<input type="file" name="uploadFile"><br/>文件2<input type="file" name="uploadFile"><br/><input type="submit" value="提交"></form>@RequestMapping(value="/quick23")@ResponseBodypublic void save23(String username, MultipartFile[] uploadFile) throws IOException {System.out.println(username);for (MultipartFile multipartFile : uploadFile) {String originalFilename = multipartFile.getOriginalFilename();multipartFile.transferTo(new File("C:\\upload\\"+originalFilename));}}

SpringMVC的攔截器

SpringMVC攔截器-攔截器的作用

  • Spring MVC 的攔截器類似于 Servlet 開發中的過濾器 Filter,用于對處理器進行預處理和后處理。

  • 將攔截器按一定的順序聯結成一條鏈,這條鏈稱為攔截器鏈(InterceptorChain)。在訪問被攔截的方法或字段時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。攔截器也是AOP思想的具體實現。

Filter過濾器的作用

  • 在請求到達目標資源之前干的事(對request增強)
  • 在響應到達客戶端之前干的事(對response增強)
  • 可以決定是否讓請求到達目標資源

SpringMVC攔截器-interceptor和filter區別

關于interceptor和filter的區別,如圖所示:

SpringMVC攔截器-基礎入門

自定義攔截器很簡單,只有如下三步:

創建攔截器類實現HandlerInterceptor接口

public class MyInterceptor1 implements HandlerInterceptor {//在目標方法執行之前 執行public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {System.out.println("preHandle.....");// true代表放行,false代表阻止該請求到達目標資源return true;}//在目標方法執行之后 視圖對象返回之前執行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {System.out.println("postHandle...");}//在流程都執行完畢后 執行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {// 頁面加載完畢之后才會輸出System.out.println("afterCompletion....");}}

配置:在SpringMVC的配置文件中配置

<!--配置攔截器--><mvc:interceptors><mvc:interceptor><!--對哪些資源執行攔截操作--><mvc:mapping path="/**"/><bean class="cs.wy.interceptor.MyInterceptor1"/></mvc:interceptor></mvc:interceptors>

編寫Controller,發請求到controller,跳轉頁面

@Controllerpublic class TargetController {@RequestMapping("/target")public ModelAndView show(){System.out.println("目標資源執行......");ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("name","趙麗穎");modelAndView.setViewName("index");return modelAndView;}}

頁面

<html><body><h2>Hello World! ${name}</h2></body></html>

SpringMVC攔截器-基礎入門詳解

攔截器在預處理后什么情況下會執行目標資源,什么情況下不執行目標資源,以及在有多個攔截器的情況下攔截器的執行順序是什么?

配置攔截器2

<!--配置攔截器--><mvc:interceptors><mvc:interceptor><!--對哪些資源執行攔截操作--><mvc:mapping path="/**"/><bean class="cs.wy.interceptor.MyInterceptor2"/></mvc:interceptor><mvc:interceptor><!--對哪些資源執行攔截操作--><mvc:mapping path="/**"/><bean class="cs.wy.interceptor.MyInterceptor1"/></mvc:interceptor></mvc:interceptors>

結論:

  • 當攔截器的preHandle方法返回true則會執行目標資源,如果返回false則不執行目標資源

  • 多個攔截器情況下,配置在前的先執行,配置在后的后執行

  • 攔截器中的方法執行順序是:preHandler-------目標資源----postHandle---- afterCompletion

攔截器中的方法說明如下

SpringMVC異常處理機制

異常處理的思路
  • 系統中異常包括兩類:預期異常和運行時異常RuntimeException,前者通過捕獲異常從而獲取異常信息,后者主要通過規范代碼開發、測試等手段減少運行時異常的發生。

  • 系統的Dao、Service、Controller出現都通過throws Exception向上拋出,最后由SpringMVC前端控制器交由異常處理器進行異常處理

異常處理兩種方式
  • 使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver

  • 實現Spring的異常處理接口HandlerExceptionResolver 自定義自己的異常處理器

簡單異常處理器SimpleMappingExceptionResolver

SpringMVC已經定義好了該類型轉換器,在使用時可以根據項目情況進行相應異常與視圖的映射配置

<!--配置簡單映射異常處理器--><bean class=“org.springframework.web.servlet.handler.SimpleMappingExceptionResolver”> <property name=“defaultErrorView” value=“error”/> 默認錯誤視圖<property name=“exceptionMappings”><map> 異常類型 錯誤視圖<entry key="cs.wy.exception.MyException" value="error"/><entry key="java.lang.ClassCastException" value="error"/></map></property></bean>

自定義異常處理步驟

①創建異常處理器類實現HandlerExceptionResolver

public class MyExceptionResolver implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {//處理異常的代碼實現//創建ModelAndView對象ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("exceptionPage");return modelAndView;}}

②配置異常處理器

<bean id="exceptionResolver" class="cs.wy.exception.MyExceptionResolver"/>

③編寫異常頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>這是一個最終異常的顯示頁面</body></html>

④測試異常跳轉

@RequestMapping("/quick22")@ResponseBodypublic void quickMethod22() throws IOException, ParseException {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); simpleDateFormat.parse("abcde");}

總結

以上是生活随笔為你收集整理的【SSM框架系列】SpringMVC的文件上传、拦截器及异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。