From d8341b3e635861409ad47b2431d580a28ba4128b Mon Sep 17 00:00:00 2001 From: ksg Date: Wed, 6 Nov 2024 19:03:37 +0900 Subject: [PATCH] =?UTF-8?q?feat:=206=EC=A3=BC=EC=B0=A8=20=EB=AF=B8?= =?UTF-8?q?=EC=85=98=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/core/mvc/AbstractController.java | 18 ++++++++ src/main/java/core/mvc/Controller.java | 3 +- src/main/java/core/mvc/DispatcherServlet.java | 8 ++-- src/main/java/core/mvc/ForwardController.java | 20 +++++++-- src/main/java/core/mvc/view/JsonView.java | 24 ++++++----- src/main/java/core/mvc/view/JspView.java | 10 ++++- src/main/java/core/mvc/view/ModelAndView.java | 25 +++++++++++ src/main/java/core/mvc/view/View.java | 3 +- .../java/jwp/controller/HomeController.java | 20 +++++++-- .../qna/CreateAnswerController.java | 42 +++++++++++++++++-- .../qna/CreateQuestionController.java | 20 +++++++-- .../qna/CreateQuestionFormController.java | 21 ++++++++-- .../jwp/controller/qna/ShowQnaController.java | 21 +++++++--- .../qna/UpdateQuestionController.java | 21 ++++++++-- .../qna/UpdateQuestionFormController.java | 21 +++++++--- .../controller/user/CreateUserController.java | 19 +++++++-- .../controller/user/ListUserController.java | 22 +++++++--- .../jwp/controller/user/LoginController.java | 21 ++++++++-- .../jwp/controller/user/LogoutController.java | 19 +++++++-- .../controller/user/UpdateUserController.java | 27 ++++++++++-- .../user/UpdateUserFormController.java | 22 ++++++++-- src/main/resources/jwp.sql | 8 ++-- webapp/qna/show.jsp | 2 +- webapp/qna/updateForm.jsp | 4 +- 24 files changed, 340 insertions(+), 81 deletions(-) create mode 100644 src/main/java/core/mvc/AbstractController.java create mode 100644 src/main/java/core/mvc/view/ModelAndView.java diff --git a/src/main/java/core/mvc/AbstractController.java b/src/main/java/core/mvc/AbstractController.java new file mode 100644 index 00000000..bb985c2f --- /dev/null +++ b/src/main/java/core/mvc/AbstractController.java @@ -0,0 +1,18 @@ +package core.mvc; + +import core.mvc.view.ModelAndView; + +import java.util.Map; + +public interface AbstractController extends Controller{ + + // JspView의 경우 viewName에 따라서 어떤 경로로 forward할지, redirect를 할 지 결정한다. 따라서 인자로 viewName을 받을 수 있도록 해주었다. + ModelAndView jspView(String viewName); + + + // JsonView의 경우 model을 전달받아서 해당 모델의 정보를 모두 json 형식으로 바꿔주는 형태로 동작을 한다. + // 그러다보니 ModelAndView 객체를 생성한 후, 해당 객체 내의 model에 데이터를 삽입해주기 위해서는 ModelAndView에 삽입해 줄 데이터를 지니고 있는 + // 원본 자료구조가 필요했다. 따라서 인자로 해당 데이터를 가지고 있는 Map을 전달해줄 수 있도록 해주었다. + ModelAndView jsonView(Map model); + +} diff --git a/src/main/java/core/mvc/Controller.java b/src/main/java/core/mvc/Controller.java index 557832a5..fbe3dfcf 100644 --- a/src/main/java/core/mvc/Controller.java +++ b/src/main/java/core/mvc/Controller.java @@ -1,10 +1,11 @@ package core.mvc; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public interface Controller { - View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception; + ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception; } diff --git a/src/main/java/core/mvc/DispatcherServlet.java b/src/main/java/core/mvc/DispatcherServlet.java index bc1b8ada..b3d6bdfc 100644 --- a/src/main/java/core/mvc/DispatcherServlet.java +++ b/src/main/java/core/mvc/DispatcherServlet.java @@ -1,5 +1,6 @@ package core.mvc; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import javax.servlet.RequestDispatcher; @@ -25,11 +26,8 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) throws String url = req.getRequestURI(); Controller controller = requestMapping.getController(url); try { - View view = controller.execute(req, resp); - if (view == null) { - return; - } - view.render(req, resp); + ModelAndView mav = controller.execute(req, resp); + mav.render(req, resp); } catch (Exception e) { System.out.println(e.getMessage()); throw new ServletException(e.getMessage()); diff --git a/src/main/java/core/mvc/ForwardController.java b/src/main/java/core/mvc/ForwardController.java index 5ef6c906..1bf80724 100644 --- a/src/main/java/core/mvc/ForwardController.java +++ b/src/main/java/core/mvc/ForwardController.java @@ -1,12 +1,15 @@ package core.mvc; +import core.mvc.view.JsonView; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Map; -public class ForwardController implements Controller { +public class ForwardController implements AbstractController { private final String forwardUrl; @@ -17,8 +20,19 @@ public ForwardController(String forwardUrl) { } } + // forward 수정 @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { - return new JspView(forwardUrl); + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + return jspView(forwardUrl); + } + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } diff --git a/src/main/java/core/mvc/view/JsonView.java b/src/main/java/core/mvc/view/JsonView.java index 8d981fcc..0f6a50bc 100644 --- a/src/main/java/core/mvc/view/JsonView.java +++ b/src/main/java/core/mvc/view/JsonView.java @@ -11,21 +11,23 @@ public class JsonView implements View{ @Override - public void render(HttpServletRequest request, HttpServletResponse response) throws Exception { + public void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); response.setContentType("application/json;charset=utf-8"); PrintWriter out = response.getWriter(); - out.print(objectMapper.writeValueAsString(createModel(request))); - } - private static Map createModel(HttpServletRequest request) { - Enumeration names = request.getParameterNames(); - Map model = new HashMap<>(); - while (names.hasMoreElements()) { - String name = names.nextElement(); - model.put(name, request.getParameter(name)); - } - return model; + // model -> JSON으로 변환 + out.print(objectMapper.writeValueAsString(model)); } +// private static Map createModel(HttpServletRequest request) { +// Enumeration names = request.getParameterNames(); +// Map model = new HashMap<>(); +// while (names.hasMoreElements()) { +// String name = names.nextElement(); +// model.put(name, request.getParameter(name)); +// } +// return model; +// } + } diff --git a/src/main/java/core/mvc/view/JspView.java b/src/main/java/core/mvc/view/JspView.java index 9cd3e2d7..4ca5a5f1 100644 --- a/src/main/java/core/mvc/view/JspView.java +++ b/src/main/java/core/mvc/view/JspView.java @@ -3,23 +3,29 @@ import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Map; public class JspView implements View { private final String viewName; private static final String REDIRECT_PREFIX = "redirect:"; - public JspView(String viewName) { this.viewName = viewName; } @Override - public void render(HttpServletRequest request, HttpServletResponse response) throws Exception { + public void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { + if (viewName.startsWith(REDIRECT_PREFIX)) { response.sendRedirect(viewName.substring(REDIRECT_PREFIX.length())); return; } + + for (Map.Entry entry : model.entrySet()) { + request.setAttribute(entry.getKey(), entry.getValue()); + } + RequestDispatcher rd = request.getRequestDispatcher(viewName); rd.forward(request, response); } diff --git a/src/main/java/core/mvc/view/ModelAndView.java b/src/main/java/core/mvc/view/ModelAndView.java new file mode 100644 index 00000000..c3befe2b --- /dev/null +++ b/src/main/java/core/mvc/view/ModelAndView.java @@ -0,0 +1,25 @@ +package core.mvc.view; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + +public class ModelAndView { + + View view; + Map model = new HashMap<>(); + + public ModelAndView(View view) { + this.view = view; + } + + public ModelAndView addObject(String attributeName, Object attributeValue) { + model.put(attributeName, attributeValue); + return this; + } + + public void render(HttpServletRequest req, HttpServletResponse resp) throws Exception { + view.render(model, req, resp); + } +} diff --git a/src/main/java/core/mvc/view/View.java b/src/main/java/core/mvc/view/View.java index 9d603215..8625c5ad 100644 --- a/src/main/java/core/mvc/view/View.java +++ b/src/main/java/core/mvc/view/View.java @@ -2,7 +2,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Map; public interface View { - void render(HttpServletRequest request, HttpServletResponse response) throws Exception; + void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception; } diff --git a/src/main/java/jwp/controller/HomeController.java b/src/main/java/jwp/controller/HomeController.java index f4cf65f6..8d06756e 100644 --- a/src/main/java/jwp/controller/HomeController.java +++ b/src/main/java/jwp/controller/HomeController.java @@ -1,7 +1,9 @@ package jwp.controller; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.QuestionDao; import jwp.model.Question; @@ -9,15 +11,25 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; -public class HomeController implements Controller { +public class HomeController implements AbstractController { private final QuestionDao questionDao = new QuestionDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { List questions = questionDao.findAll(); - req.setAttribute("questions", questions); - return new JspView("/home.jsp"); + return jspView("/home.jsp").addObject("questions", questions); + } + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } diff --git a/src/main/java/jwp/controller/qna/CreateAnswerController.java b/src/main/java/jwp/controller/qna/CreateAnswerController.java index b5edbe25..2cf028a9 100644 --- a/src/main/java/jwp/controller/qna/CreateAnswerController.java +++ b/src/main/java/jwp/controller/qna/CreateAnswerController.java @@ -1,7 +1,9 @@ package jwp.controller.qna; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JsonView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.AnswerDao; import jwp.dao.QuestionDao; @@ -10,14 +12,17 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; -public class CreateAnswerController implements Controller { +public class CreateAnswerController implements AbstractController { private final AnswerDao answerDao = new AnswerDao(); private final QuestionDao questionDao = new QuestionDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { System.out.println("[CreateAnswerController] 실행"); int questionId = Integer.parseInt(req.getParameter("questionId")); Answer answer = new Answer(questionId, @@ -30,8 +35,37 @@ public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exc question.increaseCountOfAnswer(); questionDao.updateCountOfAnswer(question); - req.setAttribute("answer", savedAnswer); + Map model = new HashMap<>(); + model.put("answer", savedAnswer); - return new JsonView(); + /* + 이 컨트롤러에서는 JsonView를 활용해야했다. 따라서 jsonView() 메소드를 사용해주었다. + 이 때는 ModelAndView를 전달할 때, 해당 ModelAndView의 model을 통해 savedAnswer를 view로 넘겨주어야했다. + 그러다보니 ModelAndView 의 model에 데이터를 삽입해주는 동작이 필요했는데, 그 동작을 jsonView() 메소드를 통해 수행하고자 하다보니 + 새로운 Map을 만든 후, 해당 Map에 attributeName, attributeValue를 저장하고 그 Map을 jsonView() 메소드의 인자로 전달해주었다. + jsonView() 메소드에서는 인자로 넘어온 Map에서 데이터를 하나하나 꺼내어 ModelAndView 객체 내부의 model에 저장해주었다. + 이 ModelAndView 객체 내부의 model에 저장된 데이터들은 실제로 JsonView 의 render()에 의해서 JSON 데이터로 추후 변하게된다. + */ + return jsonView(model); + } + + @Override + public ModelAndView jspView(String viewName) { + return null; + } + + @Override + public ModelAndView jsonView(Map model) { + ModelAndView mav = new ModelAndView(new JsonView()); + + Iterator keys = model.keySet().iterator(); + + while (keys.hasNext()) { + String key = keys.next(); + Object value = model.get(key); + mav.addObject(key, value); + } + + return mav; } } diff --git a/src/main/java/jwp/controller/qna/CreateQuestionController.java b/src/main/java/jwp/controller/qna/CreateQuestionController.java index b706125b..28a9fddd 100644 --- a/src/main/java/jwp/controller/qna/CreateQuestionController.java +++ b/src/main/java/jwp/controller/qna/CreateQuestionController.java @@ -1,20 +1,23 @@ package jwp.controller.qna; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.QuestionDao; import jwp.model.Question; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Map; -public class CreateQuestionController implements Controller { +public class CreateQuestionController implements AbstractController { private final QuestionDao questionDao = new QuestionDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { Question question = new Question( req.getParameter("writer"), req.getParameter("title"), @@ -22,6 +25,17 @@ public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exc 0); Question savedQuestion = questionDao.insert(question); System.out.println("saved question id= " + savedQuestion.getQuestionId()); - return new JspView("redirect:/"); + return jspView("redirect:/"); + } + + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } diff --git a/src/main/java/jwp/controller/qna/CreateQuestionFormController.java b/src/main/java/jwp/controller/qna/CreateQuestionFormController.java index b29d2f7a..9b06b037 100644 --- a/src/main/java/jwp/controller/qna/CreateQuestionFormController.java +++ b/src/main/java/jwp/controller/qna/CreateQuestionFormController.java @@ -1,22 +1,35 @@ package jwp.controller.qna; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.util.UserSessionUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.util.Map; -public class CreateQuestionFormController implements Controller { +public class CreateQuestionFormController implements AbstractController { @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { HttpSession session = req.getSession(); if (UserSessionUtils.isLogined(session)) { // 회원만 질문 등록 가능 - return new JspView("/qna/form.jsp"); + return jspView("/qna/form.jsp"); } - return new JspView("redirect:/user/loginForm"); + return jspView("redirect:/user/loginForm"); + } + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } diff --git a/src/main/java/jwp/controller/qna/ShowQnaController.java b/src/main/java/jwp/controller/qna/ShowQnaController.java index e6a85deb..2f31dee3 100644 --- a/src/main/java/jwp/controller/qna/ShowQnaController.java +++ b/src/main/java/jwp/controller/qna/ShowQnaController.java @@ -1,7 +1,9 @@ package jwp.controller.qna; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.AnswerDao; import jwp.dao.QuestionDao; @@ -11,19 +13,28 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; -public class ShowQnaController implements Controller { +public class ShowQnaController implements AbstractController { private final QuestionDao questionDao = new QuestionDao(); private final AnswerDao answerDao = new AnswerDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { String questionId = req.getParameter("questionId"); Question question = questionDao.findByQuestionId(Integer.parseInt(questionId)); List answers = answerDao.findAllByQuestionId(question.getQuestionId()); - req.setAttribute("question", question); - req.setAttribute("answers", answers); - return new JspView("/qna/show.jsp"); + return jspView("/qna/show.jsp").addObject("question", question).addObject("answers", answers); + } + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } diff --git a/src/main/java/jwp/controller/qna/UpdateQuestionController.java b/src/main/java/jwp/controller/qna/UpdateQuestionController.java index 7dd135b3..277a48fb 100644 --- a/src/main/java/jwp/controller/qna/UpdateQuestionController.java +++ b/src/main/java/jwp/controller/qna/UpdateQuestionController.java @@ -1,7 +1,9 @@ package jwp.controller.qna; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.QuestionDao; import jwp.model.Question; @@ -11,16 +13,17 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.util.Map; -public class UpdateQuestionController implements Controller { +public class UpdateQuestionController implements AbstractController { private final QuestionDao questionDao = new QuestionDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { HttpSession session = req.getSession(); if (!UserSessionUtils.isLogined(session)) { - return new JspView("redirect:/users/loginForm"); + return jspView("redirect:/users/loginForm"); } User user = UserSessionUtils.getUserFromSession(session); @@ -32,6 +35,16 @@ public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exc question.updateTitleAndContents(req.getParameter("title"), req.getParameter("contents")); questionDao.update(question); - return new JspView("redirect:/"); + return jspView("redirect:/"); + } + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } diff --git a/src/main/java/jwp/controller/qna/UpdateQuestionFormController.java b/src/main/java/jwp/controller/qna/UpdateQuestionFormController.java index 78126345..1d1088cf 100644 --- a/src/main/java/jwp/controller/qna/UpdateQuestionFormController.java +++ b/src/main/java/jwp/controller/qna/UpdateQuestionFormController.java @@ -1,7 +1,9 @@ package jwp.controller.qna; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.QuestionDao; import jwp.model.Question; @@ -11,17 +13,18 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.util.Map; -public class UpdateQuestionFormController implements Controller { +public class UpdateQuestionFormController implements AbstractController { private final QuestionDao questionDao = new QuestionDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { HttpSession session = req.getSession(); if (!UserSessionUtils.isLogined(session)) { // 회원만 질문 등록 가능 - return new JspView("redirect:/user/loginForm"); + return jspView("redirect:/user/loginForm"); } String questionId = req.getParameter("questionId"); Question question = questionDao.findByQuestionId(Integer.parseInt(questionId)); @@ -29,8 +32,16 @@ public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exc if (!question.isSameUser(user)) { throw new IllegalArgumentException(); } - req.setAttribute("question", question); - return new JspView("/qna/updateForm.jsp"); + return jspView("/qna/updateForm.jsp").addObject("question", question); } + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; + } } diff --git a/src/main/java/jwp/controller/user/CreateUserController.java b/src/main/java/jwp/controller/user/CreateUserController.java index 235aa410..23fc41bc 100644 --- a/src/main/java/jwp/controller/user/CreateUserController.java +++ b/src/main/java/jwp/controller/user/CreateUserController.java @@ -1,26 +1,39 @@ package jwp.controller.user; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.UserDao; import jwp.model.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Map; -public class CreateUserController implements Controller { +public class CreateUserController implements AbstractController { private final UserDao userDao = new UserDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { User user = new User(req.getParameter("userId"), req.getParameter("password"), req.getParameter("name"), req.getParameter("email")); userDao.insert(user); System.out.println("user 회원가입 완료"); - return new JspView("redirect:/user/list"); + return jspView("redirect:/user/list"); + } + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } \ No newline at end of file diff --git a/src/main/java/jwp/controller/user/ListUserController.java b/src/main/java/jwp/controller/user/ListUserController.java index d65dd664..0346be6b 100644 --- a/src/main/java/jwp/controller/user/ListUserController.java +++ b/src/main/java/jwp/controller/user/ListUserController.java @@ -1,7 +1,9 @@ package jwp.controller.user; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.UserDao; import jwp.util.UserSessionUtils; @@ -9,18 +11,28 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.util.Map; -public class ListUserController implements Controller { +public class ListUserController implements AbstractController { private final UserDao userDao = new UserDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { HttpSession session = req.getSession(); if (UserSessionUtils.isLogined(session)) { - req.setAttribute("users", userDao.findAll()); - return new JspView("/user/list.jsp"); + return jspView("/user/list.jsp").addObject("users", userDao.findAll()); } - return new JspView("redirect:/user/loginForm"); + return jspView("redirect:/user/loginForm"); + } + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } \ No newline at end of file diff --git a/src/main/java/jwp/controller/user/LoginController.java b/src/main/java/jwp/controller/user/LoginController.java index 75c7e0be..b672a2c1 100644 --- a/src/main/java/jwp/controller/user/LoginController.java +++ b/src/main/java/jwp/controller/user/LoginController.java @@ -1,7 +1,9 @@ package jwp.controller.user; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.UserDao; import jwp.model.User; @@ -9,13 +11,14 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.util.Map; -public class LoginController implements Controller { +public class LoginController implements AbstractController { private final UserDao userDao = new UserDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { HttpSession session = req.getSession(); String userId = req.getParameter("userId"); String password = req.getParameter("password"); @@ -25,8 +28,18 @@ public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exc if (user != null && user.isSameUser(loginUser)) { session.setAttribute("user", user); - return new JspView("redirect:/"); + return jspView("redirect:/"); } - return new JspView("redirect:/user/loginFailed"); + return jspView("redirect:/user/loginFailed"); + } + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } diff --git a/src/main/java/jwp/controller/user/LogoutController.java b/src/main/java/jwp/controller/user/LogoutController.java index 06f5c451..53d52eef 100644 --- a/src/main/java/jwp/controller/user/LogoutController.java +++ b/src/main/java/jwp/controller/user/LogoutController.java @@ -1,19 +1,32 @@ package jwp.controller.user; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.util.Map; -public class LogoutController implements Controller { +public class LogoutController implements AbstractController { @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { HttpSession session = req.getSession(); session.removeAttribute("user"); - return new JspView("redirect:/"); + return jspView("redirect:/"); + } + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } diff --git a/src/main/java/jwp/controller/user/UpdateUserController.java b/src/main/java/jwp/controller/user/UpdateUserController.java index 857278c9..ce58c09d 100644 --- a/src/main/java/jwp/controller/user/UpdateUserController.java +++ b/src/main/java/jwp/controller/user/UpdateUserController.java @@ -1,26 +1,47 @@ package jwp.controller.user; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.UserDao; import jwp.model.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.util.Map; -public class UpdateUserController implements Controller { +public class UpdateUserController implements AbstractController { private final UserDao userDao = new UserDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { User modifiedUser = new User( req.getParameter("userId"), req.getParameter("password"), req.getParameter("name"), req.getParameter("email")); userDao.update(modifiedUser); - return new JspView("redirect:/user/list"); + + HttpSession session = req.getSession(); + + session.removeAttribute("user"); + + session.setAttribute("user", modifiedUser); + + return jspView("redirect:/user/list"); + } + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } diff --git a/src/main/java/jwp/controller/user/UpdateUserFormController.java b/src/main/java/jwp/controller/user/UpdateUserFormController.java index b2506208..0491fc36 100644 --- a/src/main/java/jwp/controller/user/UpdateUserFormController.java +++ b/src/main/java/jwp/controller/user/UpdateUserFormController.java @@ -1,7 +1,9 @@ package jwp.controller.user; +import core.mvc.AbstractController; import core.mvc.Controller; import core.mvc.view.JspView; +import core.mvc.view.ModelAndView; import core.mvc.view.View; import jwp.dao.UserDao; import jwp.model.User; @@ -9,13 +11,14 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.util.Map; -public class UpdateUserFormController implements Controller { +public class UpdateUserFormController implements AbstractController { private final UserDao userDao = new UserDao(); @Override - public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { + public ModelAndView execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { String userId = req.getParameter("userId"); // 수정되는 user User user = userDao.findByUserId(userId); @@ -24,9 +27,20 @@ public View execute(HttpServletRequest req, HttpServletResponse resp) throws Exc if (user != null && value != null) { if (user.equals(value)) { // 수정되는 user와 수정하는 user가 동일한 경우 - return new JspView("/user/updateForm.jsp"); + return jspView("/user/updateForm.jsp"); } } - return new JspView("redirect:/"); + return jspView("redirect:/"); + } + + + @Override + public ModelAndView jspView(String viewName) { + return new ModelAndView(new JspView(viewName)); + } + + @Override + public ModelAndView jsonView(Map model) { + return null; } } \ No newline at end of file diff --git a/src/main/resources/jwp.sql b/src/main/resources/jwp.sql index 58ea3203..13c39e62 100644 --- a/src/main/resources/jwp.sql +++ b/src/main/resources/jwp.sql @@ -38,26 +38,26 @@ INSERT INTO QUESTIONS (writer, title, contents, createdDate, countOfAnswer) VALU ('이영선', '쿠잇 4기 여러분 환영합니다!', '한 학기 동안 유익한 시간이 되셨으면 좋겠습니다! 모두 화이팅!!!', - CURRENT_TIMESTAMP(), 0); + CURRENT_TIMESTAMP(), 1); INSERT INTO QUESTIONS (writer, title, contents, createdDate, countOfAnswer) VALUES ('함형주', '저는 회식이 너무 좋아요', '회식을 하면 저를 꼭 불러주세요', - CURRENT_TIMESTAMP(), 0); + CURRENT_TIMESTAMP(), 1); INSERT INTO QUESTIONS (writer, title, contents, createdDate, countOfAnswer) VALUES ('이윤정', '저는 객체지향 마스터에요!', '오브젝트란 책이 저의 최애 책이랍니다~^^ 여러분의 최애 책은 무엇인가요?', - CURRENT_TIMESTAMP(), 0); + CURRENT_TIMESTAMP(), 1); INSERT INTO QUESTIONS (writer, title, contents, createdDate, countOfAnswer) VALUES ('조하상', '저는 진행 마스터입니다!', '엠티 때 제가 진행할 예정이니 많이 기대해주세요! 엠티도 많관부~', - CURRENT_TIMESTAMP(), 0); + CURRENT_TIMESTAMP(), 1); INSERT INTO ANSWERS (writer, contents, createdDate, questionId) VALUES diff --git a/webapp/qna/show.jsp b/webapp/qna/show.jsp index 360a47c2..570e1b3f 100644 --- a/webapp/qna/show.jsp +++ b/webapp/qna/show.jsp @@ -34,7 +34,7 @@
  • 수정 + href="/qna/updateForm?questionId=${question.questionId}">수정
  • - - ${question.writer} + +