亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java全面深入探究SpringBoot攔截器與文件上傳

 更新時間:2022年05月13日 10:18:15   作者:鐵甲小寶同學  
攔截器對使用SpringMvc、Struts的開發(fā)人員來說特別熟悉,因為你只要想去做好一個項目必然會用到它,文件上傳是一個很常見的功能。在項目開發(fā)過程中,我們通常都會使用一些成熟的上傳組件來實現(xiàn)對應的功能

攔截器

攔截器的概念

動態(tài)攔截Actioon調(diào)用的對象,使開發(fā)者在一個Actioon執(zhí)行的前后執(zhí)行一段代碼,也可以在Action執(zhí)行前阻止其執(zhí)行,同時也提供了一種可以提取Action中可重用部分代碼的方式。

作用:

動態(tài)攔截Action調(diào)用的對象(也就是實際項目中的controller層的接口)

一般攔截器用于對用戶訪問的限制。如當用戶沒有登錄時訪問主頁面,則可以使用攔截器進行攔截并重定向到登錄頁面。

攔截器的配置

創(chuàng)建interceptor 文件夾并創(chuàng)建LoginInterceptor Java文件且實現(xiàn)HandlerInterceptor 這個接口。

//必須實現(xiàn)HandlerInterceptor這個接口
public class LoginInterceptor implements HandlerInterceptor {
    /*
    * 目標方法執(zhí)行以前
    * */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Object loginUser = session.getAttribute("loginUser");
        if(loginUser != null) {
            return true;
        }
        request.setAttribute("msg" ,"請登錄!");
//        response.sendRedirect("/");
        request.getRequestDispatcher("/").forward(request,response);
        return  false;
    }
    //目標方法執(zhí)行以后
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    /**
     * 頁面渲染以后
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

配置攔截器

創(chuàng)建 config 文件夾并創(chuàng)建 AdminWebConfig 文件并實現(xiàn)WebMvcConfigurer的addInterceptors。

@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**") //靜態(tài)路徑也會被攔截
                .excludePathPatterns("/","/login","/css/**","/fonts/**" ,"/images/**","/js/**");
    }
}

攔截器的原理

1、根據(jù)當前請求,找到**HandlerExecutionChain【**可以處理請求的handler以及handler的所有 攔截器】

2、先來順序執(zhí)行 所有攔截器的 preHandle方法

  • 1、如果當前攔截器prehandler返回為true。則執(zhí)行下一個攔截器的preHandle
  • 2、如果當前攔截器返回為false。直接 倒序執(zhí)行所有已經(jīng)執(zhí)行了的攔截器的 afterCompletion;

3、如果任何一個攔截器返回false。直接跳出不執(zhí)行目標方法

4、所有攔截器都返回True。執(zhí)行目標方法

5、倒序執(zhí)行所有攔截器的postHandle方法。

6、前面的步驟有任何異常都會直接倒序觸發(fā) afterCompletion

7、頁面成功渲染完成以后,也會倒序觸發(fā) afterCompletion

文件上傳

在之前我們學習SSM的時候就知道了 文件上傳 這個功能,所以在 SpringBoot中我們就不在過多介紹,原理其實都差不多。

前端文件:

<form method="post" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file"><br>
    <input type="submit" value="提交">
</form>

Controller層的配置:

@Controller
public class FileController {
    @GetMapping("/updateFile")
    public String FileUp(){
        return "FileUp";
    }  
@PostMapping("/upload") // //new annotation since 4.3
    public String singleFileUpload(@RequestParam("file") MultipartFile file,
                                   RedirectAttributes redirectAttributes) {
        if (file.isEmpty()) {
            redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
            return "redirect:uploadStatus";
        }
        try {
            // Get the file and save it somewhere
            byte[] bytes = file.getBytes();
            Path path = Paths.get( file.getOriginalFilename());
            Files.write(path, bytes);
            redirectAttributes.addFlashAttribute("message",
                    "You successfully uploaded '" + file.getOriginalFilename() + "'");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "redirect:/main.html";
    }
}

更改文件上傳大小

在application.properties中配置文件大小:

spring.servlet.multipart.max-file-size=10MB //單文件大小
spring.servlet.multipart.max-request-size=100MB //多文件

到此這篇關于Java全面深入探究SpringBoot攔截器與文件上傳的文章就介紹到這了,更多相關Java SpringBoot攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java設計模式之策略模式(Strategy模式)介紹

    Java設計模式之策略模式(Strategy模式)介紹

    這篇文章主要介紹了Java設計模式之策略模式(Strategy模式)介紹,Strategy是屬于設計模式中對象行為型模式,要是定義一系列的算法,這些算法一個個封裝成單獨的類,需要的朋友可以參考下
    2015-03-03
  • 深入探究Java線程的創(chuàng)建與構造方法

    深入探究Java線程的創(chuàng)建與構造方法

    這篇文章主要給大家分享的是java線程的創(chuàng)建以及構造方法,想了解具體方式的小伙伴可以參考下面文章內(nèi)容,希望對你有所幫助
    2022-04-04
  • SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題

    SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題

    這篇文章主要介紹了SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • springboot 動態(tài)數(shù)據(jù)源的實現(xiàn)方法(Mybatis+Druid)

    springboot 動態(tài)數(shù)據(jù)源的實現(xiàn)方法(Mybatis+Druid)

    這篇文章主要介紹了springboot 動態(tài)數(shù)據(jù)源的實現(xiàn)方法(Mybatis+Druid),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java Long類型對比分析

    Java Long類型對比分析

    這篇文章主要介紹了Java Long類型對比分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • JAVA中的SPI思想介紹

    JAVA中的SPI思想介紹

    大家好,本篇文章主要講的是JAVA中的SPI思想介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 一文帶你搞懂Java中i++ 和 ++i的區(qū)別

    一文帶你搞懂Java中i++ 和 ++i的區(qū)別

    在Java中,i++和++i都用于遞增變量i的值,但它們之間有一個細微的區(qū)別,i++是后綴遞增操作符,++i是前綴遞增操作符,在大多數(shù)情況下,這兩種遞增操作的結果都是一樣的,但在某些特定的表達式和邏輯中,它們可能會產(chǎn)生不同的效果,本文將帶大家搞清Java中i++ 和 ++i的區(qū)別
    2023-09-09
  • java使用@Transactional時常犯的N種錯誤

    java使用@Transactional時常犯的N種錯誤

    @Transactional是我們在用Spring時候幾乎逃不掉的一個注解,本文主要介紹了使用?@Transactional?時常犯的N種錯誤,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java中正則表達式匹配過程實例詳解

    Java中正則表達式匹配過程實例詳解

    正則匹配即是在給定字符串中查找符合正則表達式的字符,下面這篇文章主要給大家介紹了關于Java中正則表達式匹配過程的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • Java稀疏數(shù)組的應用實踐

    Java稀疏數(shù)組的應用實踐

    本文主要介紹了Java稀疏數(shù)組的應用實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06

最新評論