[jsp,jstl,java] 줄바꿈, 개행, 공백 replace 처리하기
안녕하세요 이번에는 DB에 text 내용을 저장 후 사용할때 줄바꿈 처리에 대해 간단히 알려드리고자 합니다.
일단 입력 부분에서 엔터를 사용합니다.

이렇게 DB에 저장 후 그대로 가져오면 다음과 같습니다.

이렇게 줄바꿈이 적용되지 않은채로 나오는 경우가 있습니다.
원인은 다음과 같습니다
DB에 저장시 "\n" 로 인식하기 때문에 jsp에서 엔터는 <br>태그로만 인식하기 때문에 표시가 안되는 현상입니다.
해결방법으로는 크게 2가지가 있습니다.
저장할때 개행문자를 변경 or 저장 후 사용할 때 개행문자를 변경
입니다.
저는 저장은 그대로 하고 데이터를 불러올 때 처리를 소개하도록 하겠습니다.
저장 후 사용시에도 2가지 방법으로 알려드리겠습니다.
1. JAVA 단에서 변경
2. JSP 단에서 변경(jstl 이용)
으로 각각 알려드리도록 하겠습니다.
1. JAVA단에서 변경
JAVA에서는 다음과 같이 replace 함수를 이용하면 됩니다.
replace("\r\n","<br>")
저는 스프링에서 사용하기 때문에 VO에 데이터를 담아 사용하는데요.
paramVO.setContent(paramVO.getContent().replace("\r\n","<br>"));
해당 내용을 가져와 replace 함수로 변경하여 바로 다시 저장하게끔 설정을 합니다.
2. JSP 단에서 변경(jstl 이용)
JSP에서는 fn 함수를 이용합니다.
우선 JSP 상단에 라이브러리를 다음과 같이 작성하여 추가합니다.
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<% pageContext.setAttribute("replaceChar", "\n"); %>
그리고 사용할 부분에 다음과 같이 작성합니다.
${fn:replace(paramVO.content, replaceChar, "<br/>")}
구현 결과를 보시면 다음과 같습니다.

참고로 jstl로 반대로 하는 방법은 다음과 같습니다.
아까와 마찬가지로 상단에 선언시 <br/> -> <br> 로 변경
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<% pageContext.setAttribute("replaceChar", "<br>"); %>
\n을 사용하기 위해서 \\를 두번 사용해야 합니다.
${fn:replace(paramVO.content, replaceChar, "\\n")}
이렇게 사용하시면 아까와 반대로 변경이 가능합니다.
자 이렇게 스프링에서 java, jstl을 이용한 방법을 알려드렸습니다.
본인이 좋아하시는 방법에 맞게 사용하시면 될것 같습니다.
감사합니다.