Проблема с Java-сервлетом и кодировкой JSP в базе данных

#java #jsp #servlets #character-encoding

#java #jsp #сервлеты #кодировка символов

Вопрос:

Я создаю веб-приложение Java, и у меня возникла проблема с интернационализацией приложения.

  • Когда я использую свой EncodingFilter для настройки кодировки запроса / ответа, запись в базе данных сохраняется в виде странных символов شششش شششش
  • Если я удалил настройки EncodnigFilter, записи базы данных сохраняются нормально, но текст в моих файлах JSP отображается в виде вопросов, помеченных ??????
    • Я не использую никаких фреймворков, только Servlet и JSP
    • Используемая база данных — Apache Derby (встроенная)

Вот мой кодировщик

 @WebFilter(filterName="EncodingFilter", urlPatterns={"/*"})
public class EncodingFilter implements Filter{

    private FilterConfig filterConfig=null;
    private String encoding;



    public void init(FilterConfig filterConfig)
    {
        this.filterConfig=filterConfig;
        encoding = filterConfig.getInitParameter("requestEncoding");
        if (encoding == null) encoding = "UTF-8";
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
        if (null == request.getCharacterEncoding()) {
            request.setCharacterEncoding(encoding);
        }
        response.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);

    }

    public void destroy() {
        this.filterConfig=null;
    }
}
 

и это мой языковой элемент управления, который используется для изменения языка на основе запроса пользователя

 @WebServlet(name="LanguageController",urlPatterns={"/Language"})
public class LanguageController extends BaseControler{
    private static final long serialVersionUID = 1L;
    private ResourceBundle bundle;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doExecute(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doExecute(req, resp);
    }

    private void doExecute(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException{

        String refer = req.getHeader("referer");        
        if(refer == null)
            refer = "index.jsp";

        String param = req.getParameter("lang");

        bundle = ResourceBundle.getBundle("messages",new Locale(param.toUpperCase()));
        HttpSession session = req.getSession();
        session.setAttribute(SessionKeys.LANGUAGE, bundle);
        session.setAttribute(SessionKeys.LANGUAGE_STRING, param.toUpperCase());
        resp.sendRedirect(refer);
    }
}