Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > 今天卡在struts1.2.9的中文问题上了。
【标  题】:今天卡在struts1.2.9的中文问题上了。
【关键字】:struts1.2.9
【来  源】:http://www.cublog.cn/u/4572/showart.php?id=158116

今天卡在struts1.2.9的中文问题上了。

Your Ad Here     今天第一次换了netBeans平台来做东西,第一感觉还不错,但没想到卡在struts1.2.9上面了。

    一直以来是用struts中的filter的方法来处理中文问题,但是没想到这次从struts1.0换到1.2.9,那个filter怎么设置都不行了。于是,花了一下午来看这部分。

    最后找到解决方法了,还是在网上找到的,修改了一点代码后,可以正确运行了。代码如下:

原理就是struts的那个Action有问题,不够完善。重写一个这个方法就可以了。


重写一个类,如下:
package name.sahara.youth.struts;

/**
 *
 * @author jiahaolin
 */
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionServlet;

public class ActionServletUTF8Encoding extends ActionServlet {
  protected void process(HttpServletRequest request,
                         HttpServletResponse response)
    throws java.io.IOException, javax.servlet.ServletException {
    request.setCharacterEncoding("UTF-8");
    super.process(request, response);
  }

}

这个类重写了process方法,然后再通过修改web.xml实现功能:修改的部分如下:
   <servlet>
        <servlet-name>action</servlet-name>
       <!-- <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>-->
        <servlet-class>name.sahara.youth.struts.ActionServletUTF8Encoding</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>3</param-value>
        </init-param>
        <init-param>
            <param-name>detail</param-name>
            <param-value>3</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            120
        </session-timeout>
    </session-config>
    <welcome-file-list>
    <welcome-file>
            index.jsp
        </welcome-file>
    </welcome-file-list>
   

一看就明白是什么意思,因此也很容易配置。

另外,现在我的应用仍然加了filter,不知道是不是要两个配合才能使用。

FILTER的代码如下:
package name.sahara.filters;

import javax.servlet.*;
import java.io.IOException;

/**
 * <p>
 * Filter that sets the character encoding to be used in parsing the incoming
 * request, either unconditionally or only if the client did not specify a
 * character encoding. Configuration of this filter is based on the following
 * initialization parameters:
 * </p>
 * <ul>
 * <li><strong>encoding</strong> - The character encoding to be configured for
 * this request, either conditionally or unconditionally based on the
 * <code>ignore</code> initialization parameter. This parameter is required,
 * so there is no default.</li>
 * <li><strong>ignore</strong> - If set to "true", any character encoding
 * specified by the client is ignored, and the value returned by the
 * <code>selectEncoding()</code> method is set. If set to "false,
 * <code>selectEncoding()</code> is called <strong>only</strong> if the
 * client has not already specified an encoding. By default, this parameter is
 * set to "true".</li>
 * </ul>
 *
 * <p>
 * Although this filter can be used unchanged, it is also easy to subclass it
 * and make the <code>selectEncoding()</code> method more intelligent about
 * what encoding to choose, based on characteristics of the incoming request
 * (such as the values of the <code>Accept-Language</code> and
 * <code>User-Agent</code> headers, or a value stashed in the current user's
 * session.
 * </p>
 *
 * @author <a href="mailto:jwtronics@yahoo.com">John Wong</a>
 *
 * @version $Id: SetCharacterEncodingFilter.java,v 1.1 2002/04/10 13:59:27
 *          johnwong Exp $
 */
public class SetCharacterEncodingFilter implements Filter {

    // ----------------------------------------------------- Instance Variables

    /**
     * The default character encoding to set for requests that pass through this
     * filter.
     */
    protected String encoding = null;

    /**
     * The filter configuration object we are associated with. If this value is
     * null, this filter instance is not currently configured.
     */
    protected FilterConfig filterConfig = null;

    /**
     * Should a character encoding specified by the client be ignored?
     */
    protected boolean ignore = true;

    // --------------------------------------------------------- Public Methods

    /**
     * Take this filter out of service.
     */
    public void destroy() {

        this.encoding = null;
        this.filterConfig = null;

    }

    /**
     * Select and set (if specified) the character encoding to be used to
     * interpret request parameters for this request.
     *
     * @param request
     *            The servlet request we are processing
     * @param result
     *            The servlet response we are creating
     * @param chain
     *            The filter chain we are processing
     *
     * @exception IOException
     *                if an input/output error occurs
     * @exception ServletException
     *                if a servlet error occurs
     */
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        // Conditionally select and set the character encoding to be used
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding = selectEncoding(request);
            if (encoding != null)
                request.setCharacterEncoding(encoding);
        }

        // Pass control on to the next filter
        chain.doFilter(request, response);

    }

    /**
     * Place this filter into service.
     *
     * @param filterConfig
     *            The filter configuration object
     */
    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;
        else if (value.equalsIgnoreCase("yes"))
            this.ignore = true;
        else
            this.ignore = false;

    }

    // ------------------------------------------------------ Protected Methods

    /**
     * Select an appropriate character encoding to be used, based on the
     * characteristics of the current request and/or filter initialization
     * parameters. If no character encoding should be set, return
     * <code>null</code>.
     * <p>
     * The default implementation unconditionally returns the value configured
     * by the <strong>encoding</strong> initialization parameter for this
     * filter.
     *
     * @param request
     *            The servlet request we are processing
     */
    protected String selectEncoding(ServletRequest request) {

        return (this.encoding);

    }

}


web.xml配置如下:
   <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>name.sahara.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF8</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>*</servlet-name>
    </filter-mapping> 



今天太晚了,就不多试验了,明天再试一试吧。不过,乱码问题是绝对没有了。我用多个SERVLET容器测试过了。


Get pressed key at anytime when program running:【上一篇】
学Java请不要做浮躁的人(转载):【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • Javascript技术实现真正的网上试听
  • 麒麟操作系统涉嫌抄袭 自主研发说法遭质疑
  • 安装latex
  • session-timeout
  • 巧用汉字做密码
  • Office2000下内部COM插件的编程实现
  • 万能数据库数据查看器 (DBE)
  • Write Baseic SQL Select Statements
  • Freehand实用小秘技
  • 新型Linux KDE 2.0桌面环境
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.