如题,今天项目运行报错
...NoSuchBeanDefinitionException: No bean named 'shiroFilter'
异常交代的很清楚,web容器没有找到相应的bean。那么,查询后会从两个方面入手:
相应的xml配置文件有问题?
指定的bean没有发现?
然后逐一排查,和同事确认后排出第一个问题,因为同样的代码他的OK运行良好。重点就放到第二项问题了,顺着xml配置查找相应的类文件,都找到了。这下问题就头大了,配置好+文件都在,就是启动不了,难道是需要更换web容器(有同事这时候提到自己更换到tomcat7后解决过这种问题),在我更换的前一步,我在尝试了一次。
终 于
被我尝试成功,修改了java文件编译后的class文件存放目录classes。调整之前的目录配置在了和WEB-INF同级,调整为“../WEB-INF/classes”世界从此回复秩序,稳定运转中。O(∩_∩)O哈哈~
扩展阅读
为什么classes目录要放在WEB-INF目录下呢?
答:这里必须了解servlet的约定。拿题目中的问题来说,使用的是tomcat容器,它加载class文件的顺序是哪样的呢。
如果要用到某个类,则Web应用程序会到/WEB-INF/classes中试着载入类,若无,再试着从/WEB-INF/lib的JAR文件中寻找类文件(若还没有找到,则会到容器实现本身存放类或JAR的目录中寻找,但位置视实现厂商而有所不同,以Tomcat而言,搜寻的路径是Tomcat安装目录下的lib目录)。
所以,大家都知道为什么了吧。我们将classes目录和WEB-INF目录同级的时候,web容器根本找不到的。