여기 UTF-8로 돌아가는 JSP페이지가 있다.
한글 검색도 된다.
List.jsp?searchWord=한글&pageNum=1
이 페이지에서는 한글을 처리하기 위해 다양한 노력을 한다
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>
// JSP 처리에 대한 설정
// contentType: JSP가 처리되고 생성할 문서에 대한 타입 지정
// charset: 브라우저가 받아볼 인코딩 형식 즉 생성될 문서의 인코딩
// pageEncoding: JSP 파일 자체 인코딩 방식
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
// 현재 html파일의 인코딩을 알려주는 태그
// 웹브라우저가 html파일을 화면에 그려주기 위해 처리시 어떤 문자 표현 방식을 사용하는지 알려주기 위해 지정
// 위에 두 코드는 동일한 역할을 가지며 버전 차이가 존재
// HTML 4.01: meta http-equiv 방식 사용
// HTML%: meta charset 방식 사용
request.setCharacterEncoding("UTF-8");
// JSP에서 값을 post 방식으로 서버에 전달할때 적용
// List에서 get 방식으로 검색하는 지금 예제에는 의미없지만 인코딩 설정할때 같이 많이 써서 넣음
// get 방식은 Tomcat에서 알아서 UTF-8 설정해줌
만약 이 설정들이 없다면 어떻게 될까?
전체적으로 난장판이 된다.
JSP의 인코딩 정보도, 브라우저가 받는 인코딩 정보도 다 사라졌다
사실 중요한건
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>
이 구문 하나다.
해당 JSP 설정에 대한 구문이 생성될 html에 대한 인코딩 타입까지 포함하고 있기 때문이다.
하지만 어떤 일이 생길지 모르니 다른 설정도 같이 세트로 묶어두는게 좋다.
그렇다면 저 설정들을 모든 페이지에 공통적으로 반영하면 좋지 않을까?
<%@ include file = "페이지" %>
JSP에서 include 하는 방법은 여러가지 있지만, 결과만 가져오냐 내용 자체를 합치냐 차이가 존재한다.
@ incloud 방식은 해당 파일 자체를 대상 파일에 합쳐버린다.
즉, include 페이지에 인코딩 설정을 넣고, 다른 jsp에 포함시키면, 인코딩 설정을 공통적으로 할 수 있지 않을까?
// Encode.jsp 페이지
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<%
request.setCharacterEncoding("UTF-8");
%>
// List.jsp
<%@ include file="/common/Encode.jsp" %>
대환장 파티가 펼쳐진다.
분명하게도 html에 인코딩을 망가졌다.
html을 처리하는 과정에 이 파일에 대한 인코딩을 결정하지 못한 것이다.
하지만 include에 page가 적용안된걸까?
테이블 내용을 바라보면 세종대왕이라는 한글이 보인다.
이전에 모든 내용이 망가지는 것과는 다른 결과다.
인코딩 설정이 영향을 미치지만, 제대로된 반영이 안되는 것으로 보인다.
어차피 결론은 존재한다.
인코딩 설정을 공통적으로 하고 싶다면 include 대신 Spring이나 servlet에서 설정하는 방안이 있다.
web.xml에 encodingfilter 방식, mvc-dispatcher-servlet.xml 수정 등 다양한 대안이 존재한다.
현재 JSP에 초점을 맞춰서 include 방식을 알아봤지만, 제대로된 반영이 안됨을 확인할 수 있다.
include 방식을 통한 모듈화는 html 관련 요소를 설정할때 사용하고, java 처리 관련 사항은 다른 다양한 대안이 존재한다.
@ page 설정은 JSP 파일마다 성실하게 하자