关于使用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:)
at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:)
at org.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer.java:)
at org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:)
at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:)
at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:)
at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:)
at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:)
at org.apache.tomee.catalina.TomcatWebAppBuilder.deployWar(TomcatWebAppBuilder.java:)
at org.apache.tomee.catalina.TomcatWebAppBuilder.deployWebApps(TomcatWebAppBuilder.java:)
at org.apache.tomee.catalina.deployment.TomcatWebappDeployer.deploy(TomcatWebappDeployer.java:)
... more
Caused by: java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
at org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:)
at org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:)
at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:)
... 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文件夹放到工程的根目录下,我也不知道为啥。