2016-02-15 2 views
0

Есть ли способ установить кодировку ответа во встроенном tomcat? До сих пор я мог найти только кодировку URI. Но мне нужно установить кодировку ответа.Установить кодировку ответа во встроенном tomcat

Удивительно, что автономный tomcat по умолчанию отправляет данные в UTF-8.

+0

просто использовать метод setCharacterEncoding из ServletResponse класса доступен в HttpServletResponse установить кодировку ответа, если вы не хотите использовать фильтр. –

ответ

0

Вы можете создать фильтр, чтобы установить вашего кодирование ответа

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.*; 

public class MyFilter implements Filter{ 

public void init(FilterConfig arg0) throws ServletException {} 

public void doFilter(ServletRequest req, ServletResponse resp, 
    FilterChain chain) throws IOException, ServletException { 

    resp.setCharacterEncoding("text/plain; charset=UTF-8"); 

    chain.doFilter(req, resp);//sends request to next resource 


    } 
public void destroy() {} 
} 
+0

Я использую встроенный tomcat. Я попытался установить setCharacterEncoding («UTF-8»). Хотя заголовок ответа HTTP отправляет кодировку, браузер неправильно отображает символы. –

+0

use setCharacterEncoding ("text/html; charset = UTF-8"); см. [link] (https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletResponse.html#setCharacterEncoding (java.lang.String)) –

+0

Но проблема в том, что он отлично работает причал и автономный кот. Встраиваемая версия tomcat - 8.0.12, это причина? –

0
  1. Создать фильтр:

    пакета `charsetFilter.classes;

    import java.io.IOException; 
    import javax.servlet.Filter; 
    import javax.servlet.FilterChain; 
    import javax.servlet.FilterConfig; 
    import javax.servlet.ServletException; 
    import javax.servlet.ServletRequest; 
    import javax.servlet.ServletResponse; 
    
    public class CharsetFilter implements Filter{ 
        private String encoding; 
    
        public void init(FilterConfig config) throws ServletException{ 
          encoding = config.getInitParameter("requestEncoding"); 
          if(encoding==null) encoding="UTF-8"; 
        } 
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain  next) 
        throws IOException, ServletException{ 
         // Respect the client-specified character encoding 
         // (see HTTP specification section 3.4.1) 
          if(null == request.getCharacterEncoding()) 
          request.setCharacterEncoding(encoding); 
          /** 
         * Set the default response content type and encoding 
         */ 
         response.setContentType("text/html; charset=UTF-8"); 
         response.setCharacterEncoding("UTF-8"); 
          next.doFilter(request, response); 
        } 
    
         public void destroy(){} 
    }` 
    
  2. Добавить этот фильтр в web.xml, как:

    `<filter> 
         <filter-name>CharsetFilter</filter-name> 
         <filter-class>charsetFilter.classes.CharsetFilter</filter-class> 
          <init-param> 
           <param-name>requestEncoding</param-name> 
           <param-value>UTF-8</param-value> 
          </init-param> 
    </filter> 
    
    <filter-mapping> 
         <filter-name>CharsetFilter</filter-name> 
         <url-pattern>/*</url-pattern> 
    </filter-mapping>` 
    
  3. HTML-мета-теги должны быть записаны во всех HTML-файлов:
    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi"> <head> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />

  4. Установите сервлет, как :
    request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); response.setCharacterEncoding("UTF-8");

  5. сделки с запросами сервлет как:
    String input = new String(request.getParameter("foo").getBytes("iso-8859-1"), "utf-8"); String input = URLDecoder.decode(request.getParameter("keyWord"), "UTF-8");

Позвольте мне знать, если у вас все еще есть проблемы

Смежные вопросы