Struts2配置问题终极解决方案
从下午忙到现在,终于找到问题的根源了。写下此文,与君共勉。
我的目录结构是这样的。
关于配置文件加载问题
控制台下面报错,提示错误信息如下:
严重: 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时,再来补充!
Struts2配置问题终极解决方案的更多相关文章
- Eclipse不自动编译java文件的终极解决方案
最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般 ...
- 【转】JSP中文乱码问题终极解决方案
原文地址:http://blog.csdn.net/beijiguangyong/article/details/7414247 在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的 ...
- Xcode-调试断点不能停在代码区终极解决方案
转发 调试断点不能停在代码区终极解决方案: http://mobile.51cto.com/iphone-390082.htm
- VIM、GVIM在WINDOWS下中文乱码的终极解决方案
文章转自:http://www.liuhuadong.com/archives/68 vim.gvim在windows下中文乱码的终极解决方案在windows下vim的中文字体显示并不好,所以我们需要 ...
- Android大图片裁剪终极解决方案(上:原理分析)
转载声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-) http://my.oschina.net/ryanhoo/blog/86842 约几个月前,我正 ...
- 【原创】CHROME 最小字体限制为12PX的终极解决方案
CHROME 最小字体限制为12PX的终极解决方案 本文由五月雨恋提供,转载请注明出处. 相信不少做网站的用户会有这样一个问题,Chrome 默认最小字体是12px(最新版英文也有此问题),这个是 C ...
- 绝对好文C#调用C++DLL传递结构体数组的终极解决方案
C#调用C++DLL传递结构体数组的终极解决方案 时间 2013-09-17 18:40:56 CSDN博客相似文章 (0) 原文 http://blog.csdn.net/xxdddail/art ...
- Cygwin 各种情况下中文乱码--终极解决方案
0.引言 本人从进公司以来一直负责公司Android平台下产品的NDK开发,用的工具: 01. Google的adt-bundle(集成了eclipse和sdk) 02. NDK 03. Cygwin ...
- svn 集成 redmine 账户验证的终极解决方案
svn 集成 redmine 账户验证的终极解决方案 赖勇浩(http://laiyonghao.com) 动机 对于大部分开发团队来说,一般都需要一套 SCM 系统,通常是 svn + redmin ...
随机推荐
- Luogu1613 跑路
题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的空间跑路器,每秒钟 ...
- bzoj3930[CQOI2015]选数 容斥原理
3930: [CQOI2015]选数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1383 Solved: 669[Submit][Status] ...
- xx学院学员评优评奖管理系统
[勤拂拭软件,软件开发,毕业设计,程序作业,论文写作指导:q-[1215714557] 加好友请注明:勤拂拭)] 之前帮助一个军校学生做的一个评优评奖管理系统,该系统主要用于学校学生评优评先使用. ...
- Python paramik
本节内容 paramiko模块 1.paramiko模块 Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 Python的paramiko模块,该模块机遇SSH用于 ...
- OpenCV环境搭建(一)
此环境搭建是OpenCV的python(一下简称py)开发环境搭建,建立在py3的环境和语法上实现的. windows系统搭建 系统环境:windows 10 + python 3.6 + OpenC ...
- jquery easyui datagrid 排序列
点击排序列,将获取参数有:page=1&rows=10&sort=UserName&order=desc c#后台获取sort跟order参数 string sortColum ...
- html下载excel模板
只需要href等于模板存放的路径即可 <a href="../../TempLate/Attitude.xlsx" class="easyui-linkbutton ...
- 基于PHP的快递查询免费开放平台案例-快宝开放平台
快递查询是快递业务中极其重要的业务,免费的快递查询开放平台:快宝开放平台. 快宝开放平台:http://open.kuaidihelp.com/home,已经对接100多家快递公司,实现快递物流信息实 ...
- MYSQL 表左连接 ON AND 和ON WHERE 的区别
首先是针对左右连接,这里与inner join区分 在使用left join时,on and 和on where会有区别 1. on的条件是在连接生成临时表时使用的条件,以左表为基准 ,不管on中的条 ...
- The specified JRE installation does not exist异常的原因和解决办法
今天,回首为了学习新框架,于是将JDK的版本从1.7开发标配版换成了1.8,一切前期很顺利,完成了新框架的测试和体验,但在运行原有项目的时候问题出现了,爆出了The specified JRE ins ...