亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

詳解IDEA中SpringBoot整合Servlet三大組件的過程

瀏覽:60日期:2023-04-08 11:28:42

Spring MVC整合SpringBoot提供為整合MVC框架提供的功能特性

內置兩個視圖解析器:ContentNegotiatingViewResolver和BeanNameViewResolver 支持靜態資源以及WebJars 自動注冊了轉換器和格式化器 支持Http消息轉換器 自動注冊了消息代碼解析器 支持靜態項目首頁index.html 支持定制應用圖標favicon.ico 自動初始化Web數據綁定器:ConfigurableWebBindingInitializer

Spring MVC功能擴展實現

項目環境搭建(結構如這篇博客) 功能擴展實現 注冊視圖管理器

/*在config文件夾下編寫配置類 實現WebMvcConfigurer接口,擴展MVC功能 測試前將LoginController控制類注釋,更好的觀察效果 */@Configurationpublic class MyMVCConfig implements WebMvcConfigurer { //添加視圖管理 @Override public void addViewControllers(ViewControllerRegistry registry) { // 請求toLoginPage映射路徑或者login.html頁面都會自動映射到login.html頁面 registry.addViewController('/toLoginPage').setViewName('login'); registry.addViewController('/login.html').setViewName('login'); }}

- 測試后發現,使用這種方式無法獲取后臺處理的數據,比如登錄頁面中的年份。- 使用WebMvcConfigurer接口中的addViewControllers(ViewControllerRegistry registry)方法定制視圖控制,只適合較為簡單的無參數視圖Get方式的請求跳轉,對于有參數或需要業務處理的跳轉請求,最好還是采用傳統方式處理請求。

注冊自定義攔截器

/* 自定義一個攔截器類,實現簡單的攔截業務 */@Configurationpublic class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 用戶請求/admin開頭路徑時,判斷用戶是否登錄 String uri = request.getRequestURI(); Object loginUser = request.getSession().getAttribute('loginUser'); if(uri.startsWith('/admin')&&null==loginUser){ response.sendRedirect('/toLoginPage'); return false; } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,@Nullable ModelAndView modelAndView) throws Exception { //向request域中存放當前年份用于頁面動態展示 request.setAttribute('currentYear', Calendar.getInstance().get(Calendar.YEAR)); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }}

- 自定義攔截器類MyInterceptor實現了HandlerInterceptor接口。在preHandle()方法中,如果用戶請求以“/admin”開頭,則判斷用戶是否登錄,如果沒有登錄,則重定向到“/toLoginPage”請求對應的登錄頁面。- 在postHandle()方法中,使用request對象向前端頁面傳遞表示年份的currentYear數據。- 在自定義配置類MyMVCConfig中,重寫addInterceptors()方法注冊自定義的攔截器,如下

@Autowired private MyInterceptor myInterceptor; //添加攔截器管理 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor) .addPathPatterns('/**') .excludePathPatterns('/login.html'); }

- 使用@Autowired注解引入自定義的MyInterceptor攔截器組件,重寫其中addInterceptors()方法注冊自定義的攔截器- 使用addPathPatterns('/**')方法攔截所有路徑請求,excludePathPatterns('/login.html')方法對“login.html”路徑請求放行處理。- 項目重啟后,訪問localhost:8080/admin,跳轉到登錄界面,自定義攔截器生效。

Spring Boot 整合Servlet三大組件

組件注冊方式整合Servlet三大組件

在Spring Boot中,使用組件注冊方式整合內嵌Servlet容器的Servlet、Filter、Listener三大組件時, 只需要將這些自定義組件通過ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean類注冊到容器中即可

組件注冊方式整合 Servlet

/* 自定義Servlet類 使用@Component注解將MyServlet類作為組件注入Spring容器。該類繼承自HTTPServlet, 通過HttpServletResponse對象向頁面輸出'hello MyServlet' */@Componentpublic class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write('hello MyServlet'); }}

/* 嵌入式Servlet容器三大組件配置 @Configuration注解將該類標注為配置類,getServlet()方法用于注冊自定義MyServlet, 返回ServletRegistrationBean類型的Bean對象 */@Configurationpublic class ServletConfig { // 注冊Servlet組件 @Bean public ServletRegistrationBean<javax.servlet.Servlet> getServlet(MyServlet myServlet){ return new ServletRegistrationBean<javax.servlet.Servlet>(myServlet,'/myServlet'); }}

啟動測試,訪問myServlet,顯示數據說明成功整合Servlet組件

組件注冊方式整合Filter

/* 自定義Filter類 使用@Component注解將當前MyFilter類作為組件注入到Spring容器中 MyFilter類實現Filter接口,重寫如下三個方法,在doFilter()方法中想控制臺打印'hello MyFilter' */@Componentpublic class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println('hello MyFilter'); filterChain.doFilter(servletRequest,servletResponse); }}

//注冊Filter組件 @Bean public FilterRegistrationBean<javax.servlet.Filter> getFilter(MyFilter myFilter){ FilterRegistrationBean<javax.servlet.Filter> registrationBean = new FilterRegistrationBean<>(myFilter); registrationBean.setUrlPatterns(Arrays.asList('/toLoginPage','/myFilter')); return registrationBean; }

啟動測試,訪問/myFilter,控制臺看到hello MyFilter

組件注冊方式整合Listener

/* 自定義Listener類 */@Componentpublic class MyListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println('contextInitialized ...'); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println('contextDestroyed ...'); }}

//注冊Listener組件 @Bean public ServletListenerRegistrationBean<java.util.EventListener> getServletListener(MyListener myListener){ return new ServletListenerRegistrationBean<>(myListener); }

程序啟動成功后,會自動打印輸出'contextInitialized ...',單擊坐下的Exit關閉會輸出銷毀的監聽信息,如果直接強制關閉程序,無法打印監聽信息。

注意:當自定義的Servlet組件配置類ServletConfig全部注釋并重啟項目后,自定義的Servlet、Filter、Listener組件仍然生效。 原因:嵌入式Servlet容器對Servlet、Filter、Listener組件進行了自動化識別和配置,而自定義的Servlet、Filter、Listener都繼承/實現了對應的類/接口,同時自定義的這三個組件都使用了@Component注解,會自動被掃描為Spring組件。

路徑掃描整合Servlet三大組件

使用路徑掃描的方式整合三大組件,需要再自定義組件上分別添加@WebServlet、@WebFilter、@WebListener注解進行聲明,并配置相關注解屬性,在主程序啟動類上使用@ServletComponentScan注解開啟組件掃描。 分別用以下三個注解代替@Component注解進行配置三個組件@WebFilter(value={'/antionLogin','/antionMyFilter'}) @WebListener @WebServlet('/annotationServlet') 啟動類上加入@ServletComponentScan注解,開啟基于注解的組件掃描支持 對于Filter測試訪問'/antionLogin','/antionMyFilter',對于Servlet測試訪問'/annotationServlet',測試結果如上。

到此這篇關于詳解IDEA中SpringBoot整合Servlet三大組件的過程的文章就介紹到這了,更多相關SpringBoot整合Servlet三大組件內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 99pao在线视频精品免费 | 国产美女操 | 一级毛毛片毛片毛片毛片在线看 | 国产成人精品高清在线观看99 | 国产精品午夜性视频网站 | 日韩欧美小视频 | 中国黄色免费网站 | 欧美日本俄罗斯一级毛片 | 99久热re在线精品99 6热视频 | 麻豆国产高清精品国在线 | 香蕉久久视频 | 一区二区3区免费视频 | 轻轻碰在线视频免费视频 | 成人亚洲欧美综合 | 看黄色一级视频 | 国产成人麻豆tv在线观看 | 91手机视频在线 | 精品一区二区三区在线观看视频 | 欧美日韩亚洲综合在线一区二区 | 千百橹最新亚洲地址在线播放 | 精品国产免费观看久久久 | 视频在线二区 | 亚洲视频精品 | 日本欧美国产精品 | 婷婷久久五月天 | 久操视频免费看 | 国产97碰免费视频 | 女神穿上情趣丝袜啪啪一整晚 | 日韩精品一区二区三区中文字幕 | 免费看a级毛片 | 欧美高清国产在线观看 | 免费一级e一片在线播放 | 日韩精品1区 | 国产一级特黄aa级特黄裸毛片 | 午夜视频一区 | 成人午夜在线 | 国产精品夜间视频香蕉 | 亚洲国产高清在线 | 亚洲图色在线 | 国产成人久久精品一区二区三区 | 一线高清视频在线观看www国产 |