情景:

项目使用了struts2框架,部署到tomcat中,而tomcat所在机器没有联网(处于公司安全方面的原因),所以启动tomcat时,报错:

tomcat Unable to load configuration. - Class: Java.net.SocketInputStream

因为struts配置文件如下:

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation/DTD Struts Configuration 2.1.7//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">

如上所示,它会 去http://struts.apache.org/dtds/struts-2.3.dtd下载dtd文件,但是没有联网,所以就报上述错误(标红的)了。

为了解决这个问题,就使用了本地的dtd文件,范例:

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation/DTD Struts Configuration 2.1.7//EN"
  4. "./com/tdr/mbs/endpoint/dtd/struts-2.3.dtd">

后来项目部署到其他tomcat时,报错:

Caused by: no protocol dtd - Class: java.net.URL

详细报错信息:

Java代码  
  1. Unable to load configuration. - Class: java.net.URL
  2. File: URL.java
  3. Method: <init>
  4. Line: 567 - java/net/URL.java:567:-1
  5. at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:69)
  6. at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)
  7. at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:437)
  8. at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
  9. at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51)
  10. at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
  11. at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
  12. at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
  13. at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3838)
  14. at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488)
  15. at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
  16. at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
  17. at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
  18. at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
  19. at org.apache.catalina.core.StandardService.start(StandardService.java:516)
  20. at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
  21. at org.apache.catalina.startup.Catalina.start(Catalina.java:593)
  22. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  23. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  24. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  25. at java.lang.reflect.Method.invoke(Method.java:597)
  26. at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
  27. at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
  28. Caused by: Unable to load file:/D:/个人资料/eclipse/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/endpoint/WEB-INF/classes/struts.xml - Class: java.net.URL
  29. File: URL.java
  30. Method: <init>
  31. Line: 567 - java/net/URL.java:567:-1
  32. at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:954)
  33. at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:163)
  34. at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:130)
  35. at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:209)
  36. at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
  37. ... 22 more
  38. Caused by: no protocol: ./com/a//endpoint/dtd/struts-2.3.dtd - Class: java.net.URL
  39. File: URL.java
  40. Method: <init>
  41. Line: 567 - java/net/URL.java:567:-1
  42. at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115)
  43. at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:949)
  44. ... 26 more
  45. Caused by: java.net.MalformedURLException: no protocol: ./com/a//endpoint/dtd/struts-2.3.dtd
  46. at java.net.URL.<init>(URL.java:567)
  47. at java.net.URL.<init>(URL.java:464)
  48. at java.net.URL.<init>(URL.java:413)
  49. at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
  50. at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
  51. at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
  52. at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
  53. at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
  54. at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
  55. at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
  56. at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
  57. at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
  58. at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
  59. at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
  60. at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:113)
  61. ... 27 more

上网查了半天,发现这是tomcat的一个bug。

出现的场景:

<!--[if !supportLists]-->(1)   <!--[endif]-->tomcat 的安装目录中有中文字符;

struts.xml中没有使用网络上的dtd文件,而是使用的本地的dtd文件

问题原因:tomcat 安装目录中有中文字符。

解决方法:把tomcat的安装目录拷贝到无中文字符的路径中。

后记:后来我使用eclipse运行项目,也报相同的错误,因为我eclipse的工作空间(workspace)是:

D:\个人资料\eclipse\workspace

我的eclipse的工作空间的路径中包含中文字符。

报错信息:

Caused by: Unable to load file:/D:/个人资料/eclipse/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/endpoint/WEB-INF/classes/struts.xml - Class: java.net.URL

File: URL.java

Method: <init>

Line: 567 - java/net/URL.java:567:-1

也就是说eclipse把项目部署到了 D:/个人资料/eclipse/workspace/.metadata/ 中

解决方法:修改eclipse的工作区间(没办法了,一定要保证项目部署的路径中没有中文字符

struts Caused by: no protocol dtd - Class: java.net.URL相关推荐

  1. c++ java通信 protocol buffer,google protocol buffer (C++,Java序列化应用实例)

    google protocol buffer (C++,Java序列化使用实例) 转载,请注明出处: http://blog.csdn.net/eclipser1987/article/details ...

  2. 是时候该了解一波Protocol Buffers了[Java]

    前言 Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 它不依赖于语言和平台并且可扩展性极强.现阶段官方 ...

  3. Axis1.4漏洞,Caused by: org.apache.axis.AxisFault: java.util.ConcurrentModificationException

    Axis1.4漏洞,Caused by: org.apache.axis.AxisFault: java.util.ConcurrentModificationException 问题 原因 解决方案 ...

  4. at java.net.url init,java.net 基本测试

    java.net 基本测试 包 java.net java.net.ssl 类java.net.URL 测试类package com.mozq.boot.kuayu01.demo; import ja ...

  5. 对Java的URL类支持的协议进行扩展的方法

    转载自   对Java的URL类支持的协议进行扩展的方法 JAVA默认提供了对file,ftp,gopher,http,https,jar,mailto,netdoc协议的支持.当我们要利用这些协议来 ...

  6. Java读取URL到字符串

    In my current project, I had a requirement to read the WSDL file from the URL and store it into the ...

  7. java URL java.net.URL类的使用 详细介绍 URL转义 解决URL中文字符

    类 URL 代表一个统一资源定位符,它是指向互联网"资源"的指针.资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,也就是我们常说的域名.浏览器访问地址. 在Java中就 ...

  8. 通过java.net.URL类抓取某个网页的内容 选择自 cqq 的 Blog

    /**  文件名 : OpenUrl.java  描述 :通过 java.net.URL 类访问一个页面,并且返回结果 **/ import java.net.*; import java.io.*; ...

  9. java通过url读取远程数据并保持到本地

    前几天老姐突然告诉我,她在JD上买了本电子图书,然后买完发现,只能在线或者使用它自己的阅读器看,很不方便,让我给想想办法. 然后我就开始琢磨,最开始,我直接使用Acrobat Reader打开,发现只 ...

最新文章

  1. pandas Timestamp的用法
  2. android 学习笔记(八)building system8.5 shell脚本的学习
  3. window系统查看端口被哪个进程占用了,并将它结束
  4. 数据结构-单向循环链表、双向循环链表、仿真链表
  5. 求助关于系统日志的解决方案
  6. 关于空间坐标转化的若干论文
  7. 598. 范围求和 II
  8. matlab中直到循环语句,Matlab再次执行循环,直到第一条语句结束
  9. c语言用栈实现计算器加法运算,请问,用c语言做一个计算器 包括+-*/()的运算 用栈 该怎么做...
  10. android 连续调用方法是,android – SwitchPreferences多次调用onPreferenceChange()方法
  11. 速领,阿里巴巴Java开发手册终极版
  12. spring源码之@dependsOn
  13. 通信算法之三十:Turbo仿真链路开发基于《低压电力线宽带载波通信互联互通技术规范第4—1部分物理层通信协议》
  14. 利用Python下载网页视频
  15. Win10 文件夹删不掉,提示需要来自XXX的权限才能对此文件夹进行更改
  16. Synthesys:语音合成和视频生成平台
  17. 最完整的磁性材料行业现状及发展前景分析,长文预警
  18. ‘在路上’问卷调查结果与分析
  19. Android自动更新时间去除WIFI无法连接互联网提示
  20. 探索 Java 中的 Date, Calendar, TimeZone 和Timestamp

热门文章

  1. 通用的类-可直接存储的Dictionary,可以被JSON或NSUserDefaults
  2. SQLite 3.7.13的加密解密(二)—— 开放宏定义
  3. 关于创建 LINQ to SQL 类时无法转换复数的问题(zhuan)
  4. VisualStudio异常处理 —— LNK1112 模块计算机类型“x64”与目标计算机类型“X86”冲突
  5. Netty工作笔记0077---handler链调用机制实例4
  6. VS 2005 VS2008 VS2010 设置断点,在调试时产生断点错位如何解决
  7. 杭电2159FATE
  8. mysql mysqldump触发器备份_MySQL常用的备份工具之mysqldump
  9. 前端把信息放在弹框里显示出来_jsp + js + 前端弹出框
  10. zookeeper版本更新_zookeeper介绍及运维实践