- [JSP] 51. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (10)2024년 07월 11일
- Song hyun
- 작성자
- 2024.07.11.:41
728x90반응형[JSP] 51. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (10)
package com.tenco.controller; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import java.io.IOException; import java.io.PrintWriter; import java.security.Principal; import java.util.List; import com.tenco.model.TodoDAO; import com.tenco.model.TodoDAOImpl; import com.tenco.model.TodoDTO; import com.tenco.model.UserDTO; // .../mvc/todo/xxx @WebServlet("/todo/*") public class TodoController extends HttpServlet { private static final long serialVersionUID = 1L; private TodoDAO todoDAO; public TodoController() { todoDAO=new TodoDAOImpl(); } // http://localhost:8080/mvc/todo/todoForm // http://localhost:8080/mvc/todo/form protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session=request.getSession(); UserDTO principal=(UserDTO)session.getAttribute("principal"); String action = request.getPathInfo(); System.out.println("action : "+action); switch (action) { case "/todoForm": { todoFormPage(request,response); break; } case "/list": { todoListPage(request,response,principal.getId()); break; } case "/detail": { todoDatailPage(request,response,principal.getId()); break; } case "/delete ": { deleteTodo(request,response,principal.getId()); break; } default: response.sendError(HttpServletResponse.SC_NOT_FOUND); break; } } /** * todo 삭제 기능 * @param request * @param response * @param principalId * @throws IOException */ private void deleteTodo(HttpServletRequest request, HttpServletResponse response, int principalId) throws IOException { try { System.out.println("여기서 오류가 발생하는 경우가 있다고?!"); int todoId = Integer.parseInt(request.getParameter("id")); todoDAO.deleteTodo(todoId, principalId); } catch (Exception e) { response.sendRedirect(request.getContextPath()+"/todo/list?error=invalid"); } response.sendRedirect(request.getContextPath()+"/todo/list"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO - 수정 예정 HttpSession session=request.getSession(); UserDTO principal=(UserDTO)session.getAttribute("principal"); String action = request.getPathInfo(); // principal -- null이라면 ==> 로그인 페이지 이동 처리 // 인증 검사 if(principal==null) { // 로그인을 안 한 상태 response.sendRedirect("/mvc/user/signIn?message=invalid"); return; } switch(action) { case "/add" : addTodo(response,request,principal.getId()); break; case "/update" : updateTodo(response,request,principal.getId()); break; default: response.sendError(HttpServletResponse.SC_NOT_FOUND); break; } } private void updateTodo(HttpServletResponse response, HttpServletRequest request, int id) { // TODO Auto-generated method stub } /** * 세션별 사용자 todo 등록 * @param response * @param request * @param principalId : 세션에 담겨 있는 UserId 값 */ private void addTodo(HttpServletResponse response, HttpServletRequest request, int principalId) throws IOException { String title=request.getParameter("title"); String description=request.getParameter("description"); String dueDate=request.getParameter("dueDate"); // checkBox는 여러개의 선택 가능한 태그 : String[] 배열로 선언했음. // 이번 checkBox는 딱 하나만 사용 중. // checkBox가 선택되지 않았으면 null을 반환하고, 체크되어 있다면 on으로 떨어진다. Boolean completed = "on".equalsIgnoreCase(request.getParameter("completed")); // completed -> true/false가 제대로 뜰까? // 테스트 코드 : System.out.println(completed); TodoDTO dto=TodoDTO.builder() .userId(principalId) .title(title) .description(description) .dueDate(dueDate) .completed(String.valueOf(completed)) .build(); todoDAO.addTodo(dto, principalId); response.sendRedirect(request.getContextPath()+"/todo/list"); } /** * todo 작성 페이지 이동 * @param request * @param response * @throws ServletException */ private void todoFormPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 로그인 한 사용자만 접근을 허용하도록 설계 request.getRequestDispatcher("/WEB-INF/views/todoForm.jsp").forward(request, response); } // http://localhost:8080/mvc/todo/list /** * 사용자별 todo 리스트 화면 이동 * @param request * @param response * @param principalId * @throws ServletException * @throws IOException */ private void todoListPage(HttpServletRequest request, HttpServletResponse response, int principalId) throws ServletException, IOException { // request.getParameter() --> URL 요청에 있어 데이터를 추출할 때 // request.getPathInfo() --> URL 요청에 있어 데이터를 추출할 때 // request.getAttribute() --> 뷰를 내릴 속성에 값을 담아서 뷰로 내릴 때 사용 // 데이터를 담아서 던질 예정(from DB 조회) System.out.println("잘 나오나!!"+principalId); List<TodoDTO> list=todoDAO.getTodosByUserId(principalId); request.setAttribute("list", list); // todoList.jsp 페이지로 내부에서 이동 처리 request.getRequestDispatcher("/WEB-INF/views/todoList.jsp").forward(request, response); } /** * 상세 보기 화면 * @param request * @param response * @param principalId * @throws IOException */ // http://localhost:8080/mvc/todo/detail?id=1 private void todoDatailPage(HttpServletRequest request, HttpServletResponse response, int principalId) throws IOException { //detail?id=8 try { int todoId=Integer.parseInt(request.getParameter("id")); // todo - pk - 1, 3, 5 는 야스오가 작성. // todo - pk - 2, 4, 6 은 홍길동이 작성. TodoDTO dto=todoDAO.getTodoById(todoId); // dto - userId System.out.println("시작!"); // 세션에서 정보를 긁어, userId와 비교해볼 수 있다. if(dto.getUserId()==principalId) { // 상세보기 화면으로 이동 처리 System.out.println("vvvvv"); request.setAttribute("todo", dto); request.getRequestDispatcher("/WEB-INF/views/todoDetail.jsp").forward(request, response); } else { // 권한이 없습니다. System.out.println("aaaaa"); response.setContentType("text/html; charset=UTF-8"); PrintWriter out=response.getWriter(); out.println("<script> alert('권한이 없습니다.'); </script>"); } } catch (Exception e) { response.sendRedirect(request.getContextPath()+"/todo/list?error=invalid"); } } }
<%@page import="java.util.Date"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@page import="com.tenco.model.TodoDTO"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>할 일 목록</title> <link rel="stylesheet" type="text/css" href="../css/styles.css"> </head> <body> <% List<TodoDTO> todos = (List<TodoDTO>)request.getAttribute("list"); if(todos != null && !todos.isEmpty()){ %> <h1>할 일 목록</h1> <a href="todoForm">새 할 일 추가</a> <table border="1"> <tr> <th>제목</th> <th>설명</th> <th>마감일</th> <th>완료 여부</th> <th>(액션-버튼)</th> </tr> <% for(TodoDTO todo : todos) {%> <tr> <td><%= todo.getTitle() %></td> <td><%= todo.getDescription() %></td> <td><%= todo.getDueDate() %></td> <td><%= todo.completedToString() == "true" ? "완료" : "미완료" %></td> <td><a href="todo/detail?id=<%= todo.getId() %>">상세보기</a> <form action="mvc/todo/delete" method="GET"> <input type="hidden" name="id" value="<%=todo.getId()%>"> <button type="submit">삭제</button> </form> </td> </tr> <% } %> </table> <%} else { %> <hr> <p>등록된 할 일이 없습니다.</p> <% } %> </body> </html>
728x90반응형'JSP > Todo 리스트 만들기' 카테고리의 다른 글
[JSP] 50. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (9) (0) 2024.07.11 [JSP] 49. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (8) (0) 2024.07.10 [JSP] 48. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (7) (0) 2024.07.10 [JSP] 47. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (6) (0) 2024.07.10 [JSP] 46. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (5) (0) 2024.07.09 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)