网站首页详细设计东莞网站建设网站建立

diannao/2026/1/16 13:22:41/文章来源:
网站首页详细设计,东莞网站建设网站建立,衡水网站公司,手机阅读网站开发原因现在JavaConfig配置方式在逐步取代xml配置方式。而WebApplicationInitializer可以看做是Web.xml的替代#xff0c;它是一个接口。通过实现WebApplicationInitializer#xff0c;在其中可以添加servlet#xff0c;listener等#xff0c;在加载Web项目的时候会加载这个接口实…现在JavaConfig配置方式在逐步取代xml配置方式。而WebApplicationInitializer可以看做是Web.xml的替代它是一个接口。通过实现WebApplicationInitializer在其中可以添加servletlistener等在加载Web项目的时候会加载这个接口实现类从而起到web.xml相同的作用。下面就看一下这个接口的详细内容。      首先打开这个接口如下 public interface WebApplicationInitializer {void onStartup(ServletContext var1) throws ServletException; } 只有一个方法看不出什么头绪。但是在这个包下有另外一个类SpringServletContainerInitializer。它的实现如下 package org.springframework.web;import java.lang.reflect.Modifier; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Set; import javax.servlet.ServletContainerInitializer; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.HandlesTypes; import org.springframework.core.annotation.AnnotationAwareOrderComparator;HandlesTypes({WebApplicationInitializer.class}) public class SpringServletContainerInitializer implements ServletContainerInitializer {public SpringServletContainerInitializer() {}public void onStartup(SetClass? webAppInitializerClasses, ServletContext servletContext) throws ServletException {ListWebApplicationInitializer initializers new LinkedList();Iterator var4;if(webAppInitializerClasses ! null) {var4 webAppInitializerClasses.iterator();while(var4.hasNext()) {Class? waiClass (Class)var4.next();if(!waiClass.isInterface() !Modifier.isAbstract(waiClass.getModifiers()) WebApplicationInitializer.class.isAssignableFrom(waiClass)) {try {initializers.add((WebApplicationInitializer)waiClass.newInstance());} catch (Throwable var7) {throw new ServletException(Failed to instantiate WebApplicationInitializer class, var7);}}}}if(initializers.isEmpty()) {servletContext.log(No Spring WebApplicationInitializer types detected on classpath);} else {servletContext.log(initializers.size() Spring WebApplicationInitializers detected on classpath);AnnotationAwareOrderComparator.sort(initializers);var4 initializers.iterator();while(var4.hasNext()) {WebApplicationInitializer initializer (WebApplicationInitializer)var4.next();initializer.onStartup(servletContext);}}} } 这个类就比较有意思了先不管其他的读一下这段代码可以得到这样的意思。              先判断webAppInitializerClasses这个Set是否为空。如果不为空的话找到这个set中不是接口不是抽象类并且是 WebApplicationInitializer接口实现类的类将它们保存到list中。当这个list为空的时候抛出异常。不为空的话就按照一定的顺序排序并将它们按照一定的顺序实例化。调用其onStartup方法执行。到这里就可以解释WebApplicationInitializer实现类的工作过程了。但是在web项目运行的时候SpringServletContainerInitializer这个类又是怎样被调用的呢。            它只有一个接口ServletContainerInitializer通过它就可以解释SpringServletContainerInitializer是如何被调用的。它的内容如下 package javax.servlet;import java.util.Set;public interface ServletContainerInitializer {void onStartup(SetClass? var1, ServletContext var2) throws ServletException; } 首先这个接口是javax.servlet下的。官方的解释是这样的为了支持可以不使用web.xml。提供了ServletContainerInitializer它可以通过SPI机制当启动web容器的时候会自动到添加的相应jar包下找到META-INF/services下以ServletContainerInitializer的全路径名称命名的文件它的内容为ServletContainerInitializer实现类的全路径将它们实例化。既然这样的话那么SpringServletContainerInitializer作为ServletContainerInitializer的实现类它的jar包下也应该有相应的文件。打开查看如下 哈现在就可以解释清楚了。首先SpringServletContainerInitializer作为ServletContainerInitializer的实现类通过SPI机制在web容器加载的时候会自动的被调用。这个类上还有一个注解HandlesTypes它的作用是将感兴趣的一些类注入到ServletContainerInitializerde 而这个类的方法又会扫描找到WebApplicationInitializer的实现类调用它的onStartup方法从而起到启动web.xml相同的作用。          然后我们自己通过一个实例来实现相同的功能通过一样的方式来访问一个servlet。                   1、定义接口WebParameter它就相当于WebApplicationInitializer。内容如下 public interface WebParameter {void loadOnstarp(ServletContext servletContext); } 可以在这里面添加servletlistener等。 2、定义Servlet。 public class MyServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write(TestSetvlet);} } 3、定义MyWebParameter作为WebParameter的实现类将Servlet添加到上下文并设置好映射。 public class MyWebParameter implements WebParameter {public void loadOnstarp(ServletContext servletContext) {ServletRegistration.Dynamic testSetveltservletContext.addServlet(test,com.test.servlet.MyServlet);testSetvelt.setLoadOnStartup(1);testSetvelt.addMapping(/test);} } 当然也可以把第2步和第3步合在一起 public class MyServlet extends HttpServlet implements WebParameter {Overridepublic void loadOnstarp(ServletContext servletContext) {ServletRegistration.Dynamic testSetveltservletContext.addServlet(test,com.test.servlet.MyServlet);testSetvelt.setLoadOnStartup(1);testSetvelt.addMapping(/test);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write(TestSetvlet);} } 而且以后可以将Spring的applicationContext.xml与web.xml融合在一个类中。即注解为Configuration,并实现WebApplicationInitializer。 4、定义好WebConfig作为ServletContainerInitializer的实现类它的作用是扫描找到WebParameter的实现类并调用其方法。 HandlesTypes({WebParameter.class}) public class WebConfig implements ServletContainerInitializer {public void onStartup(SetClass? set, ServletContext servletContext) throws ServletException {Iterator var4;if (set!null){var4set.iterator();while(var4.hasNext()){Class? clazz (Class?) var4.next();if (!clazz.isInterface() !Modifier.isAbstract(clazz.getModifiers())WebParameter.class.isAssignableFrom(clazz)){try {((WebParameter) clazz.newInstance()).loadOnstarp(servletContext);}catch (Exception e){e.printStackTrace();}}}}} }   5、根据SPI机制定义一个META-INF/services文件夹并在其下定义相关文件名称并将WebConfig的类全名称填入其中。 6、最终结果       本文转自https://blog.csdn.net/zq17865815296/article/details/79464403转载于:https://www.cnblogs.com/nizuimeiabc1/p/11031150.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/91445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站开发整体流程网站做调查问卷给钱的兼职

最具人气大学排行榜7月榜单发布 清华大学排第一JPG,395x289,231KB,342_249大学人气排行榜 你的大学上榜了吗JPG,392x290,231KB,337_250大学人气排行榜 你的大学上榜了吗JPG,596x447,…

设计网站案例做网站必须要有的素材

前言 今天继续来学new和delete operator new 与operator delete函数 new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通…

网站备案电话没接邢台市政建设集团股份有限公司网站

2.2. IME管理端(IMMS)初始化流程 IMMS运行在system server进程中,属于系统服务的一部分,用于控制输入法的显示/隐藏、切换、绑定等操作。 涉及代码文件路径: IMMS运行在system server进程中,属于系统服务的…

网页模板下载网站本地建设网站软件

我看着工资单上每一个开发团队成员的薪水,慢慢地我不能保持淡定了。 而当我看到我的工资排名是倒数的时候——靠近最后一名——我不由得倒抽一口冷气。就像圣诞故事中的那个可爱的小男孩Ralphie ,想买气枪却被忽悠会有危险一样,我也不断忽悠…

找人建设网站辽宁省住建厅官网

list容器概念 list是一个双向链表容器,可高效地进行插入删除元素。 List 特点: list不可以随机存取元素,所以不支持at.(position)函数与[]操作符。可以对其迭代器执行,但是不能这样操作迭代器:it3使用时包含 #includ…

江苏国龙翔建设网站.企业网络解决方案

为什么80%的码农都做不了架构师?>>> 一、授权认证 1、请求用户授权Token URL: https://api.weibo.com/oauth2/authorize HTTP请求方式:GET/POST 请求参数 必选 类型及范围 说明 client_id true string 申请应用时分配的AppKey。 redire…

网站设计公司哪家比较好佛山定制网站建设

Redis雪崩问题通常发生在大量缓存同时过期,导致所有请求直接打到数据库上,从而可能压垮数据库。解决这一问题的关键在于分散缓存失效时间,避免集中失效。此外,还可以通过限流、降级、预热等策略来进一步缓解压力。 下面是一个综合…

运城市做网站公司wordpress随机弹窗插件

问题: POST http://127.0.0.1:6000/api/login net::ERR_UNSAFE_PORT 原因: 这个错误表明你在尝试使用一个被认为是不安全的端口进行网络请求。通常情况下,浏览器会限制使用一些特定的端口,因为它们被认为是潜在的安全风险。 在这种情况下&a…

东钱湖镇建设局网站网络建设公司排名

之前有写过用kali开启web服务方法,这次写个用cendos7开启服务的步骤! 1、安装httpd yum install -y httpd 若显示安装失败,报错原因为找不到httpd的安装包,可参考这篇文件更新yum源:CentOS 7更换yum源|详细步骤-CSDN…

唐山网站建设|唐山网站制作|公司建站666起|唐山红城网络网站首页的作用

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

做棋牌网站建设哪家好写小说赚钱的网站

先看一下拖拽相关的事件:dragover、dragenter drop和dragleave 。 dragover事件:当被拖动的元素在一个可放置目标上方时,该事件会被触发。 通常,我们会使用event.preventDefault()方法来取消浏览器默认的拖放行为,以便…

做网站要要多少钱广西网络营销外包公司

亚利桑那州立大学(简称“ASU”)在官网宣布与OpenAI达成技术合作。从2024年2月份开始,为所有学生提供ChatGPT企业版访问权限,主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品,AS…

注册个网站要多少钱wordpress浮动导航菜单

Python标准模块--logging参考http://www.cnblogs.com/zhbzz2007/p/5943685.html1 logging模块简介logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print,具备…

网站备案法律百度网址提交入口平台

阿里HR面试核心的几个问题: 1、你为什么离职? 2、你怎么看待自己的职业生涯?(包括怎么平衡家庭和工作的关系、加班、选择一家公司时的考量、location等) 3、薪资期望 4、项目中遇到的最大挑战是什么?怎么…

做外贸网站怎么访问外国网站站长工具是什么意思

有这样一句名言:要吃掉一头大象,每次吃一口。—— 克雷顿艾布拉姆斯(Creighton Abrams)这句名言给我们的启示就是:看起来非常艰巨的任务,不能一蹴而就,需要进行任务分解,一步一步把它…

中国建设局网站查询建设银行保定分行网站

9.1 模板方法模式概述 模板方法模式是一种行为设计模式,它使用一个抽象的基类定义了一个操作中的算法的骨架,而将一些步骤的实现延迟到子类中。模板方法模式允许子类在不改变算法结构的情况下重新定义算法中的某些步骤。 9.2 代码示例 在Python中使用…

优化一个网站需要多少钱合肥网站建设哪家好价格

使用在 DateTimeFormatInfo 的属性中存储的标准或自定义模式设置 DateTime 值的格式。 可以通过设置可写 DateTimeFormatInfo 的关联属性用自定义模式替代标准模式。若要确定 DateTimeFormatInfo 是否是可写的,请使用 IsReadOnly 属性。 下表列出了每一种标准模式的…

网站上传图片问题江苏建设工程造价管理网站

Mysql的大体结构 客户端:用于链接mysql的软件 连接池: sql接口: 查询解析器: MySQL连接层 连接层: 应用程序通过接口(如odbc,jdbc)来连接mysql,最先连接处理的是连接层。 连接层…

0基础学做网站关于建设设计院公司网站的建议

转载自 史上最全 50 道 Redis 面试题 1、什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存…