<?xml version="1.0" encoding="UTF-8"?>
<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">
   <display-name>Struts 2.0 test xp1204</display-name>
    <filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.zoyechina.consumption.tool.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param></filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
    <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> -->
  <filter-mapping>      
  <filter-name>struts2</filter-name>      
  <url-pattern>*.ph</url-pattern>      
</filter-mapping>      
  
<filter-mapping>      
  <filter-name>struts2</filter-name>      
  <url-pattern>*.jsp</url-pattern>      
</filter-mapping>
   <servlet>
        <servlet-name>dwr</servlet-name>
        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dwr</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
</web-app>

解决方案 »

  1.   

    过滤器:
    package com.zoyechina.consumption.tool;import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;/**
     * 转换字符乱码
     * @author cyc 
     * @version 创建时间:Jan 26, 2010 4:33:41 PM
     */
    public class CharacterEncodingFilter implements Filter { private String encoding; private boolean ignore = true; private FilterConfig filterconfig = null; public void destroy() {
    this.encoding = null;
    this.filterconfig = null;
    // TODO Auto-generated method stub
    } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    if (ignore || (request.getCharacterEncoding() == null)) {
    String encoding = getEncoding();
    if (encoding != null) {
    request.setCharacterEncoding(encoding);
    }
    }
    response.setContentType("text ml;charset=" + encoding);
    chain.doFilter(request, response);
    } private String getEncoding() {
    return this.encoding;
    } public void init(FilterConfig filterconfig) throws ServletException {
    this.filterconfig = filterconfig;
    this.encoding = filterconfig.getInitParameter("encoding");
    String value = filterconfig.getInitParameter("ignore");
    if (value == null) {
    this.ignore = true;
    } else if (value.equalsIgnoreCase("true")) {
    this.ignore = true;
    }
    }}
      

  2.   

    我加上配置文件中红色字体部分后,无法登陆:
    HTTP Status 404 - /consumption/login.action--------------------------------------------------------------------------------type Status reportmessage /consumption/login.actiondescription The requested resource (/consumption/login.action) is not available.去掉那部分后一切正常。乱码问题困扰了半天,希望大家帮帮忙。
      

  3.   

    <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>
    struts2只需要在web.xml里面配置这个就行了
    包记得导入
      

  4.   

    response.setContentType("text ml;charset=" + encoding); 
    不知道这里是拷错了还是原本就是这样子写的。。text/html?忘了
      

  5.   

    </filter> 
    <filter-mapping> 
    <filter-name>encodingFilter </filter-name> 
    <url-pattern>/* </url-pattern> 
    </filter-mapping> 
    把这个放在 
    <filter-mapping>      
      <filter-name>struts2 </filter-name>      
      <url-pattern>*.ph </url-pattern>      
    </filter-mapping>
    的上面 
      

  6.   

    按照你的建议改了一下,可以登录了。登录后页面有异常,控制台输出如下:
    严重: Servlet.service() for servlet jsp threw exception
    java.io.IOException: tmpFile.renameTo(classFile) failed
    at org.apache.jasper.compiler.SmapUtil$SDEInstaller.install(SmapUtil.java:246)
    at org.apache.jasper.compiler.SmapUtil.installSmap(SmapUtil.java:165)
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:454)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)现在的web.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <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">
       <display-name>Struts 2.0 test xp1204</display-name>
        <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>com.zoyechina.consumption.tool.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
    </init-param>
    <init-param>
    <param-name>ignore</param-name>
    <param-value>true</param-value>
    </init-param></filter>
        <filter>
            <filter-name>struts2</filter-name>       
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>
        <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/* </url-pattern>
    </filter-mapping>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
       <servlet>
            <servlet-name>dwr</servlet-name>
            <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
            <init-param>
                <param-name>debug</param-name>
                <param-value>true</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>dwr</servlet-name>
            <url-pattern>/dwr/*</url-pattern>
        </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      
    </web-app>
      

  7.   

    tmpFile是什么? LZ可否先尝试把多余的FILTER都去掉 只用一个STRUTS2来看看捏?
      

  8.   

    在配置文件中把红色字体部分去掉没有问题的。现在登录后又报另外一个错误:样式表中没有包含文档元素,样式表可能是空的,或它可能不是一个标准的xml文档。配置文件如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <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">
       <display-name>Struts 2.0 test xp1204</display-name>
       <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>com.zoyechina.consumption.tool.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
    </init-param>
    <init-param>
    <param-name>ignore</param-name>
    <param-value>true</param-value>
    </init-param></filter>

        <filter>
            <filter-name>struts2</filter-name>       
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>
      <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/* </url-pattern>
      </filter-mapping>

       <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
       <servlet>
            <servlet-name>dwr</servlet-name>
            <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
            <init-param>
                <param-name>debug</param-name>
                <param-value>true</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>dwr</servlet-name>
            <url-pattern>/dwr/*</url-pattern>
        </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      
    </web-app>我去掉红色部分一切正常
      

  9.   

    你的过滤器里进行了什么操作? 你确认是因为该过滤器导致了这些原因么? 不是因为下面那些Servlet的配置?
    LZ先确认是否是因为你的encodingFilter出问题 先把STRUTS2去掉 看看还好使不(启动是否有错误信息?)
    如果有错误信息的话 那就说明你这个过滤器可能有问题 如果没有的话 那就能说明他们两个可能冲突 
      

  10.   

    过滤器的代码我贴在二楼了。去掉STRUTS2后所有的功能无法使用。我不确定是什么东西导致这些原因,所以才来请教。
      

  11.   

    我的意思是 先把STRUTS2去掉 然后看启动的时候有没有异常信息 如果有的话 那就把目标锁定到你编码过滤器上对了 我记得struts2能设置字符集的啊..
      

  12.   

    碰到过同样的问题解决了:
    web.xml<?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
             xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener> 
       <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>
                   net.test.interceptor.SetCharacterEncodingFilter
            </filter-class>
        </filter>
        
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>*.action</url-pattern>
        </filter-mapping>
        
        
        <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>/test/*</url-pattern>
        </filter-mapping>
    <filter-mapping>  
        <filter-name>struts2</filter-name>   
        <url-pattern>*.jsp</url-pattern>   
    </filter-mapping> 
        
    </web-app>SetCharacterEncodingFilter.javapublic class SetCharacterEncodingFilter implements Filter {
     private FilterConfig filterConfig;
        //Handle the passed-in FilterConfig
        public void init(FilterConfig filterConfig) throws ServletException {
            this.filterConfig = filterConfig;
        }     //Process the request/response pair
        public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain filterChain) {
            try {
                //request.setCharacterEncoding("GBK");
                //response.setCharacterEncoding("GBK");
                request.setCharacterEncoding("utf-8");
                response.setCharacterEncoding("utf-8");
                filterChain.doFilter(request, response);
            } catch (ServletException sx) {
                filterConfig.getServletContext().log(sx.getMessage());
            } catch (IOException iox) {
                filterConfig.getServletContext().log(iox.getMessage());
            }
        }     //Clean up resources
        public void destroy() {
        }
    }tomcat目录的conf/server.xml把<Connector port="8080" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443"  />
    改成<Connector port="8080" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" 
                   URIEncoding="UTF-8" />
      

  13.   

     改了<url-pattern>*.action</url-pattern>这个启动报错,我换成<url-pattern>/*</url-pattern>了,还是一样的错。下面的把东西全贴出来,大家帮忙看一下
      

  14.   

    web.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <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">
       <display-name>Struts 2.0 test xp1204</display-name>
      <!-- <filter>
       <filter-name>encodingFilter</filter-name>
       <filter-class>com.zoyechina.consumption.tool.CharacterEncodingFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
       -->
      <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>
       <servlet>
            <servlet-name>dwr</servlet-name>
            <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
            <init-param>
                <param-name>debug</param-name>
                <param-value>true</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>dwr</servlet-name>
            <url-pattern>/dwr/*</url-pattern>
        </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>注释部分加上的话,登录后页面报错,去掉一切正常。
      

  15.   

    过滤器:
    package com.zoyechina.consumption.tool;import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;/**
     * 转换字符乱码
     * @author cyc 
     * @version 创建时间:Jan 26, 2010 4:33:41 PM
     */
    public class CharacterEncodingFilter implements Filter { private FilterConfig filterConfig;
        //Handle the passed-in FilterConfig
        public void init(FilterConfig filterConfig) throws ServletException {
            this.filterConfig = filterConfig;
        }    //Process the request/response pair
        public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain filterChain) {
            try {
                //request.setCharacterEncoding("GBK");
                //response.setCharacterEncoding("GBK");
                request.setCharacterEncoding("utf-8");
                response.setCharacterEncoding("utf-8");
                filterChain.doFilter(request, response);
            } catch (ServletException sx) {
                filterConfig.getServletContext().log(sx.getMessage());
            } catch (IOException iox) {
                filterConfig.getServletContext().log(iox.getMessage());
            }
        }    //Clean up resources
        public void destroy() {
        }
    }
      

  16.   

    conf\server.xml:
        <Connector port="8081" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443"
       URIEncoding="UTF-8"/>struts.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
            "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <include file="struts-default.xml"/>
        <constant name="struts.ui.theme" value="simple"/>
        <package name="logincode" extends="struts-default">
            <action name="login" class="com.zoyechina.consumption.action.login.Login">
                <result name="succ">jsp/main.jsp</result>
               <result name="fail">index.jsp</result>
            </action>
        </package>
        <package name="admincode" extends="struts-default">
            <action name="*Action" class="com.zoyechina.consumption.action.admin.AdminAction" method="{1}">
               <result name="listall">admin/adminlist.jsp</result>
               <result name="listall2">adminlist.jsp</result>
               <result name="toupadmin">admin/upAdmin.jsp</result>
               <result name="toaddadmin">admin/addAdmin.jsp</result>
               <result name="dealresult">adminInfo.jsp</result>
            </action>
        </package>
        <package name="servercode" extends="struts-default">
            <action name="*Server" class="com.zoyechina.consumption.action.server.ServerAction" method="{1}">
               <result name="listall">server/serverlist.jsp</result>
               <result name="listall2">serverlist.jsp</result>
            </action>
        </package>
            <package name="cardtypecode" extends="struts-default">
            <action name="*CardType" class="com.zoyechina.consumption.action.config.CardTypeAction" method="{1}">
               <result name="listall">cardtype/cardtypelist.jsp</result>
               <result name="resultinfo">cardtypelist.jsp</result>
               <result name="toupadmin">cardtype/upAdmin.jsp</result>
               <result name="toaddadmin">cardtype/addAdmin.jsp</result>
               <result name="dealresult">adminInfo.jsp</result>
            </action>
        </package>
    </struts>
      

  17.   

     <filter> 
            <filter-name>struts2 </filter-name>      
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher </filter-class> 
        </filter
    你的struts2的版本 该高一点,struts2自动能出来乱码呢,比如是struts2.1.6版本以上就不用处理乱码呢
      

  18.   

    我是楼主。这个问题解决了一半,请大家继续。
    web.xml:
    <filter>
    <filter-name>sfsdfdsfsdf</filter-name>
    <filter-class>com.zoyechina.consumption.tool.CharsetFilter</filter-class>
      <init-param>
              <param-name>charset</param-name>
              <param-value>GBK</param-value>
          </init-param>
    </filter>
    <filter-mapping>
            <filter-name>sfsdfdsfsdf</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    过滤器继承struts2的FilterDispatcher :
    public class CharsetFilter extends FilterDispatcher { 
    private String charset;
        public void destroy() {
        }
        public void doFilter(ServletRequest arg0, ServletResponse arg1,
                FilterChain arg2) throws IOException, ServletException {
            arg0.setCharacterEncoding(charset);
            arg1.setCharacterEncoding(charset);
            arg2.doFilter(arg0, arg1);    }    public void init(FilterConfig arg0) throws ServletException {
                 this.charset = arg0.getInitParameter("charset");    }

    页面编码,server.xml设置成UTF-8(server.xml设置见14楼)。
    现在的结果:在后台获取中文没有问题了,但是用ajax验证的时候取到的还是乱码。
    loadXMLDoc("checknameCardType.action?cardName="+cardname,checkReturn);后台取cardName时候还是乱码。

      

  19.   

    问题已经解决,谢谢各位的回答。
    在表单中传递的中文乱码解决办法如22楼所说。
    ajax传递中文乱码:
    在js中加上:cardname=encodeURI(encodeURI(cardname));//cardname为你要传递的参数。
    服务端取值:用java.net.URLDecoder.decode(cardname,"UTF-8");解析。松了一口气啊。
      

  20.   

    Struts2 的编码问题刚好可以看看我刚刚写的 Blog,其实 Struts2 利用了 Filter ,其已经将
    字符编码过滤器的功能集成到 StrutsPrepareAndExecuteFilter 里面了,只是 Struts2.1.8 之前
    有个小 bug  
    http://blog.csdn.net/Purking/archive/2010/01/27/5263363.aspx
      

  21.   

    LZ你试试用这个顾虑器行吗?
     <!-- 编码过滤器,其中,encoding参数为设定转换成什么编码,如果中文,可以设成:GBK,forceEncoding参数为:强制转换 -->
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>