成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring定義Controller接口的這些方式你肯定不知道

開發 前端
在這個程序中我們還可以讓這個程序成為一個受應用服務管理的Servlet程序。可以將注解改成@WebServlet("/others/servlet")。只是換成這個注解還并不能生效,還需要在啟動類(任何配置類上)添加@ServletComponentScan注解。

環境:Springboot2.4.12

概述

當一個請求過來后Spring是如何進行處理的?下面簡單的羅列下請個的過程中核心組件

SpringMVC處理的流程:

  1. DispatcherServlet 所有請求的入口
  2. HandlerMapping 將請求地址與處理程序關聯
  3. HandlerAdapter 真正處理程序,如執行上一步中對應的處理程
  4. HandlerMethodArgumentResolver 對參數進行解析,這里面還涉及到很多其它東西
  5. HanlderMethodReturnValueHandler 對返回值進行輸出處理
  6. ViewResolver 結果HandlerAdapter返回的有ModelAndView則會應用視圖解析器

常規Controller定義

@RestController
@RequestMapping("/users")
public class UsersController {
  @GetMapping("/save")
  public Object save(Users users) {
    return users ;
  }
}

上面這個Controller接口是我們最常的定義方法,對于絕大多數人來說或許也就知道這樣去定義Controller接口,而這種定義Controller方式基本上已經可以滿足我們日常的所有操作了。接下來看看其它的定義Controller方法

HttpRequestHandler

@Component("/others/chrh")
public class ControllerHttpRequestHandler implements HttpRequestHandler {
  @Override
  public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf8");
    PrintWriter out = response.getWriter() ;
    out.print("<h1>你好,HttpRequestHandler</h1>") ;
    out.close() ;
  }
}

定義一個類實現HttpRequestHandler接口即可,注意這里注解@Component("/others/chrh")使用的以‘/’ 開頭,為什么這么定義?在概述中說到HandlerMapping是用來將請求地址與處理程序關聯起來,在常規中都是使用@RequestMapping定義接口請求地址,那在這里我們是不能用該注解的,但是又要讓容器知道我們這個接口就必須使用'/'開頭,這樣就會有一個 BeanNameUrlHandlerMapping的HandlerMapping將我們這個Bean進行收集保存起來,以 /others/chrh為key,Bean對象為value保存到Map中。

測試

圖片圖片

Controller接口

定義一個Bean實現該即可

@Component("/others/custom")
public class CustomController implements Controller {


  @Override
  public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    response.setContentType("text/html;charset=utf8");
    PrintWriter out = response.getWriter() ;
    out.print("<h1>Controller接口</h1>") ;
    out.close() ;
    return null ;
  }


}

Bean的名稱還是以'/' 開頭,那么還是由BeanNameUrlHandlerMapping與之關聯

測試

圖片圖片

繼承HttpServlet

這里的判斷依據就是你的這個Bean是否是Servlet接口類型(有沒有實現Servlet接口)。

@Component("/others/servlet")
public class ControllerServlet extends HttpServlet {


  private static final long serialVersionUID = 1L;


  @Override
  protected void service(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf8");
    PrintWriter out = response.getWriter() ;
    out.print("<h1>你好 HttpServlet</h1>") ;
    out.close() ;
  }


}

這樣看起來就是個標準的Servlet程序。

如果你只是這樣,那這可運行不起來,你還需要注冊一個
SimpleServletHandlerAdapter。

@Configuration
public class WebConfig implements WebMvcConfigurer {
  @Bean
  public SimpleServletHandlerAdapter simpleServletHandlerAdapter() {
    return new SimpleServletHandlerAdapter() ;
  }
}

測試

圖片圖片

在這個程序中我們還可以讓這個程序成為一個受應用服務管理的Servlet程序。可以將注解改成@WebServlet("/others/servlet")。只是換成這個注解還并不能生效,還需要在啟動類(任何配置類上)添加@ServletComponentScan注解。

以上就是在SpringMVC中支持的幾種接口定義處理方式。

下一篇文章會對上面幾種實現的方式進行源碼分析,一個請求是如何知道使用哪個HandlerMapping的,找到了HandlerMapping又是怎么確定由哪個HandlerAdapter處理的(在上面的例子中,每一種實現他們的實現方法都不一樣,所以一定的需要不同的HandlerAdapter進行處理);通過源碼的分析,讓你知其然,知其所以然。關注我讓你對Spring源碼不再畏懼。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2018-09-02 15:43:56

Python代碼編程語言

2024-05-08 08:30:38

Controller接口組件

2023-11-15 08:22:42

Java開發小技巧

2021-08-30 07:49:33

索引ICP Mysql

2019-07-23 15:56:56

Spring Boot部署servlet

2019-07-23 17:52:59

Spring BootJava開發

2023-11-30 08:32:31

OpenFeign工具

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2022-05-05 12:02:45

SCSS函數開發

2020-03-05 11:10:18

Left join數據庫MySQL

2014-12-08 10:39:15

2022-07-17 06:53:24

微服務架構

2011-09-15 17:10:41

2021-02-01 23:23:39

FiddlerCharlesWeb

2022-10-13 11:48:37

Web共享機制操作系統

2009-12-10 09:37:43

2021-08-10 10:25:16

HTML 網絡開發前端開

2010-08-23 09:56:09

Java性能監控

2010-08-06 13:15:35

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品在线 | 偷拍自拍网址 | 中文字幕乱码视频32 | 中文字幕精品一区久久久久 | 伊人伊人 | 日韩欧美在 | 久久久久久久久久久一区二区 | 久久精品亚洲国产奇米99 | 国产96在线 | 天天躁日日躁狠狠躁白人 | 日本黄色片免费在线观看 | 成人久久视频 | 羞羞视频免费观 | 久久婷婷麻豆国产91天堂 | 国产va| 久久久久久综合 | 欧美日韩精品 | 亚洲午夜精品一区二区三区 | 综合久久亚洲 | 色婷婷综合久久久中文字幕 | 精品乱码一区二区 | 亚洲网站在线观看 | 在线国产一区 | 国产电影一区 | 伊人网站在线观看 | 青青草原综合久久大伊人精品 | 亚洲看片网站 | 日韩成人影院 | 欧美成人免费 | 日韩午夜 | 国产一区二区在线播放 | 午夜小视频在线播放 | 亚洲午夜精品一区二区三区他趣 | 欧美精品久久久久久久久老牛影院 | 日韩一三区 | 8x国产精品视频一区二区 | 91精品国产综合久久久久久首页 | 亚洲精品99 | 国产婷婷色综合av蜜臀av | 北条麻妃一区二区三区在线观看 | 91麻豆产精品久久久久久夏晴子 |