본문 바로가기

JAVA개발

[JAVA 개발] 메인페이지에 글내용 노출시 html태그를 빼고 노출시키는 방법

간혹 게시판을 구현할때 내용을 화면에 뿌려주는 경우가 있는데 다른 css작업등과 같은 작업을 진행할때

html태그가 적용이 되지 않은 상태로 화면상 태그까지 글자로 인식되어 뿌려지는 경우가 있습니다.

ex> <p>안녕하세요</p>

이렇게 보여지게 되는데요 적용이 되어서 태그적용상태로 화면에 뿌려지면 좋지만 그렇지 않을경우

Controller에서 태그를 뺀 상태로 화면에 뿌려질수 있는 소스를 보여드리겠습니다.

먼저 기본적으로 Controller->Service->ServiceImpl->Dao->xml순으로 디비에 임시로 저장시켜놓은 리스트를

뽑아 오도록 하겠습니다.

Controller

@RequestMapping("/test")
 public String test(ModelMap mo , NoticeVo noticevo) throws SQLException{
  
  ArrayList<NoticeVo> mainnoticelist = mainservice.mainnoticelist(noticevo);
  
  mo.addAttribute("noticekey", mainnoticelist);
  
  return "test";
 }  

Service

public interface MainService {

 public ArrayList<NoticeVo> mainnoticelist(NoticeVo noticevo) throws SQLException;

}

ServiceImpl

@Service
public class MainServiceImpl implements MainService{
 @Autowired
 private MainDao maindao;

 public ArrayList<NoticeVo> mainnoticelist(NoticeVo noticevo) throws SQLException {
  // TODO Auto-generated method stub
  return maindao.mainnoticelist(noticevo);
 }

}

DAO

@Repository
public class MainDao {
 @Autowired
 private SqlSession mainsql;

 @SuppressWarnings({ "rawtypes", "unchecked" })
 public ArrayList<NoticeVo> mainnoticelist(NoticeVo noticevo) throws SQLException {
  // TODO Auto-generated method stub
  return (ArrayList)mainsql.selectList("mainsql.mainnoticelist" , noticevo);
 }

}

XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mainsql">

 <!-- 리스트 뽑기 -->
 <select id="mainsql.mainnoticelist" parameterType="com.spring.vo.NoticeVo" resultType="com.spring.vo.NoticeVo">
  SELECT * FROM NOTICETABLE ORDER BY NOTICE_NO DESC limit 5
 </select> 
</mapper>

리스트를 담아 jsp페이지에서 화면에 뿌려줄 경우 html태그가 적용되어 리스트가 출력되면 상관 없지만,

<p>테스트 입니다.</p><p><span style="color: rgb(255, 0, 0);">색상을 빨간색입니다.</span></p>

<p><span style="color: rgb(255, 239, 0);">이것은 노랑색 입니다.</span></p>

이런식으로 화면에 출력되는경우가 발생하게 되면 Controller에서 소스만 추가해 주시면 html태그가 지워진

일반 글자로 출력되게 됩니다.

for(NoticeVo vo : mainnoticelist) {
   if(vo.getNotice_content() != null && !vo.getNotice_content().equals("") ) {
    vo.setNotice_content(vo.getNotice_content().replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", ""));
   }
  }

해당 소스를 출력한뒤에 실행화면을 보시면 일반 태그가 모두 삭제된 화면으로 출력이 됩니다.

감사합니다.