发现问题了: web.xml的doctype定义应该是不对的,因为Web Application 2.2代表着只支持servlet2.2(我猜想),而filter是servlet2.3的特性,所以我果断更改了dtd,Web Application 版本改为2.3,现在是:
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">再查看http://java.sun.com/dtd/web-app_2_3.dtd,果然发现filter定义其中,但是新的问题出来了:2004-4-6 16:01:40 org.apache.commons.digester.Digester error
严重: Parse Error at line 126 column 11: The content of element type "web-app" must match "(icon?,di
splay-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,se
rvlet-mapping*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref
*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*
)".
org.xml.sax.SAXParseException: The content of element type "web-app" must match "(icon?,display-name
?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapp
ing*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource
-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)".
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
这种情况我也遇到过,肯定是web.xml中某些标签没有正确结束或书写,但是查遍了,却没找到漏洞,气愤中,请大家帮忙找找看:
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">再查看http://java.sun.com/dtd/web-app_2_3.dtd,果然发现filter定义其中,但是新的问题出来了:2004-4-6 16:01:40 org.apache.commons.digester.Digester error
严重: Parse Error at line 126 column 11: The content of element type "web-app" must match "(icon?,di
splay-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,se
rvlet-mapping*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref
*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*
)".
org.xml.sax.SAXParseException: The content of element type "web-app" must match "(icon?,display-name
?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapp
ing*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource
-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)".
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
这种情况我也遇到过,肯定是web.xml中某些标签没有正确结束或书写,但是查遍了,却没找到漏洞,气愤中,请大家帮忙找找看:
解决方案 »
- 想实现自己的网络游戏包括服务端、数据库..希望大家指点下
- struts图片上传报错
- 用Inet接受数据,总是数据接收不全只接受8,9k而源文件用700k这是怎么回事呢?
- struts2编写的XXAction无法继承Action接口
- Struts2的OGNL访问问题
- Hibernate中多对多的问题
- 关于document.getElementById()的问题
- 散分,给华为慧通工作机会,求简历
- 请问我把easystruts的插件考到eclips的plugins目录启动eclips怎么没有easystruts的选项啊?急。。。
- hibernate查询不出结果,sql已打印,请指教.
- Help!散分! 公司让用java搞一个局域网内的管理、监测软件...
- 为什么我的serversocket监听程序只能得到一个连接?
1、dtd引用错,应该使用http://java.sun.com/dtd/web-app_2_3.dtd
2、因为使用了一个标签: <display-name>Struts JLL Application</display-name>
结果导致标签匹配出错,把filter段移动到该标签相邻的下方,即不报错,否则无论移到哪里,都报错,原因未知。出错web.xml如下(省去了部分):
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd"><web-app> <display-name>Struts JLL Application</display-name> <!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib> <filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.zhiss.JLLPro.common.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param> <init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param> </filter> <filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name>
<!-- <url-pattern>*.do</url-pattern> -->
</filter-mapping></web-app>
Filter 确实是是到 2.3 才有的东东:)
你可以参照dtd中的声明
<!ELEMENT web-app (icon?, display-name?, description?, distributable?,
context-param*, filter*, filter-mapping*, listener*, servlet*,
servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?,
error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*,
login-config?, security-role*, env-entry*, ejb-ref*, ejb-local-ref*)>也就是说如果你的web.xml如果出现filter的话应改是在context-param(如果有的话)和listener(如果有的话)之间的你把filter的配置的位置调整一下就应改可以了
====================================
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd"><web-app> <display-name>Struts JLL Application</display-name> <filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.zhiss.JLLPro.common.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param> <init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param> </filter> <filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name>
<!-- <url-pattern>*.do</url-pattern> -->
</filter-mapping>
<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
</web-app>
<display-name>Struts JLL Application</display-name>
就非得把filter部分放在它下面才行呢,唉,不明所以啊
我也试试,谢谢TO sagittarius1979(射手爱狮子):
这个也会有顺序吗? 我找找先,呵呵