Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlets-我们可以在获取参数后设置字符编码吗_Java_Servlets_Jakarta Ee_Servlet Filters - Fatal编程技术网

Java Servlets-我们可以在获取参数后设置字符编码吗

Java Servlets-我们可以在获取参数后设置字符编码吗,java,servlets,jakarta-ee,servlet-filters,Java,Servlets,Jakarta Ee,Servlet Filters,我有一个过滤器,在获取未设置编码的参数后,在其中设置request.setCharacterEncoding(“UTF-8”)。在process方法中,我只是检查请求是否包含任何被删除的特殊字符 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { getParams(request);

我有一个过滤器,在获取未设置编码的参数后,在其中设置request.setCharacterEncoding(“UTF-8”)。在process方法中,我只是检查请求是否包含任何被删除的特殊字符

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    getParams(request);
    chain.doFilter(new RequestWrapper((HttpServletRequest) request), response);
}

private void getParams(ServletRequest request)
{

    HttpServletRequest httpRequest = (HttpServletRequest) request;
    Map paramMap = httpRequest.getParameterMap();

    Set entrySet = paramMap.entrySet();

    for (Iterator iterator = entrySet.iterator(); iterator.hasNext();)
    {
        Map.Entry entry = (Map.Entry) iterator.next();  

        String s = process(entry.getValue().toString());
        //entry.setValue(s);

    }
}
在给定的代码中,我在链中的下一个过滤器中设置CharacterEncoding

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    chain.doFilter(request, response);
}
但是,如果我在获取参数之前在第一个过滤器中设置它,那么它的工作就正常了


因此,在获取参数之前有必要设置CharacterEncoding。我不清楚如何工作。

默认情况下,如果HTTP请求中未指定编码,服务器会认为编码是ISO-8859-1(拉丁语1)。至少Tomcat和JBoss就是这样,它们将Tomcat嵌入到web容器中

如果在检索请求参数之前调用
setCharacterEncoding
方法,则会覆盖此默认行为,使其按预期工作

相反,如果在检索请求参数后调用setCharacterEncoding方法,则将使用默认的ISO-8859-1编码检索它们。下一步,你覆盖它,但为时已晚


有关webapps中UTF-8编码的更多详细信息,请参阅本文:

我正在使用JBoss JBoss web容器是Tomcat(Tomcat已嵌入),谢谢@Sebastien,但文档中说“必须在getWriter之前调用setContentType或setLocale方法,才能使字符集影响编写器的构造。”。但是,在我的示例中,我在过滤器上使用它并检查参数。@BalusC我问的问题是为什么setCharacterEncoding在获取参数后不起作用