SpringMvc-10.14上傳、攔截器、異常處理
1.SpringMVC實現檔案上傳:
和Servlet方式的本質一樣,都是通過commons-fileupload.jar和commons-io.jar
SpringMVC可以簡化檔案上傳的程式碼,但是必須滿足條件:實現MultipartResolver介面;而該介面的實現類SpringMVC也已經提供了CommonsMultipartResolver
具體步驟:(直接使用CommonsMultipartResolver實現上傳)
a.jar包
commons-fileupload.jar、commons-io.jar
b.配置CommonsMultipartResolver
將其加入SpringIOC容器
<!-- 配置CommonsMultipartResolver,用於實現檔案上傳
將其加入SpringIOC容器.
springIoc容器在初始化時,會自動尋找一個Id="multipartResolver"的bean,並將其加入Ioc容器
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 上傳單個檔案的最大值,單位Byte;如果-1,表示無限制 -->
<property name="maxUploadSize" value="104857600"></property>
</bean>
c.處理方法
//檔案上傳處理方法
@RequestMapping(value="testUpload") //abc.png
public String testUpload(@RequestParam("desc") String desc , @RequestParam("file") MultipartFile file ) throws IOException {
System.out.println("檔案描述資訊:"+desc);
//jsp中上傳的檔案:file
InputStream input = file.getInputStream() ;//IO
String fileName = file.getOriginalFilename() ;
OutputStream out = new FileOutputStream("d:\\"+fileName) ;
byte[] bs = new byte[1024];
int len = -1;
while(( len = input.read(bs)) !=-1 ) {
out.write(bs, 0, len);
}
out.close();
input.close();
//將file上傳到伺服器中的 某一個硬碟檔案中
System.out.println("上傳成功!");
return "success";
}
<form action="handler/testUpload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
描述:<input name="desc" type="text" />
<input type="submit" value="上傳">
</form>
<form action="handler/testUpload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
描述:<input name="desc" type="text" />
<input type="submit" value="上傳">
</form>
框架:將原來自己寫的1000行程式碼,變成:框架幫你寫900行,剩下100行自己寫
控制器:handler/servlet/controller/action
2.攔截器
攔截器的原理和過濾器相同。
SpringMVC:要想實現攔截器,必須實現一個介面HandlerInterceptor
ctrl+shift+r :自己編寫的程式碼.java .jsp .html
ctrl+shift+t :jar中的程式碼
a.編寫攔截器implements HandlerInterceptor
package org.lanqiao.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class MyInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("攔截請求"); //
return true;//true:攔截操作之後,放行 ;false:攔截之後不放行,請求終止;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("攔截響應");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("檢視(jsp)被渲染完畢");
}
}
b.配置:將自己寫的攔截器配置到springmvc中(spring)
<!-- 將自己寫的攔截器 配置到springmvc中(spring);預設攔截全部請求 -->
<mvc:interceptors>
<!-- 配置具體的攔截路徑 -->
<mvc:interceptor>
<!-- 指定攔截的路徑,基於ant風格 -->
<mvc:mapping path="/**"/>
<!-- 指定攔不截的路徑 -->
<mvc:exclude-mapping path="/handler/testUpload"/>
<bean class="org.lanqiao.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
<!-- 配置具體的攔截路徑 -->
<mvc:interceptor>
<!-- 指定攔截的路徑,基於ant風格 -->
<mvc:mapping path="/**"/>
<!-- 指定攔不截的路徑 -->
<mvc:exclude-mapping path="/handler/testUpload"/>
<bean class="org.lanqiao.interceptor.MySecondInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
攔截器1攔截請求- 攔截器2攔截請求 - 請求方法 - 攔截器2處理相應-攔截器1處理相應- 只會被最後一個攔截器的afterCompletion()攔截
如果有多個攔截器,則每個攔截器的preHandle postHandle都會在相應時機各被觸發一次;但是afterCompletion,只會執行最後一個攔截器的該方法。
相關文章
- 【SpringMVC】檔案上傳與下載、攔截器、異常處理器SpringMVC
- springMVC(二)——處理返回值、常用註解、檔案上傳下載、異常處理、過濾器、攔截器SpringMVC過濾器
- SpringMVC【校驗器、統一處理異常、RESTful、攔截器】SpringMVCREST
- springboot 全域性異常攔截器,友好異常提示Spring Boot
- 攔截線上 sql 異常報錯SQL
- 從程式設計攔截器到大腦資訊攔截處理架構程式設計架構
- gRPC伺服器中新增全域性異常攔截器RPC伺服器
- Spring-全域性異常攔截Spring
- Java 傳統異常處理(二)Java
- MVC使用異常過濾器處理異常MVC過濾器
- 迭代器和異常處理
- dubbo~全域性異常攔截器的使用與設計缺陷
- 異常篇——異常處理
- SpringMVC(2)- 非同步呼叫、非同步請求-跨域訪問、攔截器、異常處理、實用技術SpringMVC非同步跨域
- dubbo~全域性異常攔截器的使用與設計缺陷~續
- 攔截器,攔截器棧總結
- 異常處理
- Asp.Netcore使用Filter來實現介面的全域性異常攔截,以及前置攔截和後置攔截ASP.NETNetCoreFilter
- Flutter 如何處理401 未授權的 Dio 攔截器Flutter
- 異常-throws的方式處理異常
- 異常處理與異常函式函式
- JavaScript 異常處理JavaScript
- ThinkPHP 異常處理PHP
- React 異常處理React
- 08、異常處理
- JAVA 異常處理Java
- JAVA異常處理Java
- Abp 異常處理
- oracle異常處理Oracle
- PowerShell 異常處理
- plsql異常處理SQL
- Swift 異常處理Swift
- JS異常處理JS
- app異常處理APP
- Oracle 處理異常Oracle
- MySQL異常處理MySql
- 異常處理 (轉)
- golang - 異常處理Golang