복붙노트

[SPRING] web.xml의 CharacterEncodingFilter를 사용한 Spring 인코딩

SPRING

web.xml의 CharacterEncodingFilter를 사용한 Spring 인코딩

{|} ~ €, ƒ "... † ‡ ‰ Š <마스 ''" "• - ~ ™ š> œžŸ¡ ¢ £ ¤ ¥ | § © ª«¬®¯ ° ± ¸ · ²³'μ¶ ¹º»¼½¾¿ÀÁÇÇÁÊ ± ÐÑÓÔÕÖ × ØÙÚÛÜÝÞåáâååççééêìîîîðððòòòöööööööõö ± øùúûþòŸ ▲ ► ▼ ◄ ■ □ ▣▤▥▦▧▨▩ ▫ ○ ● ☺☻☼ € £ £ ¤♀♂♂ ♠ ♤ ♣ ♧ ♥ ""♡ ♦ ★ ☆ ⌂№ COUNTRY ☏♨ ☏♨ ☞ ♪ ♪ ♫ ♬ ♭ † ‡ ← ↑ → ↓ ↔ Quantcast

{|} ~ ?? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ¶ · ¸¹º»¼½¾¿ÀÁÇÇÉÊËÌÍÎ ± ÐÑÓÓÔÕÖ × ØÙÚÛÜÝÞßàáâåååæççééêëíîïðïððòòôõö ± øùúûüòþ ????? ??????????? ¤? ¢ £ ¥ ¤ ???????? " "??????????????????????????????????????????????????????????

<#ftl attributes={"content_type":"text/html"} encoding="UTF-8"/>

이것을 내 HttpsCookieFilter에 넣으십시오.

        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");

분명히 어떻게 든 (out.write ()를 사용하여 HTML 컨텐트를 생성하는 Freemarker 대신 Http Servlet을 남용합니다. 그래서 위의 내용을 추가했습니다.

다음은 서블릿 소스입니다. 그것을 바꾸는 방법에 관한 조언은 환영 할만한 것이 아닙니다.

public class HttpsCookieFilter implements Filter {
private static Logger log = Logger.getLogger(HttpsCookieFilter.class);

@Override
public void destroy() {
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    final HttpServletRequest req = (HttpServletRequest) request;
    final HttpServletResponse res = (HttpServletResponse) response;

        req.setCharacterEncoding("UTF-8");
        res.setCharacterEncoding("UTF-8");
        res.setContentType("text/html; charset=UTF-8");

    final HttpSession session = req.getSession(false);

    if (session != null) {
        setCookie(req, res);
    }
    try {
        chain.doFilter(req, res);
    } catch (IllegalStateException e) {
        log.warn("HttpsCookieFilter redirect problem! ", e);
    }
}

@Override
public void init(FilterConfig arg0) throws ServletException {
}

private void setCookie(HttpServletRequest request, HttpServletResponse response) {
    Cookie cookie = new Cookie("JSESSIONID", request.getSession(false).getId());
    cookie.setMaxAge(-1);
    cookie.setPath(getCookiePath(request));
    cookie.setSecure(false);
    response.addCookie(cookie);
}

private String getCookiePath(HttpServletRequest request) {
    String contextPath = request.getContextPath();
    return contextPath.length() > 0 ? contextPath : "/";
}
}

이제 UTF-8은 어디에서나 작동합니다.) BalusC에 감사드립니다!

해결법

  1. ==============================

    1.물음표는 일반적으로 문자 - 바이트 변환기 / 작성기가 문자가 실제로 인코딩되는 문자 세트와 문자가 디코딩되어야하는 문자셋을 인식 할 때 사용됩니다. 디코딩 charset이 원래 인코딩의 특정 문자를 지원하지 않으면 물음표로 변환됩니다.

    물음표는 일반적으로 문자 - 바이트 변환기 / 작성기가 문자가 실제로 인코딩되는 문자 세트와 문자가 디코딩되어야하는 문자셋을 인식 할 때 사용됩니다. 디코딩 charset이 원래 인코딩의 특정 문자를 지원하지 않으면 물음표로 변환됩니다.

    데이터베이스 백엔드가있는 평균 웹 응용 프로그램에는 다음과 같은 두 가지 문제가 발생할 수 있습니다.

    두 경우 모두 바이트 만 이해하는 TCP / IP 네트워크가 사용되고 서버와 클라이언트는 일반적으로 양쪽에서 사용되는 charset을 인식합니다. 다른 모든 경우에 당신은 Mojibake를 대신 보았을 것입니다.

    첫 번째 경우를 다루기 위해 DB와 테이블이 UTF-8을 사용하도록 구성되었는지 확인해야합니다. 일반적으로 CREATE 중에이를 지정합니다. 다음은 MySQL 방언의 예입니다.

    CREATE DATABASE db_name CHARACTER SET utf8;
    CREATE TABLE tbl_name (...) CHARACTER SET utf8;
    

    MySQL과 같은 일부 JDBC 드라이버의 경우 드라이버 자체에 UTF-8을 사용하도록 지시해야합니다.

    jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
    

    두 번째 경우를 처리하려면 응답 작성자에게 문자를 바이트로 디코딩하는 데 UTF-8을 사용하도록해야합니다. JSP를 뷰로 사용할 때 모든 JSP 페이지 (include 포함)의 맨 위에 다음을 추가하면 충분합니다 (응답 인코딩을 설정하는 것은 물론 올바른 응답 헤더도 암시 적으로 설정합니다).

    <%@ page pageEncoding="UTF-8" %>
    

    현재 사용중인 스프링 문자 인코딩 필터에 관해서는 제출 된 데이터가 UTF-8로 해석 될 수 있도록 요청 인코딩 만 설정합니다. 기본적으로 다음과 같은 작업을 수행합니다.

    request.setCharacterEncoding("UTF-8");
    

    아무것도 더. 이것은 POST 요청 만 다루며 GET 요청의 경우 URL을 UTF-8로 해석하도록 웹 서버를 구성해야합니다.

  2. ==============================

    2.Dispatcher 서블릿 컨텍스트 xml에서 속성을 추가해야합니다. viewResolver bean에서 "" 우리는 전망을 위해 freemarker를 사용하고 있습니다.

    Dispatcher 서블릿 컨텍스트 xml에서 속성을 추가해야합니다. viewResolver bean에서 "" 우리는 전망을 위해 freemarker를 사용하고 있습니다.

    다음과 같이 보입니다.

    <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
           ...
           <property name="contentType" value="text/html;charset=UTF-8" />
           ...
    </bean>
    
  3. from https://stackoverflow.com/questions/5444693/spring-encoding-with-characterencodingfilter-in-web-xml by cc-by-sa and MIT license