Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101769
  • 博文数量: 28
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 295
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-01 22:43
文章分类

全部博文(28)

文章存档

2008年(28)

我的朋友
最近访客

分类:

2008-04-10 18:02:21

jsp接收如form提交的中文出现乱码的解决办法:
办法一:
直接用过滤器:
 

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;

/**
 *


 * 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:
 *


 *

     *
  • encoding - The character encoding to be configured for
     * this request, either conditionally or unconditionally based on the
     * ignore initialization parameter. This parameter is required,
     * so there is no default.

  •  *
  • ignore - If set to "true", any character encoding
     * specified by the client is ignored, and the value returned by the
     * selectEncoding() method is set. If set to "false,
     * selectEncoding() is called only if the
     * client has not already specified an encoding. By default, this parameter is
     * set to "true".

  •  *

 *
 *


 * Although this filter can be used unchanged, it is also easy to subclass it
 * and make the selectEncoding() method more intelligent about
 * what encoding to choose, based on characteristics of the incoming request
 * (such as the values of the Accept-Language and
 * User-Agent headers, or a value stashed in the current user's
 * session.
 *


 */

public class CharacterEncodingFilter implements Filter
{
    
/**
     * 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;

    
/**
     * 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 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;

    }

    
/**
     * 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
     * null.
     *


     * The default implementation unconditionally returns the value configured
     * by the encoding initialization parameter for this
     * filter.
     *
     * @param request
     * The servlet request we are processing
     */
    protected String selectEncoding(ServletRequest request)
    {
        return (this.encoding);
    }
}

 

<!-- ==================== Filter to set character encoding on each request ================= -->
    <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>
            **.**.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GBK</param-value>
        </init-param>
        <init-param>
            <param-name>ignore</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>exposeInternals</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

办法二:

post方式提交的:request.setCharacterEncoding("GBK");  

get 方式提交的:new String(string.getBytes("ISO8859_1"),"GBK");

阅读(487) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~