1. 개요
■ 지난 포스팅 : [JSP개발] 게시판 - 글 수정
지난 포스팅에서 게시판 구현이 끝이 났고 이제는 방명록을 만들 것이다. 방명록은 위와 같이 gestbook 이란 폴더를 만들고 거기에 jsp 파일을 생성하였다. 새로 추가되는 패키지와 클래스는 위와 같다.
■ JSP
GestbookForm.jsp : 방명록 화면이다. 방명록의 경우 글 입력 부분과 목록을 보여주는 부분이 한 화면에 있다.
■ Java
Controller와 Action은 jsp.gestbook.action 패키지에 만든다.
GestbookController.java : 방명록의 Controller이다.
GestbookFormAction.java : 화면전환을 처리하는 Action. 상단에서 방명록 메뉴를 클릭 시 해당 Action이 실행되며 방명록 화면이 나타난다.
■ properties
GestbookCommand.properties : 방명록 관련 명령어를 입력해둔 설정 파일
2. 소스 코드
■ GestbookForm.jsp
먼저 WebContent 폴더 아래에 gestbook라는 폴더를 생성한다. 그리고 gestbook 폴더에 GestbookForm.jsp를 생성한다.
방명록 화면에서는 방명록 등록 부분과 방명록을 보여주는 부분이 모두 한 화면에 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>방명록</title> <style type="text/css"> #wrap { width: 700px; margin: 0 auto 0 auto; } #comment{ text-align :left; } #writeGestFrom, #listGestFrom{ text-align :center; } </style> </head> <body> <br> <b><font size="6" color="gray">방명록</font></b> <hr size="1" width="700"> <br> <div id="wrap"> <!-- 글 등록 부분 시작--> <div id="writeGestFrom"> <form name="inputform" method="post" action=""> <table width="700"> <input type="hidden" name="pro" value="ins"> <tr> <td>이름</td> <td><input type="text" name="guestbook_name"></td> <td>비밀번호</td> <td><input type="password" name="guestbook_password"></td> </tr> <tr><td colspan="4"> </td></tr> <tr> <td colspan="4"> <textarea rows="7" cols="80" name="guestbook_content"></textarea> </td> </tr> </table> <br> <input type="submit" value="등록"> </form> </div> <!-- 글 등록 부분 끝--> <br><br> <!-- 글 목록 부분 시작 --> <div id="listGestFrom"> <form method="post" name="listform"> <input type="hidden" name="pro"> <div id="comment"> <hr size="1" width="700"> <label>이름</label> <a href="#">[수정]</a> <a href="#">[삭제]</a><br> 내용 <br> <hr size="1" width="700"> </div> </form> </div> <!-- 글 목록 부분 끝 --> </div> </body> </html> | cs |
■ GestbookController.java
방명록의 Controller이다. 게시판의 BoardController와 거의 동일하다.
init 부분에서는 프로퍼티 파일의 위치를 입력해야 한다. 프로퍼티 파일은 jsp.gestbook.properties 패키지에 생성할 것이므로 해당 경로를 입력해주면 된다.
BoardController와 차이나는 부분이다. BoardController에 있던 화면전환 Action을 확인하는 부분을 삭제하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | package jsp.gestbook.action; import java.io.IOException; import java.util.Enumeration; import java.util.HashMap; import java.util.ResourceBundle; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jsp.common.action.Action; import jsp.common.action.ActionForward; public class GestbookController extends HttpServlet { private static final long serialVersionUID = 1L; private HashMap<String,Action> commandMap; /** * 최초 실행 init */ public void init(ServletConfig config) throws ServletException { loadProperties("jsp/gestbook/properties/GestbookCommand"); } /** * 프로퍼티 파일에서 키값과 클래스 정보를 추출하여 그것을 Map에 저장한다. * @param filePath 프로퍼티 파일의 경로 */ private void loadProperties(String filePath) { commandMap = new HashMap<String, Action>(); ResourceBundle rb = ResourceBundle.getBundle(filePath); Enumeration<String> actionEnum = rb.getKeys(); // 키값을 가져온다. while (actionEnum.hasMoreElements()) { // 명령어를 가져온다. String command = actionEnum.nextElement(); // 명령어에 해당하는 Action 클래스 이름을 가져온다. String className = rb.getString(command); try { Class actionClass = Class.forName(className); // 클래스 생성 Action actionInstance = (Action)actionClass.newInstance(); // 클래스의 객체를 생성 // 맵에 명령어와 Action을 담는다. commandMap.put(command, actionInstance); } catch (Exception e) { e.printStackTrace(); } } } /** * GET 방식일 경우 doGet() */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doProcess(request,response); } /** * POST 방식일 경우 doPost() */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doProcess(request,response); } /** * 명령어에 따른 해당 Action을 지정해 준다. * @param request * @param response * @throws ServletException * @throws IOException */ private void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 넘어온 커맨드를 추출하는 과정 String requestURI = request.getRequestURI(); int cmdIdx = requestURI.lastIndexOf("/") + 1; String command = requestURI.substring(cmdIdx); // URI, command 확인 // System.out.println("requestURI : "+requestURI); // System.out.println("gestbook cmd : "+command); ActionForward forward = null; Action action = null; try { // 맵에서 명령어에 해당하는 Action을 가져온다. action = commandMap.get(command); if (action == null) { System.out.println("명령어 : "+command+"는 잘못된 명령입니다."); return; } forward = action.execute(request, response); /* * 화면이동 - isRedirext() 값에 따라 sendRedirect 또는 forward를 사용 * sendRedirect : 새로운 페이지에서는 request와 response객체가 새롭게 생성된다. * forward : 현재 실행중인 페이지와 forwad에 의해 호출될 페이지는 request와 response 객체를 공유 */ if(forward != null){ if (forward.isRedirect()) { response.sendRedirect(forward.getNextPath()); } else { RequestDispatcher dispatcher = request .getRequestDispatcher(forward.getNextPath()); dispatcher.forward(request, response); } } } catch (Exception e) { e.printStackTrace(); } } // end doProcess } | cs |
■ GestbookFormAction.java
GestbookFormAction의 경우 단순히 방명록 화면을 출력해 주는 Action이다.
방명록 화면인 GestbookForm.jsp의 경로를 path로 지정해 준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package jsp.gestbook.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jsp.common.action.Action; import jsp.common.action.ActionForward; /** * 화면 전환을 처리하는 Action * */ public class GestbookFormAction implements Action { private String path = "MainForm.jsp?contentPage=gestbook/GestbookForm.jsp"; @Override public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception { ActionForward forward = new ActionForward(); forward.setRedirect(false); forward.setNextPath(path); return forward; } } | cs |
■ GestbookCommand.properties
현재는 화면전환 명령어만 등록을 해둔다.
1 2 3 4 | # Form Change GestbookForm.ge=jsp.gestbook.action.GestbookFormAction | cs |
■ Header.jsp
상단 메뉴에는 방명록 메뉴를 추가해준다.
화면 전환을 처리하는 changeView( ) 함수에 위와 같이 방명록 명령어를 등록해 둔다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>상단 영역</title> <link rel="stylesheet" href="css/bootstrap.min.css"> <style type="text/css"> #wrap{ text-align: center; width: 800px; height: 150px; } </style> <script type="text/javascript"> function changeView(value){ if(value == "0") // HOME 버튼 클릭시 첫화면으로 이동 { location.href="MainForm.do"; } else if(value == "1") // 로그인 버튼 클릭시 로그인 화면으로 이동 { location.href="LoginForm.do"; } else if(value == "2") // 회원가입 버튼 클릭시 회원가입 화면으로 이동 { location.href="JoinForm.do"; } else if(value == "3") // 로그아웃 버튼 클릭시 로그아웃 처리 { location.href="MemberLogoutAction.do"; } else if(value == "4") // 내정보 버튼 클릭시 회원정보 보여주는 화면으로 이동 { location.href="MemberInfoAction.do"; } else if(value == "5") { location.href="MemberListAction.do"; } else if(value == "6") { location.href="BoardListAction.bo"; } else if(value == "7") { location.href="GestbookForm.ge"; } } </script> </head> <body> <div id = "wrap"> <p> <button class="btn btn-success" onclick="changeView(0)">HOME</button> <!-- // 로그인 안되었을 경우 - 로그인, 회원가입 버튼을 보여준다. --> <c:if test="${sessionScope.sessionID==null}"> <button id="loginBtn" class="btn btn-primary" onclick="changeView(1)">로그인</button> <button id="joinBtn" class="btn btn-primary" onclick="changeView(2)">회원가입</button> </c:if> <!-- // 로그인 되었을 경우 - 로그아웃, 내정보 버튼을 보여준다. --> <c:if test="${sessionScope.sessionID!=null}"> <button id="logoutBtn" class="btn btn-primary" onclick="changeView(3)">로그아웃</button> <button id="updateBtn" class="btn btn-primary" onclick="changeView(4)">내정보</button> </c:if> <button id="joinBtn" class="btn btn-info" onclick="changeView(6)">게시판</button> <button id="joinBtn" class="btn btn-info" onclick="changeView(7)">방명록</button> <!-- 관리자 로그인 --> <c:if test="${sessionScope.sessionID !=null && sessionScope.sessionID=='admin'}"> <button id="memberViewBtn" class="btn btn-warning" onclick="changeView(5)">회원보기</button> </c:if> </p> </div> </body> </html> | cs |
■ web.xml
web.xml에는 방명록의 Controller인 GestbookController를 등록해준다.
그리고 명령어를 mapping 해준다. 방명록 관련 명령어는 .ge로 하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>JSP_create</display-name> <servlet> <description>Controller</description> <display-name>MemberController</display-name> <servlet-name>MemberController</servlet-name> <servlet-class>jsp.member.action.MemberController</servlet-class> </servlet> <servlet> <description>Controller</description> <display-name>BoardController</display-name> <servlet-name>BoardController</servlet-name> <servlet-class>jsp.board.action.BoardController</servlet-class> </servlet> <servlet> <description>Controller</description> <display-name>GestbookController</display-name> <servlet-name>GestbookController</servlet-name> <servlet-class>jsp.gestbook.action.GestbookController</servlet-class> </servlet> <servlet-mapping> <servlet-name>MemberController</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>BoardController</servlet-name> <url-pattern>*.bo</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>GestbookController</servlet-name> <url-pattern>*.ge</url-pattern> </servlet-mapping> <listener> <listener-class>jsp.visit.action.VisitSessionListener</listener-class> </listener> <resource-ref> <description>connection</description> <res-ref-name>jdbc/orcl</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app> | cs |
3. 실행 결과
상단 방명록 메뉴를 클릭 시 방명록 화면이 나타난다.
4. 소스코드 다운로드 (war 파일)
'코딩 > JSP' 카테고리의 다른 글
[JSP개발] 게시판 - 방명록 목록 보기 (0) | 2016.12.27 |
---|---|
[JSP개발] 게시판 - 방명록 등록 (0) | 2016.12.26 |
[JSP개발] 게시판 - 글 수정 (3) | 2016.12.23 |
[JSP개발] 게시판 - 글 삭제 (0) | 2016.12.22 |
[JSP개발] 게시판 - 답글달기(오라클 계층쿼리 적용) (4) | 2016.12.21 |