Проблемы с EncodingFilter

150
27 июня 2019, 06:50

при разработке веб-приложения на java столкнулся с проблемой кодировки при отображении русских символов на страничке в бразуере. Написал EncodingFilter и добавил его в web.xml. В чем может быть проблема?Почему не работает?

<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>filters.EncodingFilter</filter-class>
    <init-param>
        <param-name>requestEncoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>*.html</url-pattern>
</filter-mapping>

фильтр:

import javax.servlet.*;

import java.io.IOException;

public class EncodingFilter implements Filter { String encoding;

@Override
public void init(FilterConfig filterConfig){
    encoding = filterConfig.getInitParameter("requestEncoding");
    if (encoding == null) encoding = "UTF-8";
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    if (null == servletRequest.getCharacterEncoding()) {
        servletRequest.setCharacterEncoding(encoding);
    }else {
        servletResponse.setCharacterEncoding(encoding);
    }
    filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}

}

Answer 1

Нужно устанавливать кодировку и в request, и в response

@Override
public void init(FilterConfig filterConfig){
    encoding = filterConfig.getInitParameter("requestEncoding");
    if (encoding == null) encoding = "UTF-8";
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv    
String codeRequest = servletRequest.getCharacterEncoding();
    if (!encoding.equalsIgnoreCase(codeRequest)) {
        servletRequest.setCharacterEncoding(encoding);
        servletResponse.setCharacterEncoding(encoding);
    }
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}

Также вы точно уверены, что только *.html должно фильтроваться? Я бы сделал <url-pattern>/hospital/*</url-pattern>

READ ALSO
Неправильно читается из консоли строка

Неправильно читается из консоли строка

Почему-то для считывания символов второй строки требуется ввести на один символ большеПри этом в методе input_data() срабатывает выход из цикла...

146
Заменить символы двоеточия или точки в формате времени на заданное слово

Заменить символы двоеточия или точки в формате времени на заданное слово

Подскажите, можно ли во времени, например: 01:00:05 типа DateTime или TimeSpan заменить двоеточия на сокращения ч, мин или сек и при этом убрать нули до первого...

169
Навигация в xamarin forms

Навигация в xamarin forms

Вопрос заключается в следующемСоздаю приложение на xamarin forms, используя паттерн mvvm

178