电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解IDEA中SpringBoot整合Servlet三大組件的過(guò)程

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

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

內(nèi)置兩個(gè)視圖解析器:ContentNegotiatingViewResolver和BeanNameViewResolver 支持靜態(tài)資源以及WebJars 自動(dòng)注冊(cè)了轉(zhuǎn)換器和格式化器 支持Http消息轉(zhuǎn)換器 自動(dòng)注冊(cè)了消息代碼解析器 支持靜態(tài)項(xiàng)目首頁(yè)index.html 支持定制應(yīng)用圖標(biāo)favicon.ico 自動(dòng)初始化Web數(shù)據(jù)綁定器:ConfigurableWebBindingInitializer

Spring MVC功能擴(kuò)展實(shí)現(xiàn)

項(xiàng)目環(huán)境搭建(結(jié)構(gòu)如這篇博客) 功能擴(kuò)展實(shí)現(xiàn) 注冊(cè)視圖管理器

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

- 測(cè)試后發(fā)現(xiàn),使用這種方式無(wú)法獲取后臺(tái)處理的數(shù)據(jù),比如登錄頁(yè)面中的年份。- 使用WebMvcConfigurer接口中的addViewControllers(ViewControllerRegistry registry)方法定制視圖控制,只適合較為簡(jiǎn)單的無(wú)參數(shù)視圖Get方式的請(qǐng)求跳轉(zhuǎn),對(duì)于有參數(shù)或需要業(yè)務(wù)處理的跳轉(zhuǎn)請(qǐng)求,最好還是采用傳統(tǒng)方式處理請(qǐng)求。

注冊(cè)自定義攔截器

/* 自定義一個(gè)攔截器類,實(shí)現(xiàn)簡(jiǎn)單的攔截業(yè)務(wù) */@Configurationpublic class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 用戶請(qǐng)求/admin開(kāi)頭路徑時(shí),判斷用戶是否登錄 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域中存放當(dāng)前年份用于頁(yè)面動(dòng)態(tài)展示 request.setAttribute('currentYear', Calendar.getInstance().get(Calendar.YEAR)); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }}

- 自定義攔截器類MyInterceptor實(shí)現(xiàn)了HandlerInterceptor接口。在preHandle()方法中,如果用戶請(qǐng)求以“/admin”開(kāi)頭,則判斷用戶是否登錄,如果沒(méi)有登錄,則重定向到“/toLoginPage”請(qǐng)求對(duì)應(yīng)的登錄頁(yè)面。- 在postHandle()方法中,使用request對(duì)象向前端頁(yè)面?zhèn)鬟f表示年份的currentYear數(shù)據(jù)。- 在自定義配置類MyMVCConfig中,重寫addInterceptors()方法注冊(cè)自定義的攔截器,如下

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

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

Spring Boot 整合Servlet三大組件

組件注冊(cè)方式整合Servlet三大組件

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

組件注冊(cè)方式整合 Servlet

/* 自定義Servlet類 使用@Component注解將MyServlet類作為組件注入Spring容器。該類繼承自HTTPServlet, 通過(guò)HttpServletResponse對(duì)象向頁(yè)面輸出'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注解將該類標(biāo)注為配置類,getServlet()方法用于注冊(cè)自定義MyServlet, 返回ServletRegistrationBean類型的Bean對(duì)象 */@Configurationpublic class ServletConfig { // 注冊(cè)Servlet組件 @Bean public ServletRegistrationBean<javax.servlet.Servlet> getServlet(MyServlet myServlet){ return new ServletRegistrationBean<javax.servlet.Servlet>(myServlet,'/myServlet'); }}

啟動(dòng)測(cè)試,訪問(wèn)myServlet,顯示數(shù)據(jù)說(shuō)明成功整合Servlet組件

組件注冊(cè)方式整合Filter

/* 自定義Filter類 使用@Component注解將當(dāng)前MyFilter類作為組件注入到Spring容器中 MyFilter類實(shí)現(xiàn)Filter接口,重寫如下三個(gè)方法,在doFilter()方法中想控制臺(tái)打印'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); }}

//注冊(cè)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; }

啟動(dòng)測(cè)試,訪問(wèn)/myFilter,控制臺(tái)看到hello MyFilter

組件注冊(cè)方式整合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 ...'); }}

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

程序啟動(dòng)成功后,會(huì)自動(dòng)打印輸出'contextInitialized ...',單擊坐下的Exit關(guān)閉會(huì)輸出銷毀的監(jiān)聽(tīng)信息,如果直接強(qiáng)制關(guān)閉程序,無(wú)法打印監(jiān)聽(tīng)信息。

注意:當(dāng)自定義的Servlet組件配置類ServletConfig全部注釋并重啟項(xiàng)目后,自定義的Servlet、Filter、Listener組件仍然生效。 原因:嵌入式Servlet容器對(duì)Servlet、Filter、Listener組件進(jìn)行了自動(dòng)化識(shí)別和配置,而自定義的Servlet、Filter、Listener都繼承/實(shí)現(xiàn)了對(duì)應(yīng)的類/接口,同時(shí)自定義的這三個(gè)組件都使用了@Component注解,會(huì)自動(dòng)被掃描為Spring組件。

路徑掃描整合Servlet三大組件

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

到此這篇關(guān)于詳解IDEA中SpringBoot整合Servlet三大組件的過(guò)程的文章就介紹到這了,更多相關(guān)SpringBoot整合Servlet三大組件內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 钢格板_钢格栅_格栅板_钢格栅板 - 安平县鑫拓钢格栅板厂家 | 昊宇水工|河北昊宇水工机械工程有限公司 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 珠海白蚁防治_珠海灭鼠_珠海杀虫灭鼠_珠海灭蟑螂_珠海酒店消杀_珠海工厂杀虫灭鼠_立净虫控防治服务有限公司 | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 避光流动池-带盖荧光比色皿-生化流动比色皿-宜兴市晶科光学仪器 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 宏源科技-房地产售楼系统|线上开盘系统|售楼管理系统|线上开盘软件 | 门禁卡_智能IC卡_滴胶卡制作_硅胶腕带-卡立方rfid定制厂家 | 走心机厂家,数控走心机-台州博城智能科技有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 焊缝跟踪系统_激光位移传感器_激光焊缝跟踪传感器-创想智控 | 工业设计,人工智能,体验式3D展示的智能技术交流服务平台-纳金网 J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 六自由度平台_六自由度运动平台_三自由度摇摆台—南京全控科技 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 纳米涂料品牌 防雾抗污纳米陶瓷涂料厂家_虹瓷科技 | 铝镁锰板_铝镁锰合金板_铝镁锰板厂家_铝镁锰金属屋面板_安徽建科 | 成人纸尿裤,成人尿不湿,成人护理垫-山东康舜日用品有限公司 | 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 北京康百特科技有限公司-分子蒸馏-短程分子蒸馏设备-实验室分子蒸馏设备 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 农业四情_农业气象站_田间小型气象站_智慧农业气象站-山东风途物联网 | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 |