关于使用Intellij IDEA 创建Struts2程序出现
Caused by: org
.apache.openejb.OpenEJBException: Unable to load servlet filter class: org
.apache.struts2
.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter: org
.apache.struts2
.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
at org
.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans
.deploy(AnnotationDeployer
.java:
2331)
at org
.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans
.deploy(AnnotationDeployer
.java:
2022)
at org
.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer
.java:
383)
at org
.apache.openejb.config.ConfigurationFactory$Chain
.deploy(ConfigurationFactory
.java:
420)
at org
.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory
.java:
1037)
at org
.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder
.java:
1276)
at org
.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder
.java:
1124)
at org
.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport
.java:
133)
at org
.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase
.java:
94)
at org
.apache.catalina.core.StandardContext.startInternal(StandardContext
.java:
5087)
at org
.apache.catalina.util.LifecycleBase.start(LifecycleBase
.java:
150)
at org
.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:
724)
at org
.apache.catalina.core.ContainerBase.addChild(ContainerBase
.java:
700)
at org
.apache.catalina.core.StandardHost.addChild(StandardHost
.java:
734)
at org
.apache.tomee.catalina.TomcatWebAppBuilder.deployWar(TomcatWebAppBuilder
.java:
651)
at org
.apache.tomee.catalina.TomcatWebAppBuilder.deployWebApps(TomcatWebAppBuilder
.java:
591)
at org
.apache.tomee.catalina.deployment.TomcatWebappDeployer.deploy(TomcatWebappDeployer
.java:
47)
...
52 more
Caused by: java
.lang.ClassNotFoundException: org
.apache.struts2
.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
at org
.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader
.java:
186)
at org
.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader
.java:
83)
at org
.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans
.deploy(AnnotationDeployer
.java:
2328)
...
68 more
错误的解决办法;
错误提示找不到 不能加载 Filter class,但是jar包都是intellij idea自动下载的,按Ctrl点击StrutsPrepareAndExecuteFilter又可以找到StrutsPrepareAndExecuteFilter类。 于是检查一下文件目录结构 发现lib文件夹在工程目录下面,尝试将其拖到web下的WEB-INF下, 然后选中所有的jar文件右键Add as Library… 至此还有个小问题就是Struts.xml文件中的struts-default会报红, 找到file->priogect Settings->facets 在File Sets下重新编辑一下Default File Set 中的Struts-default.xml文件的路径便可。 重启服务器,问题解决; WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。 如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。 /WEB-INF/web.xml : Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。 /WEB-INF/classes/ : 包含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中。 /WEB-INF/lib/ : 存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件。 页面放在WEB-INF目录下面,这样可以限制访问,提高安全性.如JSP,html
web所以web应用的jar文件应该放在WEB-INF文件夹下,否则会访问不到。
至于intellij idea为什么把lib文件夹放到工程的根目录下,我也不知道为啥。