在spring和springMVC整合的时候,web.xml中对spring的listener是否可以不配置?

睡睡觉OOY 2015-07-17 08:55:56
是这样的,在网上大多数spring和springMVC的整合中,都需要在web.xml里面配置两样东西:

1、对spring配置listener,如图:


2、对springMVC配置servlet,如图:


上面这样的配置确实可以运行,我已经测试过。

但是,在我公司里面,也采用了spring和springMVC的整合,奇怪的是在web.xml中只看到了对了springMVC的servlet配置,却没有见到对spring的listener的配置,如下图,公司的web.xml配置:

web.xml的行数太多,截不完,但是我仔细找过了,确实没有spring的listenner配置!

难道spring和springMVC整合后,可以取消掉spring的listener配置吗?

需要对公司项目说明的几点:
1、公司项目中spring和springMVC各自配置文件都是采用的注解方式进行配置,即没有applicationContext.xml这类似的配置文件,如下图:
spring的配置类:appConfig.java



springMVC的配置类:webConfig.java



webConfig.java,是一路一路的继承下来的,反正最终它继承的是WebMvcConfigurerAdapter,如下图:
...全文
7038 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
A_Big_Banana 2019-05-22
  • 打赏
  • 举报
回复
一个前端控制器就能跑起来了啊。
loong0306 2019-05-21
  • 打赏
  • 举报
回复
mark one times
  • 打赏
  • 举报
回复
楼主你好,我用的就是这种方式,然而跑起来没得到我预期的效果,配置类没起作用,而我的另一个项目也是用这种配置,然后可以跑起来,我想问的是,会照成这种问题的原因是什么?jar包?配置?
Dreamer_why 2017-05-13
  • 打赏
  • 举报
回复
我记得不配置的话会自动加载一个默认名字的配置文件,好想叫做servlet-application.xml吧,记不太清楚来了
Marvel__Dead 2017-05-13
  • 打赏
  • 举报
回复
引用 3 楼 fjtnylk 的回复:
估计你们项目里没和Ioc容器一起使用。 一般配置spring监听器都是为了配合Ioc容器一起使用的。 spring源代码里可以看到,启动web服务器的时候会调用监听器的上下文初始化方法,然后去初始化Ioc容器。
SpringMVC是Spring的一部分,对于IOC控制反转,SpringMVC里面都会根据bean配置文件或者注解自动添加的。
大海啊ai大海 2015-10-13
  • 打赏
  • 举报
回复
Spring自带了几种类型的应用上下文:
1、ClassPathXmlApplicationContext-——从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做类资源;
2、FileSystemXmlapplicationContext——读取文件系统下的XML配置文件并加载上下文定义;
3、XmlWebApplicationContext——读取Web应用下的XML配置文件并装配上下文定义。
Spring MVC采用第三种方式,首先你肯定配置了dispatcher-servlet这个servlet,它会自动加载dispatcher-servlet.xml。如果你只有这一个XML配置文件,那就不用加<listener>那一块的配置。但往往你或许还有个applicationContext.xml,那你就应该加载这个应用上下文(除非你不用他,那你干嘛还要定义他呢?)
那么问题来了,你应该用上面提到的哪种方式的应用上下文呢?(如果用前两种方式,我觉得就不用listener,这个是我臆断的,觉得合理就采纳,也希望大家提出意见)这时候大家往往会选择第三种,在web.xml部署描述符中加载应用上下文。dispatcher-servlet.xml可以自动加载,那么你也想同样的加载applicationContext.xml的话,你就得用listener:
<context-param>
<param-name>contextConfigLocation<param-name>
<param-value>
classpath:application.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
tony4geek 2015-10-13
  • 打赏
  • 举报
回复
ContextLoaderListener or not?


引用 13 楼 dahai795800 的回复:

这里

spring 官网
大海啊ai大海 2015-10-13
  • 打赏
  • 举报
回复
引用 11 楼 rui888 的回复:
引用 9 楼 dahai795800 的回复:
http://www.codesenior.com/en/tutorial/Spring-ContextLoaderListener-And-DispatcherServlet-Concepts

经试验:
1、不加
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

直接写:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>2</load-on-startup>
</servlet>

这时候程序报错,java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]说明这里如果不给dispatcher,web.xml会去WEB-INF下找dispatcher-servlet.xml。
这这时候这servlet中加
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dispatcher-servlet.xml</param-value>
</init-param>

就不报错了,程序可以运行。
由此可以证明,若只有dispatcher-servlet.xml这样的spring配置文件,则不需linstener,因为web.xml中的servlet应该会自己去找,只是在WEB-INF下找。
然后加上classpath:dispatcher-servlet.xml,他就会去classpath下找(classpath的默认路径是什么呀?
大海啊ai大海 2015-10-13
  • 打赏
  • 举报
回复
引用 11 楼 rui888 的回复:
引用 9 楼 dahai795800 的回复:
http://www.codesenior.com/en/tutorial/Spring-ContextLoaderListener-And-DispatcherServlet-Concepts

我看上面,意思是:dispatcher-servlet.xml的spring也要listener,但我现在看的一本书上说不用,我做实验试试吧。
做一个梦想家 2015-10-12
  • 打赏
  • 举报
回复
ContextLoaderListener 是在上下文加载的时候调用一些配置进行初始化,比如你配置的<context-param>之类的标签。
睡睡觉OOY 2015-08-07
  • 打赏
  • 举报
回复
引用 5 楼 wi496481 的回复:
[quote=引用 1 楼 Inhibitory 的回复:] 1. 如果只有 Spring mvc 的一个 Servlet,listener 可以不用。 2. 但是如果用了Shiro 等,Shiro 用到的 Spring 的配置必须在 listener 里加载。 3. 一般 Dao, Service 的 Spring 配置都会在 listener 里加载,因为可能会在多个 Servlet 里用到,因为父子 Context 的可见性问题,防止重复加载所以在 listener 里加载。 所以,有时可用可不用,有时必用,具体看情况。
就像一个单例模式一样的,不能加载多次[/quote] 朋友,能否简单举个例子呢,你这样说,我还是不太懂啊!
睡睡觉OOY 2015-07-29
  • 打赏
  • 举报
回复
引用 3 楼 fjtnylk 的回复:
估计你们项目里没和Ioc容器一起使用。 一般配置spring监听器都是为了配合Ioc容器一起使用的。 spring源代码里可以看到,启动web服务器的时候会调用监听器的上下文初始化方法,然后去初始化Ioc容器。
朋友,IOC容器是用了的啊,@Bean标签就是把对象放进IOC容器的
迷林 2015-07-29
  • 打赏
  • 举报
回复
引用 1 楼 Inhibitory 的回复:
1. 如果只有 Spring mvc 的一个 Servlet,listener 可以不用。 2. 但是如果用了Shiro 等,Shiro 用到的 Spring 的配置必须在 listener 里加载。 3. 一般 Dao, Service 的 Spring 配置都会在 listener 里加载,因为可能会在多个 Servlet 里用到,因为父子 Context 的可见性问题,防止重复加载所以在 listener 里加载。 所以,有时可用可不用,有时必用,具体看情况。
就像一个单例模式一样的,不能加载多次
心碎了无痕 2015-07-19
  • 打赏
  • 举报
回复
估计你们项目里没和Ioc容器一起使用。 一般配置spring监听器都是为了配合Ioc容器一起使用的。 spring源代码里可以看到,启动web服务器的时候会调用监听器的上下文初始化方法,然后去初始化Ioc容器。
睡睡觉OOY 2015-07-18
  • 打赏
  • 举报
回复
引用 1 楼 Inhibitory 的回复:
1. 如果只有 Spring mvc 的一个 Servlet,listener 可以不用。 2. 但是如果用了Shiro 等,Shiro 用到的 Spring 的配置必须在 listener 里加载。 3. 一般 Dao, Service 的 Spring 配置都会在 listener 里加载,因为可能会在多个 Servlet 里用到,因为父子 Context 的可见性问题,防止重复加载所以在 listener 里加载。 所以,有时可用可不用,有时必用,具体看情况。
朋友,能否把第三点再说明白点呢?我没太看懂第三点是什么意思啊。
Inhibitory 2015-07-18
  • 打赏
  • 举报
回复
1. 如果只有 Spring mvc 的一个 Servlet,listener 可以不用。 2. 但是如果用了Shiro 等,Shiro 用到的 Spring 的配置必须在 listener 里加载。 3. 一般 Dao, Service 的 Spring 配置都会在 listener 里加载,因为可能会在多个 Servlet 里用到,因为父子 Context 的可见性问题,防止重复加载所以在 listener 里加载。 所以,有时可用可不用,有时必用,具体看情况。
内容概要:本文围绕不确定环境下的多式联运路径优化问题展开研究,提出并实现了基于AFO算法、遗传算法(GA)和粒子群优化算法(PSO)的三种智能优化方法,并借助Matlab平台完成算法编程与仿真。研究构建了考虑时间、成本、转运风险等多重不确定因素的路径优化模型,系统比较了AFO、GA、PSO三种算法在收敛速度、全局寻优能力和稳定性方面的表现,同时引入Matlab自带的全局优化搜索器作为基准对照,深入分析各算法在复杂物流网络的适用边界与性能差异。研究表明,AFO算法在解决此类组合优化问题时展现出更快的收敛效率和更强的局部规避能力。; 适合人群:具备一定Matlab编程基础与运筹优化知识,从事物流工程、交通运输规划、智能算法开发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多式联运、综合货运网络的路径决策支持系统构建;②为不确定性条件下复杂路径规划问题提供智能算法选型依据与技术实现方案;③支持科研人员复现主流优化算法并开展横向性能对比实验,推动算法改进与实际落地。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析算法实现流程,重点理解目标函数设计、约束条件处理及参数敏感性分析部分,可通过调整问题规模与算法参数进行对比实验,进一步拓展至动态路径规划或大规模网络优化等延伸场景。
内容概要:本文研究了基于QLearning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制的应用,通过Matlab代码实现了控制算法的仿真验证。该方法融合强化学习的在线自适应能力与传统PID控制的稳定性优势,利用QLearning算法动态优化PID控制器的比例、积分、微分参数,以应对水下复杂流体环境、模型不确定性及外部干扰等挑战,从而提升AUV轨迹跟踪的精度、鲁棒性与动态响应性能。文系统阐述了AUV的六自由度非线性动力学建模过程、QLearning算法的状态空间与动作空间设计、奖励函数构造及训练机制,并详细说明了PID参数自整定的闭环控制架构。仿真结果表明,相较于传统固定参数PID控制器,该智能控制策略在多种工况下均展现出更优的控制效果,有效抑制了超调,加快了响应速度,并增强了抗干扰能力。; 适合人群:具备自动控制理论、强化学习基础及Matlab/Simulink仿真能力,从事水下机器人、智能控制、海洋工程、自动化等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于AUV、UUV等无人水下平台的高精度自主导航与运动控制;②为解决非线性、强耦合、时变系统的控制器参数自适应整定问题提供智能化解决方案;③作为强化学习与经典控制理论深度融合的技术范例,推动智能控制算法在海洋装备的工程化应用。; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节,重点剖析QLearning的状态-动作-奖励机制设计、PID参数更新逻辑及仿真对比实验结果,有条件者可在更复杂的动力学模型或实际硬件平台上进一步验证与优化算法性能。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧