从下午忙到现在,终于找到问题的根源了。写下此文,与君共勉。

我的目录结构是这样的。


关于配置文件加载问题

控制台下面报错,提示错误信息如下:

严重: 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配置问题终极解决方案的更多相关文章

  1. Eclipse不自动编译java文件的终极解决方案

    最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般 ...

  2. 【转】JSP中文乱码问题终极解决方案

    原文地址:http://blog.csdn.net/beijiguangyong/article/details/7414247 在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的 ...

  3. Xcode-调试断点不能停在代码区终极解决方案

    转发 调试断点不能停在代码区终极解决方案:  http://mobile.51cto.com/iphone-390082.htm

  4. VIM、GVIM在WINDOWS下中文乱码的终极解决方案

    文章转自:http://www.liuhuadong.com/archives/68 vim.gvim在windows下中文乱码的终极解决方案在windows下vim的中文字体显示并不好,所以我们需要 ...

  5. Android大图片裁剪终极解决方案(上:原理分析)

    转载声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-)  http://my.oschina.net/ryanhoo/blog/86842 约几个月前,我正 ...

  6. 【原创】CHROME 最小字体限制为12PX的终极解决方案

    CHROME 最小字体限制为12PX的终极解决方案 本文由五月雨恋提供,转载请注明出处. 相信不少做网站的用户会有这样一个问题,Chrome 默认最小字体是12px(最新版英文也有此问题),这个是 C ...

  7. 绝对好文C#调用C++DLL传递结构体数组的终极解决方案

    C#调用C++DLL传递结构体数组的终极解决方案 时间 2013-09-17 18:40:56 CSDN博客相似文章 (0) 原文  http://blog.csdn.net/xxdddail/art ...

  8. Cygwin 各种情况下中文乱码--终极解决方案

    0.引言 本人从进公司以来一直负责公司Android平台下产品的NDK开发,用的工具: 01. Google的adt-bundle(集成了eclipse和sdk) 02. NDK 03. Cygwin ...

  9. svn 集成 redmine 账户验证的终极解决方案

    svn 集成 redmine 账户验证的终极解决方案 赖勇浩(http://laiyonghao.com) 动机 对于大部分开发团队来说,一般都需要一套 SCM 系统,通常是 svn + redmin ...

随机推荐

  1. hdu 5122(2014北京—dp)

    题意: 从n个数中任选一些数,问有多少种选法使他们异或和不小于M 思路: dp[i][j]表示选i个数异或和为j,则方程dp[i][j] = dp[i-1][j](不选i)+ dp[i-1][j^a[ ...

  2. [UOJ UNR#2 UOJ拯救计划]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 感觉这题有点神... 模数是6比较奇怪,考虑计算答案的式子. Ans=$\sum_{i=1}^{k} P(k,i)*ans(i)$ a ...

  3. SpringCloud学习之SpringCloudStream&集成kafka

    一.关于Spring-Cloud-Stream Spring Cloud Stream本质上就是整合了Spring Boot和Spring Integration,实现了一套轻量级的消息驱动的微服务框 ...

  4. 运行C++程序是出现错误:cannot open Debug/1.exe for writing

    今天,打开VC6.0环境编了个小程序,谁知给我报了“cannot open Debug/1.exe for writing”这样一个错,然后,我就纳闷了,这是什么错丫? 想了半天,后想通,为什么会这样 ...

  5. C语言程序设计第六次作业——循环结构(2)

    C语言程序设计第六次作业--循环结构(2) 之前的博客园图片没处理好,对大家说一声抱歉.希望大家能够多多指出我的错误,我来认真修改 ^ - ^ !. (1)改错题 序列求和:输入一个正实数eps,计算 ...

  6. 浅析JS异步执行机制

    前言 JS异步执行机制具有非常重要的地位,尤其体现在回调函数和事件等方面.本文将针对JS异步执行机制进行一个简单的分析. 从一份代码讲起 下面是两个经典的JS定时执行函数,这两个函数的区别相信对JS有 ...

  7. ACM Wooden Stricks

    有一堆n根木棍.每根棍子的长度和重量是预先知道的. 这些棒子将被木工机器逐一加工..它需要一些时间,称为安装时间,用于机器准备加工棒.设置时间与机器中的清洁操作和更换工具和形状相关联.木工机械的安装时 ...

  8. Dynamics CRM2016 The value of field on record of type entity is outside the valid range问题的解决方法

    今天在用web api创建一条记录时报了个标题里的错,咋看这错说的很明白了,属性字段的值超范围了,但咱们看下具体的问题 请求url是这样的http://xx/api/data/v8.0/new_rec ...

  9. Latex:入门教程

    http://blog.csdn.net/pipisorry/article/details/54571521 总的来说,LaTex是一套排版系统,与word那种所见即所得对排版方式不太,用LaTex ...

  10. Bootstrap3 表格-基本表格

    为任意 <table> 标签添加 .table 类可以为其赋予基本的样式 - 少量的内补(padding)和水平方向的分隔线.这种方式看起来很多余!?但是我们觉得,表格元素使用的很广泛,如 ...