앞서 올린 게시판 예제에서 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 에서는 표현식으로만
개발자들은 로직에 대한 구현만 함으로써 서로 영향을 안받을 수 있다.
'[JSP]' 카테고리의 다른 글
[JSP]11월 4일 EL표현식과 JSTL 제어문(taglib) (0) | 2015.11.04 |
---|---|
[JSP]11월 2일 게시판 만들기 예제( 읽고,쓰고,삭제,수정 기능이 담긴 게시판) (0) | 2015.11.03 |
[JSP] 10월 29일 세션(session) (0) | 2015.10.30 |
[JSP]10월 28일 JSP에서 DB(데이터베이스)에 저장하기 예제. (0) | 2015.10.30 |
[JSP]10월 28일 CookieBox 만들기예제 (0) | 2015.10.30 |