게시판 글 보기 기능 구현하기

민주·2021년 2월 9일
[BbsDAO.java]
public Bbs getBbs(int bbsID) {
    String SQL = "SELECT * FROM BBS WHERE bbsID =?";
	try {
	    PreparedStatement ps = conn.prepareStatement(SQL);
	    ps.setInt(1, bbsID);
	    rs = ps.executeQuery();
	    while(rs.next()) { 
		Bbs bbs = new Bbs(); //rs를 받아와 bbs클래스 set
		bbs.setBbsID(rs.getInt(1));
		bbs.setBbsTitle(rs.getString(2));
		bbs.setUserID(rs.getString(3));
		bbs.setBbsDate(rs.getString(4));
		bbs.setBbsContent(rs.getString(5));
		bbs.setBbsAvailable(rs.getInt(6));
		return bbs;
	    }
	}catch(Exception e) {
	    e.printStackTrace();
	}
	return null;
}
- getBbs()는 게시글을 보여주는 함수이다.
- 매개변수를 bbsID로 받아와서 해당 bbsID의 데이터베이스 내용을 불러와서 rs에 담는다.
- 그 데이터를 BBS클래스를 객체화 시켜 데이터를 하나하나 넣어준다.
- bbs로 반환한다.
[view.jsp]
<%
String userID = null;
if(session.getAttribute("userID") != null){
    userID = (String)session.getAttribute("userID");
}
int bbsID=0;
if(request.getParameter("bbsID")!=null){
    bbsID= Integer.parseInt(request.getParameter("bbsID"));
}
if(bbsID==0){ 
    PrintWriter script = response.getWriter();
    script.println("<script>");
    script.println("alert('유효하지 않은 글입니다.')");
    script.println("location.href = 'bbs.jsp'");
    script.println("</script>");
}
/*BbsDAO를 객체화시키는 동시에 getBbs함수(return값이 bbs)를 불러와서 bbsID에 
  해당하는 글 내용을 bbs에 넣는다.*/
Bbs bbs = new BbsDAO().getBbs(bbsID);
%>
- bbs.jsp에서 url에 파라메터로 보낸 bbsID를 받는다.
- bbsID가 존재하지않으면 alert띄우고 bbs.jsp로 돌려보낸다.
[view.jsp]
<table class="table table-striped" style="border: 1px solid #dddddd">
    <thead>
	<tr>
            <th colspan="3" style="background-color: #eeeeee; 
                text-align: center;">게시판 글 보기</th>
	</tr>
    </thead>
    <tbody>
	<tr>
	    <td style="width:20%;">글 제목</td>
	    <td colspan="2"><%= bbs.getBbsTitle()%> </td>
	</tr>
	<tr>
	    <td>작성자</td>
	    <td colspan="2"><%= bbs.getUserID() %> </td>
	</tr>
	<tr>
	    <td>작성일자</td>
	    <td colspan="2"><%=bbs.getBbsDate().substring(0,11) + 
                               bbs.getBbsDate().substring(11,13) +"시"    	
                               +bbs.getBbsDate().substring(14,16) + "분"%>
	</tr>
	<tr>
	    <td>내용</td>
		<td colspan="2" style="height:200px; text-align:left;"> 
        	  <%= bbs.getBbsContent().replaceAll(" ","&nbsp;")
                     .replaceAll("<", "&lt;").replaceAll(">", "&gt;")
                     .replaceAll("\n", "<br>")%></td>
	</tr>
    </tbody>
</table>
<a href="bbs.jsp" class="btn btn-primary">목록</a>
<!-- userID와 작성자가 동일한경우 수정과 삭제가 가능하도록-->
<% if(userID != null && userID.equals(bbs.getUserID())){ %>
    <a href = "update.jsp?bbsID=<%= bbsID %>" 
       class="btn btn-primary">수정</a>
    <a href = "deleteAction.jsp?bbsID=<%= bbsID %>" 
       class="btn btn-primary">삭제</a>
<%} %>
- 위에서 getBbs함수를 실행시켜 bbs에 넣었기 때문에 bbs.getBbsTitle()은 해당 글 제목이 된다.
- 작성자, 작성일자, 내용도 위와 같다.
- replaceAll() : 내용의 특수문자 처리(앞 문자열을 뒤의 문자열로 바꿈) 
- 특수문자 처리 안해주면 내용도 제대로 안나올 뿐만 아니라 xss 공격에 취약하다.
- 예를들어 제목에 <script>로 스크립트를 넣으면 그게 그대로 인식되어 적용되어 버린다.
- 특수문자 처리는 bbs.jsp의 bbsTitle부분에도 해줘야한다.
profile
개발이좋아요

0개의 댓글