본문 바로가기
프로그래밍/스프링프레임워크

JSTL - jsp 페이지에서 jstl을 사용하여 HTML tag 제거하기

by pentode 2018. 4. 20.

웹프로그래밍에서 출력되는 문자열에서 HTML 태그를 제거하고 순수한 문자열만 출력하고 싶을때가 있습니다. jsoup과 같은 라이브러리를 이용해서 서블릿단에서 처리한 다음 jsp단에서 출력해 주는게 일반적이지만 간단히 jsp 페이지에서 처리하는게 필요할 때도 있지 않을까 생각됩니다.

 

 

1. 테스트용 예제입니다.

 

컨트롤러에서 데이터를 jsp 페이지로 보냅니다. HomeController.java 파일 입니다.

 

@RequestMapping(value = "/home.do", method = RequestMethod.GET)

public String home(Locale locale, Model model) {

    logger.info("Welcome home! The client locale is {}.", locale);

 

    model.addAttribute("contents", "<p>테스트용 <strong>문자열</strong> 입니다.</p>");

 

    return "home";

}

 

home.jsp 파일 입니다.

 

<%@ page contentType="text/html; charset=utf-8" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>

<html lang="ko">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Home</title>

</head>

<body>

<h1>Hello world!</h1>

<p><c:out value="${contents}" /></p>

</body>

</html>

 

 

실행결과 입니다. 

 

 

 

 

<c:out> 태그는 html 태그를 escape 하므로 태그가 그냥 보여집니다. 태그가 escape 되지 않게 하려면 escapeXML 속성을 "false" 로 주면 html이 escape 되지 않고 그대로 출력되어집니다.

 

<c:out value="${contents}" escapeXml="false" />

 

 

 

2. HTML 태그를 제거하기

 

간단하게 생각해볼 수 있는 것이 ${fn:replace()} 인데, fn 태그 라이브러리의 replace 함수는 정규식을 지원하지 않습니다. 그리고 문자열 함수에 있는 것과 같은 ${fn:replaceAll()} 함수는 아예 존재하지 않습니다.

 

해결 방법을 간단합니다. ${contents.reaplceAll()} 처럼 문자열의 replaceAll() 함수를 직접 사용하는 것입니다. 다음처럼 처리할 수 있습니다.

 

<c:out value='${contents.replaceAll("\\\<.*?\\\>","")}' />

 

문자열을 일정한 길이로 자르고 뒤에 ... 붙이려면 CSS 를 사용하는것이 더 나은 결과물을 보여줍니다만 다음처럼 하는것도 가능합니다.

 

 

<%@ page contentType="text/html; charset=utf-8" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE html>

<html lang="ko">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Home</title>

</head>

<body>

<h1>Hello world!</h1>

<p><c:out value="${contents}" /></p>

<p><c:out value='${contents.replaceAll("\\\<.*?\\\>","")}' /></p>

<p><c:out value='${fn:substring(contents.replaceAll("\\\<.*?\\\>",""),0, 10)}' />...</p>

</body>

</html>

 

 

3. 실행 결과 입니다.

 

 

 

 

JSP 페이지에서 jstl을 사용해서 간단하게 HTML 태그를 제거하는 방법을 알아보았습니다.

 

※ 예제소스

srping_replace.zip
다운로드

 

반응형