본문 바로가기

[JSP]

[JSP]11월 4일 Servlet, EL표현식, JSTL제어문을 사용해 게시판 만들기 예제(jsp 파일에 JAVA 코드 다 빼고!)

앞서 올린 게시판 예제에서 jsp파일에 있는 자바코드를 다 뽑아내서 작성해보자.

다이나믹 프로젝트 생성 후 JAVA리소스 안에 src 밑에 controller 패기키 생성. 그안에 

BoardServlet 클래스를 만들어보자.

참고로 model클래스와 dao클래스는 만들어 놓았다고 가정하고 올리겠습니다.

(dao 클래스 만드는법 http://smjava.tistory.com/39 참고 하세요~)


package controller;


import java.io.IOException;

import java.sql.Date;

import java.util.List;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import dao.BoardDao;

import model.Board;


@WebServlet("*.do")

public class BoardServlet extends HttpServlet{

public void doProc(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

req.setCharacterEncoding("UTF-8");

String uri = req.getRequestURI();

String contextPath = req.getContextPath();

String url = null;

if(uri.equals(contextPath + "/list.do"))

{

//1.필요한 로직 처리

List<Board> list = BoardDao.getInstance().selectAll();

//2-1.필요한 데이터attribute에 담고

req.setAttribute("list", list);

url = "list.jsp";

}

else if(uri.equals(contextPath + "/boardInfo.do"))

{

int id = Integer.parseInt(req.getParameter("id"));

Board board = BoardDao.getInstance().selectOne(id);

board.setHit(board.getHit() + 1);

BoardDao.getInstance().updateBoard(board);

req.setAttribute("board", board);

url = "boardInfo.jsp";

}

else if(uri.equals(contextPath + "/delete.do"))

{

int id = Integer.parseInt(req.getParameter("id"));

BoardDao.getInstance().deleteBoard(id);

resp.sendRedirect("list.do");

return;

}

else if(uri.equals(contextPath + "/writeForm.do"))

{

url = "writeForm.jsp";

}

else if(uri.equals(contextPath + "/boardAdd.do"))

{

Board board = new Board();

board.setTitle(req.getParameter("title"));

board.setWriter(req.getParameter("writer"));

board.setContent(req.getParameter("content"));

BoardDao.getInstance().insertBoard(board);

resp.sendRedirect("list.do");

return;

}

else if(uri.equals(contextPath + "/updateForm.do"))

{

int id = Integer.parseInt(req.getParameter("id"));

Board board = BoardDao.getInstance().selectOne(id);

req.setAttribute("board", board);

url = "updateForm.jsp";

}

else if(uri.equals(contextPath + "/update.do"))

{

int id = Integer.parseInt(req.getParameter("id"));

Date date = new Date(System.currentTimeMillis());

Board board = BoardDao.getInstance().selectOne(id);

board.setTitle(req.getParameter("title"));

board.setWriter(req.getParameter("writer"));

board.setContent(req.getParameter("content"));

board.setDate(date);

BoardDao.getInstance().updateBoard(board);

resp.sendRedirect("boardInfo.do?id="+id);

return;

}

//2-1.적절한 껍데기로 포워드

req.getRequestDispatcher(url).forward(req, resp);

//2-2.어딘가로 리다이렉트

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doProc(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doProc(req, resp);

}


}


get방식과 post방식 각각 처리 메소드가 따로 있어서 불편하니까 doGet, doPost와 원형이 같은 메소드를 정의 해서 각각

doProc를 호출하게 만들었습니다.


이제 jsp 파일의 자바코드를 뽑아내고, EL표현식과 JSTL라이브러리를 활용해서 작성해보자.

EL표현식은 각 종 자료형(list,map,객체)의 표현에만 집중하고, 제어구조에 대해서는 JSTL라이브러리를 활용하시면 된다.

라이브러리 파일을 받아서 WEB-INF →lib 폴더 안에 복사 붙혀놓기!

JSTL에서 제어문을 제공하는 태그는 c태그이다.

jsp태그는 원래 사용할 수 있지만 그외 태그라이브러리는 사용하고 싶으면 임포트 하셔야됩니다.

반복문 을 제공하는 c태그

c태그

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

날짜포멧은 fmt태그

fmt태그 

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


*list.jsp

<body>


<center>


<table>

<tr>

<td colspan="5" bgcolor="pink"></td>

</tr>

<tr>

<th align="center" width="100">번호</th>

<th align="center" width="300">제목</th>

<th align="center" width="200">작성자</th>

<th align="center" width="100">등록일자</th>

<th align="center" width="100">조회수</th>

</tr>

<tr>

<td colspan="5" bgcolor="pink"></td>

</tr>


<c:forEach var="board" items="${list }">

<tr>

<td align="center">${board.id }</td>

<td align="center"><a href = "/JSP_Board_Servlet/boardInfo.do?id=${board.id }">${board.title }</a></td>

<td align="center">${board.writer }</td>

<td align="center"><fmt:formatDate value="${board.date }" pattern="yyyy-MM-dd"/></td>

<td align="center">${board.hit }</td>

</tr>

</c:forEach>



<tr>

<td colspan="5" bgcolor="pink"></td>

</tr>

<tr>

<td align="right" colspan="5"><form action="writeForm.do">

<input type="submit" value="글쓰기">

</form>

</td>

</tr>

</table>

</center>


</body>


* writeForm.jsp(글쓰기)


<body>


<center>


<table>


<form action="boardAdd.do">

<tr>

<td width="800" align="center" bgcolor="skyblue">제목 : <input type="text" name="title"></td>

</tr>

<tr>

<td width="800" align="center" bgcolor="skyblue">작성자 : <input type="text" name="writer"><br></td>

</tr>

<tr>

<td width="800" align="center" bgcolor="skyblue">내용</td>

</tr>

<tr>

<td  height="400" align="center" bgcolor="skyblue"><textarea name="content" style="width: 100%; height: 100%;"></textarea></td>

</tr>

<tr>

<th align="right" bgcolor="skyblue"><input type="submit" value="확인">

<input type="button" value="취소"

  onclick="location.href='/JSP_Board_Servlet/list.do'"></th>

</tr>

</form>


</table>


</center>



</body>


*boardInfo

여기에도 fmt태그 사용하니까 임포트 해주자!

<body>


<center>


<table>

<tr>

<td colspan="2" width="800" align="center" bgcolor="skyblue">제목 :${board.title }</th>

</tr>

<tr>

<td colspan="2" width="800" align="center" bgcolor="skyblue">작성자 :${board.writer }</th>

</tr>

<tr>

<th colspan="2" width="800" align="center" bgcolor="skyblue">내용</th>

</tr>

<tr>

<th colspan="2" height="400" align="center" bgcolor="skyblue">

<textarea name="content" style="width: 100%; height: 100%;">${board.content }</textarea>

</th>

</tr>

<tr>

<td colspan="1" align="left" bgcolor="skyblue">조회수${board.hit }</td>

<td colspan="1" align="right" bgcolor="skyblue"><fmt:formatDate value="${board.date }" pattern="yyyy-MM--dd"/></td>

</tr>

<tr>

<th colspan="2" align="right" width="100">

<input type="button" value="처음으로"

  onclick="location.href='/JSP_Board_Servlet/list.do'">

  <input type="button" value="삭제"

  onclick="location.href='/JSP_Board_Servlet/delete.do?id=${board.id}'">

  <input type="button" value="수정"

  onclick="location.href='/JSP_Board_Servlet/updateForm.do?id=${board.id}'">

  </th>

 

</tr>

</table>

</center>


</body>


*updateForm


<body>

<center>

<table>


<form action="update.do">

<input type="hidden" name="id" value="${board.id }">

<tr>

<td width="800" align="center" bgcolor="skyblue">제목 : <input type="text" name="title" value="${board.title }"></td>

</tr>

<tr>

<td width="800" align="center" bgcolor="skyblue">작성자 : <input type="text" name="writer" value="${board.writer }"><br></td>

</tr>

<tr>

<td width="800" align="center" bgcolor="skyblue">내용</td>

</tr>

<tr>

<td height="400" align="center" bgcolor="skyblue"><textarea name="content" style="width: 100%; height: 100%;">${board.content }</textarea></td>

</tr>

<tr>

<th align="right" bgcolor="skyblue"><input type="submit" value="수정">

<input type="button" value="취소" onclick="history.back()"></th>

</tr>

</form>


</table>

</center>


</body>


게시판 테스트 해보실때에는

Servlet에 작성해 놓은것과 같이

실행하시고 주소창에


☆★list.do 라고 직접 입력!!!!!


이렇게 jsp파일에서 자바코드를 사용하지않고 Servlet을 사용해 구현하는 이유는

자바 개발자와 웹 디자이너의 효율적인 업무 분담을 위해서이다.

작업을 하면서 서로 영향을 받지 않게끔 jsp 에서는 표현식으로만

개발자들은 로직에 대한 구현만 함으로써 서로 영향을 안받을 수 있다.