교재를 보며 손가락 운동을 하는데 실행해보니 한글이 깨져서 나왔다.
실행파일에선 안 깨지는데 <form>
태그로 연결한 process
파일에서만 깨졌다.
include01.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>Database SQL</title>
</head>
<body>
<form method="post" action="insert01_process.jsp">
<p>아이디 : <input type="text" name="id">
<p>비밀번호 : <input type="text" name="passwd">
<p>이름 : <input type="text" name="name">
<p><input type="submit" value="전송">
</form>
</body>
</html>
include_process.jsp
<%@ page contentType="text/html charset=utf-8" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>Database SQL</title>
</head>
<body>
<%@ include file="dbconn.jsp" %>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
Statement stmt = null;
try{
String sql = "INSERT INTO member(id, passwd, name) VALUES('" +
id + "','" + passwd + "','" + name + "')";
stmt = conn.createStatement();
stmt.executeUpdate(sql);
out.println("member 테이블 삽입 성공!");
}catch (SQLException ex) {
out.println("member 테이블 삽입 실패...<br>");
out.println("SQLException: " + ex.getMessage());
}finally {
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
%>
</body>
</html>
' 한글깨짐이야 뭐 자주 있는 일이니까'
그러려니 했다. 그냥 아는대로 해결하면 되겠지..
보통은
- Window -> preferences -> General -> Content Types
- 해당 파일 우클릭 -> Properties -> type filter text
에서 인코딩을 UTF-8
로 맞추면 된다.
이전까지의 깨짐은 이렇게만 해도 해결이 되었다.
하지만 이번에는 물음표로만 깨질 뿐더러 전혀 해결되지 않았다.
여러가지 방법을 서치한 결과, 유일하게 해결이 되는 방법을 찾았다.
지금까지 늘 써오던 이 문장..
<%@ page contentType="text/html; charset=utf-8" %>
여기서 charset=utf-8
대신 pageEncoding="utf-8"
을 사용해서
<%@ page contentType="text/html" pageEncoding="UTF-8" %>
실행하면 놀랍게도 나온다.
(실패 오류는 일부러 한거니까 무시하자)
내가 찾은 해결방법 글과 더불어 chatGPT를 굴려서 원인을 분석해본 결과,
포인트는 > 중복된 인코딩 설정 < 과 인 것 같다.
이미 charset=utf-8
과 pageEncoding="utf-8"
이 중복으로 있어서 충돌이 발생한다는 것 같다.
그렇다면 왜 charset=utf-8
만 넣었을 때 안되냐 하면..
사실 정확하진 않지만 나름 분석해본 결과
charset=utf-8
은 웹 브라우저에게 서버에서 보내는 데이터의 인코딩 방식이 UTF-8임을 알려주는데 반해,
pageEncoding="utf-8"
은 특정한 JSP 파일 내의 모든 텍스트의 인코딩을 지정하여 해당 JSP 파일 내에서만 적용되기 때문에
인코딩 방식을 명시적으로 설정하는 pageEncoding="utf-8"
가 더 안전하다.
라는게 내 결론이다.
코드의 세계는 끝이 없는 것 같다...