美文网首页
关于controller的方法名

关于controller的方法名

作者: 在路上的小海贼 | 来源:发表于2018-11-28 11:59 被阅读0次

前段时间遇到一个问题,自己的项目在IDEA中正常运行,但是打war包部署到tomcat中,tomcat竟然无法启动,报错如下:
06-Dec-2016 18:42:10.563 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1101)
at org.apache.catalina.startup.HostConfigDeployDirectory.run(HostConfig.java:1813) at java.util.concurrent.ExecutorsRunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsCacheFilter': Cannot create inner bean '(inner bean)#5e2b6554' of type [grails.plugin.cache.web.filter.simple.MemoryPageFragmentCachingFilter] while setting bean property 'filter'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#5e2b6554': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void grails.plugin.cache.web.filter.PageFragmentCachingFilter.setUrlMappingsHandlerMapping(org.grails.web.mapping.mvc.UrlMappingsHandlerMapping); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'urlMappingsHandlerMapping': Cannot resolve reference to bean 'grailsUrlMappingsHolder' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsUrlMappingsHolder': Invocation of init method failed; nested exception is java.util.ConcurrentModificationException
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:687)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:52)
at org.springframework.boot.context.web.SpringBootServletInitializer.run(SpringBootServletInitializer.java:133)
at org.grails.boot.context.web.GrailsAppServletInitializer.createRootApplicationContext(GrailsAppServletInitializer.groovy:57)
at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:81)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5244)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 10 more
以前没遇到过,所以去网上搜答案,折腾了好几个小时也没找到原因,只是知道从某个版本开始就是报错了。于是二分法查找svn的版本,然后对比两个版本的修改日志,发现报错的版本比不报错的版本除了修改一些bug外,也就是CompanyController中多了四个方法,由于当时找不到原因,再加上这四个方法在这个版本中也不是必要的,就是给注销掉了,但这个问题一直存在。
后来某个版本要上线,正好需要用到那几个方法,我告诉负责写这块代码的同事,把相关的功能分出去写成一个独立的controller,不要影响主版本运行。当然,这个问题还是要解决,然后继续寻找问题的原因。对比代码,发现新增加的方法名如CompanyIn、CompanyOut,感觉没有什么特别啊,不会是grails的关键字吧,也不可能这样起方法名太常见了。找来找去,竟然让我发现view页面中调用方法名时有些是大写有些是小写,等等。。。方法名大写?平时controller中方法名都是小写的,我就顺手给改过来了。那个时候都有点神经质了,改一点东西都要打个war包放到tomcat中运行一下试试,一运行,发现不报错了。。。
问题的原因竟然出在方法名上?这样的问题也太奇怪了。当然,想想平时使用的controller,controller名称都是大写,而方法名都是小写,如下:
class TestController {
def invalidate() {
...
}
}
这次的问题主要是同事写代码的时候没有按照规范来写,不过既然能够正常运行,却不知tomcat中解压缩war包为何会出错。虽然还没找到原理,但也发现了问题并解决了问题,并以此提示自己,写代码还是要规规矩矩来,不要自己想当然。

相关文章

  • 关于controller的方法名

    前段时间遇到一个问题,自己的项目在IDEA中正常运行,但是打war包部署到tomcat中,tomcat竟然无法启动...

  • MVC 练气到华神 07

    课程视频 课程目标 表单查询 注意,如果一个Controller 已有一个方法名称 如:index 这个时候 他再...

  • 视图view

    controller中的控制器名字默认对应的是view下面的模板名字,比如index,而控制器中的方法名,对应的是...

  • ruby 方法的调用

    1、调用的方式 对象.方法名(参数1,参数2, ... ,参数n) 以对象开头,中间隔着句点,后面接着是方法名,方...

  • 方法重载(overload)

    方法重载:同一方法名,不同参数类型或不同参数个数。(大前提:同一类下) 好处:只需要记住唯一方法名,就可以实现类似...

  • Java常用注解

    Java常用注解 Controller常用注解 @Controller 注解在类上。定义了一个控制器类,并检测该方...

  • 静态方法和实例方法有何不同

    在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方...

  • 关于controller的瘦身计划

    偶然在objc.io中看过一篇关于controller瘦身的文章.之后又从唐大神的公众号那了解到了一些给VC减肥的...

  • JAVA实现CSV文件出力并压缩下载

    スーパーCSV 使い方 Controller > DTO > Util > POM>

  • ios--右侧视图DropDownMenuView

    导入第三方FFDropDownMenu #import "AppDelegate.h" //controller ...

网友评论

      本文标题:关于controller的方法名

      本文链接:https://www.haomeiwen.com/subject/bleaqqtx.html