Skip to content

Commit

Permalink
[MVC 구현하기 - 3단계] 애쉬(정설희) 미션 제출합니다. (#598)
Browse files Browse the repository at this point in the history
* refactor: package 이름 인식 못하는 문제 해결

* refactor: JspView 구현

* feat: JsonView 구현

* feat: legacy MVC 제거

* refactor: DispatcherServlet mvc 모듈로 이동

* remove: 레거시 코드 제거

* feat: UserController 추가

* feat: ForwardController 추가

* refactor: DispatcherServletInitializer AnnotationMapping 파라미터 제거

* refactor: DispatcherServletInitializer init 제거

* refactor: login/logout/register 페이지 연결

* refactor: jsonView에서 converToJson활용하도록 수정
  • Loading branch information
xxeol2 authored Sep 27, 2023
1 parent b6a02ab commit a026beb
Show file tree
Hide file tree
Showing 22 changed files with 500 additions and 500 deletions.
24 changes: 0 additions & 24 deletions app/src/main/java/com/techcourse/ControllerHandlerAdapter.java

This file was deleted.

61 changes: 0 additions & 61 deletions app/src/main/java/com/techcourse/DispatcherServlet.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import web.org.springframework.web.WebApplicationInitializer;
import webmvc.org.springframework.web.servlet.mvc.tobe.AnnotationHandlerMapping;
import webmvc.org.springframework.web.servlet.mvc.tobe.DispatcherServlet;
import webmvc.org.springframework.web.servlet.mvc.tobe.HandlerExecutionHandlerAdapter;

/**
* Base class for {@link WebApplicationInitializer}
* implementations that register a {@link DispatcherServlet} in the servlet context.
* Base class for {@link WebApplicationInitializer} implementations that register a {@link DispatcherServlet} in the
* servlet context.
*/
public class DispatcherServletInitializer implements WebApplicationInitializer {

Expand All @@ -18,11 +21,12 @@ public class DispatcherServletInitializer implements WebApplicationInitializer {
@Override
public void onStartup(final ServletContext servletContext) {
final var dispatcherServlet = new DispatcherServlet();

dispatcherServlet.addHandlerMapping(new AnnotationHandlerMapping());
dispatcherServlet.addHandlerAdapter(new HandlerExecutionHandlerAdapter());
final var registration = servletContext.addServlet(DEFAULT_SERVLET_NAME, dispatcherServlet);
if (registration == null) {
throw new IllegalStateException("Failed to register servlet with name '" + DEFAULT_SERVLET_NAME + "'. " +
"Check if there is another servlet registered under the same name.");
"Check if there is another servlet registered under the same name.");
}

registration.setLoadOnStartup(1);
Expand Down
41 changes: 0 additions & 41 deletions app/src/main/java/com/techcourse/ManualHandlerMapping.java

This file was deleted.

20 changes: 20 additions & 0 deletions app/src/main/java/com/techcourse/controller/ForwardController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.techcourse.controller;

import context.org.springframework.stereotype.Controller;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import web.org.springframework.web.bind.annotation.RequestMapping;
import web.org.springframework.web.bind.annotation.RequestMethod;
import webmvc.org.springframework.web.servlet.ModelAndView;
import webmvc.org.springframework.web.servlet.view.JspView;

@Controller
@RequestMapping("/")
public class ForwardController {


@RequestMapping(method = RequestMethod.GET)
public ModelAndView getLoginView(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
return new ModelAndView(new JspView("/index.jsp"));
}
}
40 changes: 30 additions & 10 deletions app/src/main/java/com/techcourse/controller/LoginController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,48 @@

import com.techcourse.domain.User;
import com.techcourse.repository.InMemoryUserRepository;
import context.org.springframework.stereotype.Controller;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import webmvc.org.springframework.web.servlet.mvc.asis.Controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import web.org.springframework.web.bind.annotation.RequestMapping;
import web.org.springframework.web.bind.annotation.RequestMethod;
import webmvc.org.springframework.web.servlet.ModelAndView;
import webmvc.org.springframework.web.servlet.view.JspView;

public class LoginController implements Controller {
@Controller
@RequestMapping("/login")
public class LoginController {

private static final Logger log = LoggerFactory.getLogger(LoginController.class);

@Override
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView getLoginView(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
return UserSession.getUserFrom(req.getSession())
.map(user -> {
log.info("logged in {}", user.getAccount());
return convertToView("redirect:/index.jsp");
})
.orElse(convertToView("/login.jsp"));
}

private ModelAndView convertToView(String viewName) {
return new ModelAndView(new JspView(viewName));
}

@RequestMapping(method = RequestMethod.POST)
public ModelAndView login(final HttpServletRequest req, final HttpServletResponse res) {
if (UserSession.isLoggedIn(req.getSession())) {
return "redirect:/index.jsp";
return convertToView("redirect:/index.jsp");
}

return InMemoryUserRepository.findByAccount(req.getParameter("account"))
.map(user -> {
log.info("User : {}", user);
return login(req, user);
})
.orElse("redirect:/401.jsp");
.map(user -> {
log.info("User : {}", user);
return convertToView(login(req, user));
})
.orElse(convertToView("redirect:/401.jsp"));
}

private String login(final HttpServletRequest request, final User user) {
Expand Down

This file was deleted.

21 changes: 16 additions & 5 deletions app/src/main/java/com/techcourse/controller/LogoutController.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
package com.techcourse.controller;

import context.org.springframework.stereotype.Controller;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import webmvc.org.springframework.web.servlet.mvc.asis.Controller;
import web.org.springframework.web.bind.annotation.RequestMapping;
import web.org.springframework.web.bind.annotation.RequestMethod;
import webmvc.org.springframework.web.servlet.ModelAndView;
import webmvc.org.springframework.web.servlet.view.JspView;

public class LogoutController implements Controller {
@Controller
@RequestMapping("/logout")

@Override
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
public class LogoutController {

@RequestMapping(method = RequestMethod.GET)
public ModelAndView execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
final var session = req.getSession();
session.removeAttribute(UserSession.SESSION_KEY);
return "redirect:/";
return convertToView("redirect:/");
}

private ModelAndView convertToView(String viewName) {
return new ModelAndView(new JspView(viewName));
}
}
32 changes: 32 additions & 0 deletions app/src/main/java/com/techcourse/controller/UserController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.techcourse.controller;

import com.techcourse.domain.User;
import com.techcourse.repository.InMemoryUserRepository;
import context.org.springframework.stereotype.Controller;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import web.org.springframework.web.bind.annotation.RequestMapping;
import web.org.springframework.web.bind.annotation.RequestMethod;
import webmvc.org.springframework.web.servlet.ModelAndView;
import webmvc.org.springframework.web.servlet.view.JsonView;

@Controller
public class UserController {

private static final Logger log = LoggerFactory.getLogger(UserController.class);

@RequestMapping(value = "/api/user", method = RequestMethod.GET)
public ModelAndView show(HttpServletRequest request, HttpServletResponse response) {
final String account = request.getParameter("account");
log.debug("user id : {}", account);

final ModelAndView modelAndView = new ModelAndView(new JsonView());
final User user = InMemoryUserRepository.findByAccount(account)
.orElseThrow();

modelAndView.addObject("user", user);
return modelAndView;
}
}
Loading

0 comments on commit a026beb

Please sign in to comment.