Struts2配置问题终极解决方案
2016-05-18 16:54
357 查看
从下午忙到现在,终于找到问题的根源了。写下此文,与君共勉。
我的目录结构是这样的。
如果你的程序出现了这个异常的话,那么恭喜你。和我犯了一些样的错误。那就是配置文件web.xml中的filter写错了。我之前的web.xml是这样写的。
正如上面代码中我的注释一样,这个过滤器的名称一定一定要写正确。千万不能自己随意的编写。
这一点我反思了一下,还是在学Servlet的时候的基础没有打好吧。导致对这个知识点的理解不够到位,以至于出错了。希望大家引以为戒!
所以正确的方法应该是下面这样:
我一直认为,现阶段遇到的问题越多。对自己的编程越好,这样才会有收获!
具体信息,如下:
一开始没有怎么在意这个问题,但是后来在解决了配置文件出错之后,回过头来仔细的思考了一下。这个出错信息,其实也是给了我修复之前配置问题的一个线索的。咱们大致的翻译一下。
在命名空间为‘/’的目录下没有Action匹配。并且名称为login的action不能够和上下文路径为/MyStruts2匹配。
这就相当于是说了配置文件有问题了。所以遇到问题的时候还是要进行仔细的阅读的好!
这就是struts.xml出错的明显的代表。
关于这个核心文件,想必大家都很清楚和它相关的原则了吧。
struts.xml一定要放到src目录下。而且一定要把单词拼写正确咯。
struts.xml的内容出错。一定要按照dtd文件严格约束来写。否则很容易出现错误的。
下面我来提供一个我自己的亲测正确的struts.xml。
学习Struts2框架,遇到问题是在所难免的,当我们遇到问题的时候应该感到高兴,前期遇到的问题越多,对我们越有帮助。
文章未完,待我遇到更新的bug时,再来补充!
我的目录结构是这样的。
关于配置文件加载问题
控制台下面报错,提示错误信息如下:严重: Exception starting filter struts2 Unable to load configuration. - [unknown location] at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:428) at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepa reAndExecuteFilter.java:51) · · ·
如果你的程序出现了这个异常的话,那么恭喜你。和我犯了一些样的错误。那就是配置文件web.xml中的filter写错了。我之前的web.xml是这样写的。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>MyStruts2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <!--就错在这里,因为filter-name是Tomcat自动加载的要进行反射实例化Diapatcher的核心,所以名称一定要写正确--> <filter-name>MyStruts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>MyStruts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
正如上面代码中我的注释一样,这个过滤器的名称一定一定要写正确。千万不能自己随意的编写。
这一点我反思了一下,还是在学Servlet的时候的基础没有打好吧。导致对这个知识点的理解不够到位,以至于出错了。希望大家引以为戒!
所以正确的方法应该是下面这样:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>MyStruts2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
配置文件加载能引起什么问题呢?
一旦配置文件加载出错了。可能刚开始运行的时候不会出现什么异常。但是一旦触发了某一个事件。错误就肯定会出现的。比如说。幸运的我又遇到了一个严重的问题。我一直认为,现阶段遇到的问题越多。对自己的编程越好,这样才会有收获!
具体信息,如下:
There is no Action mapped for namespace[/] and action name[login] associated with context path[/MyStrusts2]
一开始没有怎么在意这个问题,但是后来在解决了配置文件出错之后,回过头来仔细的思考了一下。这个出错信息,其实也是给了我修复之前配置问题的一个线索的。咱们大致的翻译一下。
在命名空间为‘/’的目录下没有Action匹配。并且名称为login的action不能够和上下文路径为/MyStruts2匹配。
这就相当于是说了配置文件有问题了。所以遇到问题的时候还是要进行仔细的阅读的好!
struts.xml文件相关的异常
我们经常会遇到There is no Action mapped for namespace / and action name
这就是struts.xml出错的明显的代表。
关于这个核心文件,想必大家都很清楚和它相关的原则了吧。
struts.xml一定要放到src目录下。而且一定要把单词拼写正确咯。
struts.xml的内容出错。一定要按照dtd文件严格约束来写。否则很容易出现错误的。
下面我来提供一个我自己的亲测正确的struts.xml。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- struts2的action必须放在一个指定的包空间下定义 --> <package name="myaction" extends="struts-default"> <action name="loginin" class="myaction.LoginAction"> <!-- 定义处理结果字符串和资源之间的映射关系 --> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>
总结
经过了这次的bug修复事件,我明白了配置文件正确书写的正确性。其最重要的自己的基础还是有些欠缺的。没有从根本上把握住Tomcat与Java反射的工作的核心原理。所以才会想当然的自己写了个没用的文件了。请大家从我身上吸取这个教训,少走一些弯路。学习Struts2框架,遇到问题是在所难免的,当我们遇到问题的时候应该感到高兴,前期遇到的问题越多,对我们越有帮助。
文章未完,待我遇到更新的bug时,再来补充!
相关文章推荐
- java之判断输入的数是否是回文数
- Maven构建web项目在Eclipse中部署的几种方法
- spring多个定时任务
- java栈的实现
- java将源代码打成source.jar
- Spring核心技术(四)——Spring的依赖及其注入(续二)
- Spring核心技术IoC容器(四)
- JAVA中整型与字符型相互转换
- java链表
- java如何把String字符串中所有的空格和制表符(\t)替换成单个符号。
- Java注解
- 常用排序算法的java实现
- Java容器类浅析一-----容器类的类型
- Spring <context:annotation-config/> <context:component-scan/>与<mvc:annotation-driven />
- java &与&&的区别
- IDEA与Eclipse默认快捷键对比
- 全排序
- java对象参数测试源码
- JAVA_OPTS参数过小
- MyEclipse安装Freemarker插件