Java Servlets-我们可以在获取参数后设置字符编码吗
我有一个过滤器,在获取未设置编码的参数后,在其中设置request.setCharacterEncoding(“UTF-8”)。在process方法中,我只是检查请求是否包含任何被删除的特殊字符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);
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在获取参数后不起作用