下面的struts配置文件有一个很隐蔽的错误
前面的数字是原文行号-
43-<action path="/customer/customer"
44- type="module.customer.action.CustomerAction"
45- parameter="method" name="customerForm">>
46-
47- <forward name="customerSearch"
48- path="/WEB-INF/jsp/customer/customerSearch.jsp" />
49-
50-</action>
最后抛出的解析错误如下:
09:38:36,890 ERROR [Digester] - <Parse Error at line 50 column 12: The content of element type "action" must match "(icon?,display-name?,description?,set-property*,exception*,forward*)".>
org.xml.sax.SAXParseException: The content of element type "action" must match "(icon?,display-name?,description?,set-property*,exception*,forward*)".
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:172)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:382)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2048)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:932)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.apache.commons.digester.Digester.parse(Digester.java:1572)
at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:738)
at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:687)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:333)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1105)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:932)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3951)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4225)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:608)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:535)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
这段错误提示很匪夷所思,错误的行号根本就不对,而且说的没有按照DTD文件的格式来写,很多开发人都没找到这个错误,而且struts可以正常运行,所以就说struts本身解析有问题
当我用XML解析格式化以后,一眼就看出了错误,格式化后的文件
43-<action path="/customer/customer"
44- type="com.company.project.module.customer.action.CustomerAction"
45- parameter="method" name="customerForm">
46- >
47-
48- <forward name="customerSearch"
49- path="/WEB-INF/jsp/customer/customerSearch.jsp" />
50-
51-</action>
怎么样,看到错误了吧。就是一位多了一个">"符号(46行),就抛出了这个错误。
分享到:
相关推荐
2. **模块化配置**:每个配置文件可以视为一个独立的模块,每个模块负责特定的功能区域。这样,团队可以分别处理不同的模块,减少冲突并提高开发效率。 3. **环境特定的配置**:你可以创建不同环境(如开发、测试、...
在`web.xml`文件中,可以通过`ActionServlet`的初始化参数`config`来指定一个或多个配置文件的位置。例如: ```xml <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action....
### Struts1多模块多配置文件的开发流程详解 #### 一、引言 在大型项目的开发过程中,为了更好地组织代码结构,提高系统的可维护性和扩展性,通常会采用多模块的设计模式。对于使用Struts1框架进行开发的项目而言,...
Struts2是一个流行的Java Web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。它简化了开发过程,提供了丰富的插件和强大的功能。以下是对`struts2配置`的详细解释: 首先,要配置Struts2框架,你需要...
7. **调试和测试**:在开发过程中,可以单独测试每个配置文件的功能,然后整合到主配置文件中,这样能减少因配置错误导致的问题。 黎活明老师的视频教程可能详细讲解了这些步骤,并提供了实际操作示例,帮助学习者...
Struts2是一个强大的MVC框架,它通过提供配置文件来管理应用程序的行为,使得开发者能够灵活地定义Action、拦截器和结果映射。本文将深入探讨Struts2的配置文件,特别是`struts.xml`文件中的关键元素和属性。 在...
- **Packages**:在`struts.xml`中,首先定义了一个或多个`package`元素,每个`package`都代表了一组相关的Action。这些`package`可以通过继承的方式扩展Struts2框架默认提供的功能,例如继承自`struts-default`。 ...
3. **struts.properties**:这是一个属性文件,通常位于项目的类路径根目录下,用于配置全局属性,比如常量定义、错误页面等。 4. **struts.xml**:这是用户自定义的主配置文件,用于定义Action、结果类型、拦截器...
Struts2是一个强大的MVC(模型-视图-控制器)框架,用于构建Java Web应用程序。在Struts2中,配置文件起着至关重要的作用,它们定义了应用的行为、请求的映射、数据验证规则以及与数据库的交互。下面将详细讨论...
Struts2的配置通常存储在一个名为`struts.xml`的XML文件中。这个文件遵循特定的DTD(文档类型定义),如`struts-2.0.dtd`,确保其结构的正确性。 2. **常量配置**: `<constant>`元素用于定义配置文件中的全局...
**web.xml** 是一个Web应用程序的标准配置文件,用于描述整个Web应用的基本信息。它包含了Servlet容器启动和配置Web应用所需的所有信息。 ##### 1. Web 应用发布描述文件 - **功能**: 在开发者、发布者与组装者之间...
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
在整合Struts和Spring的过程中,还需要一个名为`struts-spring-plugin.xml`的文件,这是Struts与Spring集成的关键。这个配置文件用于告诉Struts如何使用Spring管理Action,通常通过`<struts:action>`标签指定Action...
Struts2是一个流行的Java Web框架,它用于构建MVC(模型-视图-控制器)架构的应用程序。在Struts2中,`struts.xml`文件是核心配置文件,它定义了动作、结果、拦截器等关键组件。在默认情况下,`struts.xml`通常位于`...
通过上述分析可以看出,`struts-config.xml`文件是Struts框架的核心配置文件之一,包含了诸如`<controller>`、`<data-sources>`、`<form-beans>`以及`<global-exceptions>`等多个关键配置项。合理配置这些元素能够...
struts配置文件,用于创建springmvc与struts工程的配置文件,集合加数组获得后台的空间空间空间 空间 空间空了
如果希望一个Action处理多个请求,可以在同一个`<action>`元素内添加多个`<result>`子元素,每个`<result>`对应一个不同的请求。例如: ```xml <action name="myAction" class="com.example.MyAction"> ...
Struts2支持多个配置文件,可以通过`<include>`标签来导入其他配置文件,这样可以使配置更加模块化,方便管理和维护。 **Action的调用方式**: Struts2支持基于注解的Action配置,可以直接在Action方法上使用注解...