有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java UtF8格式在tomcat服务器的servlet中不起作用

我有一个Java Servlet,它通过ajax javascript从HTML接收数据。Html从用户那里接收印地语文本,并通过ajax将其发送到servlet中。我到处都指定了UTF-8格式,但它不起作用

我已经将请求和响应编码设置为utf-8,仍然不工作。 服务器是Tomcat

如果有人能帮忙的话


共 (1) 个答案

  1. # 1 楼答案

    按照以下步骤配置Tomcat,使其能够正确地为UTF-8页面服务,无论是波斯语、阿拉伯语还是任何从右向左书写的语言:

    (1)编辑服务器。xml如下所示

    2)CharsetFilter强制java webapp以UTF-8编码方式处理所有请求和响应。这要求我们定义一个字符集过滤器,如下所示:

    包装charsetFilter。班级

     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;
    
    public class CharsetFilter implements Filter{
        private String encoding;
    
        public void init(FilterConfig config) throws ServletException{
                encoding = config.getInitParameter("requestEncoding");
                if( encoding==null ) encoding="UTF-8";
        }
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain       next)
        throws IOException, ServletException{           
                if(null == request.getCharacterEncoding())
                request.setCharacterEncoding(encoding);             
            response.setContentType("text/html; charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
                next.doFilter(request, response);
        }
    
            public void destroy(){}
    }   
    

    此筛选器确保如果浏览器未设置请求中使用的编码,则将其设置为UTF-8。这个过滤器所做的另一件事是设置默认的响应编码,即返回的html/无论什么内容的编码。另一种方法是在应用程序的每个控制器中设置响应编码等

    3)然后将此筛选器添加到web。类似xml的:

    CharsetFilter charsetFilter。上课。CharsetFilter 请求编码 UTF-8

    <filter-mapping>
            <filter-name>CharsetFilter</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    然后将servlet编写为:

    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
    

    并在servlet中使用任何想要使用的语言

    您可以使用它来获取参数:

    字符串输入=新字符串(request.getParameter(“foo”)。getBytes(“iso-8859-1”),“utf-8”)

    干杯