我是初学struts2.0,今天手动配置一个hello world的程序,不知道为什么已启动Tomcat6就报一个严重错误:严重: Exception starting filter struts2
file:/D:/Apache%20Software%20Foundation/Tomcat%206.0/webapps/strutsProj/WEB-INF/classes/struts.xml:1:34
        .....
Caused by: White space is required before the encoding pseudo attribute in the XML declaration. - file:/D:/Apache%20Software%20Foundation/Tomcat%206.0/webapps/strutsProj/WEB-INF/classes/struts.xml:1:34
... 34 more
Caused by: org.xml.sax.SAXParseException: White space is required before the encoding pseudo attribute in the XML declaration.
        ....
我的工程strutsProj放在Tomcat6.0的webapps下,目录结构如下:strutsProj 
   --> WEB-INF
       --> classes
           --> struts.xml
           --> hr/javaeye/test/LoginAction.class
       --> lib (struts2-core-2.0.6,ognl-2.6.11,freeer-2.3.8,xwork-2.0.1,commons-logging-1.0.4五个jar)
       --> web.xml
   --> index.jsp
   --> error.jsp
   --> welcome.jsp
web.xml配置
<?xml version="1.0" encoding="GBK"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>struts.xml配置
<?xml version="1.0"encoding="GBK"?><!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
<package name="strutsProj" extends="struts-default">
<action name="Login" class="hr.javaeye.test.LoginAction">
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
LoginAction代码:
package hr.javaeye.test;public class LoginAction {

private String username;
private String password;

public LoginAction(String username,String password){
this.username=username;
this.password=password;
}

public String getUsername(){
return this.username;
}

public void setUsername(String username){
this.username=username;
}

public String getPassword(){
return this.password;
}

public void setPassword(String password){
this.password=password;
}

public String execute() throws Exception{
if(getUsername().equals("single")&&getPassword().equals("111"))
return "success";
else return "error";
}
}
奇怪的事,我把struts.xml放在WEB-INF/classes的目录下,启动Tomcat就出现严重错误。如果把struts.xml放在WEB-INF目录下,则启动Tomcat不会出错,但是运行登陆界面的时候,提示没有找到action。不是说struts2.0的struts.xml要放在classes下面的吗,本人是初学者,请大伙指点,谢谢大家。 

解决方案 »

  1.   

    上面显示出了问题,工程目录的结构:
    我的工程strutsProj放在Tomcat6.0的webapps下,目录结构如下:strutsProj 
      --> WEB-INF
          --> classes
              --> struts.xml
              --> hr/javaeye/test/LoginAction.class
          --> lib (struts2-core-2.0.6,ognl-2.6.11,freeer-2.3.8,xwork-2.0.1,commons- logging-1.0.4五个jar)
          --> web.xml
      --> index.jsp
      --> error.jsp
      --> welcome.jsp
      

  2.   

    你看一下把STRUTS删除重新建可不可以,
      

  3.   

    你的意思是吧整个工程重新建立吗,我吧struts.xml的删除了,Tomcat就不会报错了,但是运行不了,因为找不到LoginAction,但是把struts.xml放在classes下面,马上Tomcat就出严重错误,是不是我的struts.xml写错了,实在是搞不清楚。
      

  4.   

    目没问题,看看那提示的信息,White space is required before the encoding pseudo attribute in the XML declaration.
    再看看你的struts.xml
    <?xml version="1.0" encoding="UTF-8"?> encoding前要有空格,你的没有,加上试试看
      

  5.   

    <?xml version="1.0"encoding="GBK"?>
    有问题。应该是
    <?xml version="1.0" encoding="GBK"?>
      

  6.   

    谢谢6楼,你太仔细了,确实少了空格。加上以后不再出错了,但是Tomcat6启动仍然有两个严重的问题:
      

  7.   

    哈哈  问题解决了,谢谢6,7楼,可以结贴了。错误一:  struts.xml文件格式错误,少了空格错误二:  LoginAction.java中自己写了一个构造器,呵呵,真是糊涂。FilterDispatcher应该不会是利用构造器给Action传递值的吧,呵呵。可以结贴了,谢谢大家,自己初学,耽误了大伙时间了。
      

  8.   

    糟糕了,还是有问题:运行的时候点击登录,报错:There is no Action mapped for namespace / and action name login. - [unknown location]
    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:497)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)
      

  9.   

    没来晚,我还是出错了,There is no Action mapped for namespace / and action name login. 网上找了半天也没解决问题。还是请大伙浪费点时间指点我一下。
      

  10.   

    哈哈,还有一个错误,终于找到了:错误三:  login.jsp中<form action="login.action"method="post"> 红字错了。
    因为控制器的名字叫LoginAction,因此红字的部分应该大些: Login.action