【发布时间】:2018-10-06 17:30:39
【问题描述】:
我有一个过滤器,我在获取参数后设置 request.setCharacterEncoding("UTF-8") ,但未设置编码。在处理方法中,我只是检查请求是否包含任何已删除的特殊字符。
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。我不清楚事情是如何运作的。
【问题讨论】:
-
@BalusC 我问的问题是 setCharacterEncoding 在获取参数后不起作用的原因
标签: java servlets jakarta-ee servlet-filters