偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

SpringBoot對Spring MVC都做了哪些事?(四)

開發(fā) 架構(gòu)
JAX-RS使用了Java SE5引入的Java注解來簡化Web服務(wù)的客戶端和服務(wù)端的開發(fā)和部署。

環(huán)境:Springboot2.4.12

上一篇:《??SpringBoot對Spring MVC都做了哪些事?(三)??》

JAX-RS(Jersey)支持

?JAX-RS是JAVA EE6 引入的一個新技術(shù)。 JAX-RS即Java API for RESTful Web Services,是一個Java 編程語言的應(yīng)用程序接口,支持按照表述性狀態(tài)轉(zhuǎn)移(REST)架構(gòu)風(fēng)格創(chuàng)建Web服務(wù)。JAX-RS使用了Java SE5引入的Java注解來簡化Web服務(wù)的客戶端和服務(wù)端的開發(fā)和部署。

Jersey RESTful Web Services框架是開源,生產(chǎn)質(zhì)量的,用于在Java中開發(fā)RESTful Web服務(wù)的框架,該框架提供對JAX-RS API的支持,并充當JAX-RS( JSR 311和JSR 339 )參考實現(xiàn)。 Jersey框架不只是JAX-RS參考實現(xiàn)。 Jersey提供了自己的API,使用其他功能和實用程序擴展了JAX-RS工具包,以進一步簡化RESTful服務(wù)和客戶端開發(fā)。

如果你更喜歡REST端點的JAX-RS編程模型,那么可以使用一種可用的實現(xiàn),而不是Spring MVC。Jersey和Apache CXF在開箱即用的情況下工作得很好。CXF要求您在應(yīng)用程序上下文中將其Servlet或過濾器注冊為@Bean。Jersey有一些本機的Spring支持,因此我們也在 Spring Boot中為其提供自動配置支持,以及一個啟動器。簡單說就是如果你就是想使用JAX-RS那么SpringBoot為其提供了自動配置的支持。

在SpringBoot中使用的流程:

  • 引入依賴
<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-jersey</artifactId></dependency>
  • 自定義Endpoint
@Component@Path("/hello")public class Endpoint {  @GET  public String message() {    return "Hello";  }}
  • 資源配置
@Componentpublic class JerseyConfig extends ResourceConfig {  public JerseyConfig() {    register(Endpoint.class);  }}

以上配置完成后就可以通過http://xxx:port/hello進行方法接口了。

因為端點是一個Spring @Component,它的生命周期由Spring管理,你可以使用@Autowired注釋來注入依賴項,并使用@Value注釋來注入外部配置。默認情況下,Jersey servlet被注冊并映射到/*。您可以通過添加@ApplicationPath到你的ResourceConfig來更改映射。

@Component// 訪問路徑:http://xxx:port/api-a/hello@ApplicationPath("/api-a")public class JerseyConfig extends ResourceConfig {  public JerseyConfig() {    register(Endpoint.class);  }}

Servlets, Filters, Listeners

當使用嵌入式servlet容器時,你可以通過使用Spring bean或掃描Servlet組件,從Servlet規(guī)范中注冊Servlet、Filter和所有Listener(例如HttpSessionListener)。

任何作為Spring bean的Servlet、Filter或Servlet *Listener實例都被注冊到嵌入式容器中。如果您想要引用應(yīng)用程序中的值,這將非常方便。在配置屬性。

默認情況下,如果上下文只包含單個Servlet,它將被映射到/。在有多個servlet bean的情況下,bean名被用作路徑前綴。過濾器映射到/*。這什么意思,看如下示例:

@Configurationpublic class ServletConfig {  @Bean  public Servlet1 s1() {    return new Servlet1() ;  }  // 如果不定義訪問路徑,那么會將該bean的名稱作為訪問路徑  // http://xxx:port/servlet1  @Bean  public ServletRegistrationBean<Servlet1> servlet1(Servlet1 s1) {    ServletRegistrationBean<Servlet1> servlet = new ServletRegistrationBean<>(s1) ;    return servlet ;  }}

可以通過:ServletRegistrationBean, FilterRegistrationBean, andServletListenerRegistrationBean分別注冊Servlet,F(xiàn)ilter,Listener。

通常情況下,讓Filter bean處于無序狀態(tài)是安全的。如果需要特定的順序,您應(yīng)該用@Order注釋Filter,或者讓它實現(xiàn)Ordered。您不能通過使用@Order注釋其bean方法來配置Filter的順序。如果您不能更改Filter類以添加@Order或?qū)崿F(xiàn)Ordered,那么您必須為Filter定義一個FilterRegistrationBean,并使用setOrder(int)方法設(shè)置注冊bean的訂單。避免配置在Ordered讀取請求體的Filter。HIGHEST_PRECEDENCE,因為它可能違反應(yīng)用程序的字符編碼配置。如果Servlet篩選器包裝了請求,那么它應(yīng)該配置一個小于或等于OrderedFilter.REQUEST_WRAPPER_FILTER_MAX_ORDER的順序。

Servlet上下文初始化

嵌入的servlet容器不會直接執(zhí)行servlet 3.0+javax.servlet.ServletContainerInitializer接口或Spring的org.springframework.web.WebApplicationInitializer接口。這是一個有意的設(shè)計決策,旨在降低第三方庫在war中運行可能破壞Spring Boot應(yīng)用程序的風(fēng)險。

如果你需要在Spring Boot應(yīng)用程序中執(zhí)行servlet上下文初始化,你應(yīng)該注冊一個實現(xiàn)org.springframework.boot.web.servlet.ServletContextInitializer接口的bean。單一的onStartup方法提供了對ServletContext的訪問,如果有必要,可以很容易地用作現(xiàn)有WebApplicationInitializer的適配器。

當使用嵌入式容器時,可以通過使用@ServletComponentScan來啟用帶有@WebServlet、@WebFilter和@WebListener注釋的類的自動注冊。

ServletWebServerApplicationContext

在內(nèi)部,Spring Boot使用了不同類型的ApplicationContext來嵌入servlet容器支持。ServletWebServerApplicationContext是一種特殊類型的WebApplicationContext,它通過搜索單個ServletWebServerFactory bean來引導(dǎo)自己。通常TomcatServletWebServerFactory,JettyServletWebServerFactory,或UndertowServletWebServerFactory已經(jīng)被自動配置。

如果需要通過編程方式配置嵌入式servlet容器,可以注冊一個實現(xiàn)WebServerFactoryCustomizer接口的Spring bean。WebServerFactoryCustomizer提供對ConfigurableServletWebServerFactory的訪問,其中包括許多定制setter方法。下面的例子顯示了如何通過編程方式設(shè)置端口:

@Componentpublic class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {  @Override  public void customize(ConfigurableServletWebServerFactory server) {    server.setPort(9000);  }}

TomcatServletWebServerFactory,JettyServletWebServerFactory和UndertowServletWebServerFactory是ConfigurableServletWebServerFactory的專用變體,分別為Tomcat, Jetty和Undertow提供額外的定制setter方法。下面的例子展示了如何自定義TomcatServletWebServerFactory來提供對tomcat特定配置選項的訪問:

@Componentpublic class TomcatServerCustomizerExample implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {  @Override  public void customize(TomcatServletWebServerFactory server) {    server.addConnectorCustomizers((tomcatConnector) -> {      tomcatConnector.setAsyncTimeout(Duration.ofSeconds(20).toMillis());      tomcatConnector.setURIEncoding("UTF-8");      tomcatConnector.setPort(8088);    });  }}
責任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2022-07-29 09:12:14

Springservlet容器

2022-07-26 07:47:47

SpringMVC

2022-07-26 07:47:09

SpringMVC

2021-01-06 08:24:38

人工智能消費領(lǐng)域AI

2020-12-08 09:30:25

CPU內(nèi)存I

2017-11-14 09:03:36

Spring Clou架構(gòu)演進

2017-11-13 15:48:36

架構(gòu)Spring Clou演進

2014-08-10 14:35:23

2021-08-06 22:45:09

人工智能AI

2017-06-08 09:36:42

京東服務(wù)器

2021-07-16 09:58:02

物聯(lián)網(wǎng)

2022-05-19 07:01:34

架構(gòu)

2023-06-07 08:13:46

PixiJSCanvas 庫

2021-01-03 10:37:50

前端開發(fā)技術(shù)

2019-02-24 23:45:42

5G運營商網(wǎng)絡(luò)

2014-11-12 00:01:29

京東

2019-05-14 09:18:18

程序員PythonJava

2017-06-26 14:52:45

微軟智能云合作

2014-03-26 14:23:36

Microsoft AWindows Azu微軟

2019-05-12 14:51:55

物聯(lián)網(wǎng)客戶體驗IOT
點贊
收藏

51CTO技術(shù)棧公眾號