Skip to content

Commit 018aaf5

Browse files
authored
[MVC 구현 - 3단계] 베로(김은솔) 미션 제출합니다. (#553)
* refactor: 필드 타입을 배열로 변경 * feat: JsonView, JspView 구현 * refactor: 팩토리 클래스 삭제 * feat: ApplicationContext 로 의존관계 로드하도록 기능 추가 * refactor: 레거시 코드 리팩토링 * refactor: 레거시 코드 리팩토링 * refactor: ViewResolver 삭제 및 레거시 컨트롤러 리팩터링 * chore: 알맞는 패키지 이동 * test: ApplicationContext 에서 빈을 가져오도록 변경 * fix: 올바른 패키지로 이동 * refactor: 사용하지 않는 메서드 삭제 * refactor: ObjectMapper 와 JsonView 통합 * refactor: 생성자 파라미터 가변인자로 변경
1 parent de6c578 commit 018aaf5

31 files changed

+352
-290
lines changed

app/src/main/java/com/techcourse/DispatcherServletInitializer.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,33 @@
11
package com.techcourse;
22

3+
import context.org.springframework.context.ApplicationContext;
34
import jakarta.servlet.ServletContext;
45
import org.slf4j.Logger;
56
import org.slf4j.LoggerFactory;
67
import web.org.springframework.web.WebApplicationInitializer;
8+
import webmvc.org.springframework.web.servlet.DispatcherServlet;
79

810
/**
9-
* Base class for {@link WebApplicationInitializer}
10-
* implementations that register a {@link DispatcherServlet} in the servlet context.
11+
* Base class for {@link WebApplicationInitializer} implementations that register a {@link DispatcherServlet} in the
12+
* servlet context.
1113
*/
1214
public class DispatcherServletInitializer implements WebApplicationInitializer {
1315

1416
private static final Logger log = LoggerFactory.getLogger(DispatcherServletInitializer.class);
15-
17+
private static final String APPLICATION_BASE_PACKAGE = "com.techcourse";
18+
private static final String INTERNAL_BASE_PACKAGE = "webmvc.org.springframework.web.servlet";
1619
private static final String DEFAULT_SERVLET_NAME = "dispatcher";
1720

1821
@Override
1922
public void onStartup(final ServletContext servletContext) {
20-
final var dispatcherServlet = new DispatcherServlet();
23+
final ApplicationContext applicationContext = new ApplicationContext(APPLICATION_BASE_PACKAGE,
24+
INTERNAL_BASE_PACKAGE);
25+
final var dispatcherServlet = new DispatcherServlet(applicationContext);
2126

2227
final var registration = servletContext.addServlet(DEFAULT_SERVLET_NAME, dispatcherServlet);
2328
if (registration == null) {
2429
throw new IllegalStateException("Failed to register servlet with name '" + DEFAULT_SERVLET_NAME + "'. " +
25-
"Check if there is another servlet registered under the same name.");
30+
"Check if there is another servlet registered under the same name.");
2631
}
2732

2833
registration.setLoadOnStartup(1);

app/src/main/java/com/techcourse/HandlerAdapterFactory.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

app/src/main/java/com/techcourse/HandlerMappingFactory.java

Lines changed: 0 additions & 15 deletions
This file was deleted.

app/src/main/java/com/techcourse/ManualHandlerMapping.java

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.techcourse.controller;
2+
3+
import context.org.springframework.stereotype.Controller;
4+
import jakarta.servlet.http.HttpServletRequest;
5+
import jakarta.servlet.http.HttpServletResponse;
6+
import web.org.springframework.web.bind.annotation.RequestMapping;
7+
import web.org.springframework.web.bind.annotation.RequestMethod;
8+
import webmvc.org.springframework.web.servlet.view.ModelAndView;
9+
import webmvc.org.springframework.web.servlet.view.JspView;
10+
11+
@Controller
12+
public class ForwardController {
13+
14+
@RequestMapping(value = "/", method = RequestMethod.GET)
15+
public ModelAndView showIndex(final HttpServletRequest request, final HttpServletResponse response) {
16+
return new ModelAndView(new JspView("index.jsp"));
17+
}
18+
}

app/src/main/java/com/techcourse/controller/LoginController.java

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,41 @@
22

33
import com.techcourse.domain.User;
44
import com.techcourse.repository.InMemoryUserRepository;
5+
import context.org.springframework.stereotype.Controller;
56
import jakarta.servlet.http.HttpServletRequest;
67
import jakarta.servlet.http.HttpServletResponse;
7-
import webmvc.org.springframework.web.servlet.mvc.asis.Controller;
88
import org.slf4j.Logger;
99
import org.slf4j.LoggerFactory;
10+
import web.org.springframework.web.bind.annotation.RequestMapping;
11+
import web.org.springframework.web.bind.annotation.RequestMethod;
12+
import webmvc.org.springframework.web.servlet.view.ModelAndView;
13+
import webmvc.org.springframework.web.servlet.view.RedirectView;
1014

11-
public class LoginController implements Controller {
15+
@Controller
16+
public class LoginController {
1217

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

15-
@Override
16-
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
17-
if (UserSession.isLoggedIn(req.getSession())) {
18-
return "redirect:/index.jsp";
20+
@RequestMapping(value = "/login", method = RequestMethod.POST)
21+
public ModelAndView login(final HttpServletRequest request, final HttpServletResponse response) {
22+
if (UserSession.isLoggedIn(request.getSession())) {
23+
return new ModelAndView(new RedirectView("/index.jsp"));
1924
}
2025

21-
return InMemoryUserRepository.findByAccount(req.getParameter("account"))
22-
.map(user -> {
23-
log.info("User : {}", user);
24-
return login(req, user);
25-
})
26-
.orElse("redirect:/401.jsp");
26+
return InMemoryUserRepository.findByAccount(request.getParameter("account"))
27+
.map(user -> {
28+
log.info("User : {}", user);
29+
return checkPassword(request, user);
30+
})
31+
.orElse(new ModelAndView(new RedirectView("/401.jsp")));
2732
}
2833

29-
private String login(final HttpServletRequest request, final User user) {
34+
private ModelAndView checkPassword(final HttpServletRequest request, final User user) {
3035
if (user.checkPassword(request.getParameter("password"))) {
3136
final var session = request.getSession();
3237
session.setAttribute(UserSession.SESSION_KEY, user);
33-
return "redirect:/index.jsp";
38+
return new ModelAndView(new RedirectView("/index.jsp"));
3439
}
35-
return "redirect:/401.jsp";
40+
return new ModelAndView(new RedirectView("/401.jsp"));
3641
}
3742
}
Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
package com.techcourse.controller;
22

3+
import context.org.springframework.stereotype.Controller;
34
import jakarta.servlet.http.HttpServletRequest;
45
import jakarta.servlet.http.HttpServletResponse;
56
import org.slf4j.Logger;
67
import org.slf4j.LoggerFactory;
7-
import webmvc.org.springframework.web.servlet.mvc.asis.Controller;
8+
import web.org.springframework.web.bind.annotation.RequestMapping;
9+
import web.org.springframework.web.bind.annotation.RequestMethod;
10+
import webmvc.org.springframework.web.servlet.view.ModelAndView;
11+
import webmvc.org.springframework.web.servlet.view.JspView;
12+
import webmvc.org.springframework.web.servlet.view.RedirectView;
813

9-
public class LoginViewController implements Controller {
14+
@Controller
15+
public class LoginViewController {
1016

1117
private static final Logger log = LoggerFactory.getLogger(LoginViewController.class);
1218

13-
@Override
14-
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
15-
return UserSession.getUserFrom(req.getSession())
16-
.map(user -> {
17-
log.info("logged in {}", user.getAccount());
18-
return "redirect:/index.jsp";
19-
})
20-
.orElse("/login.jsp");
19+
@RequestMapping(value = "/login/view", method = RequestMethod.GET)
20+
public ModelAndView show(final HttpServletRequest request, final HttpServletResponse response) {
21+
return UserSession.getUserFrom(request.getSession())
22+
.map(user -> {
23+
log.info("logged in {}", user.getAccount());
24+
return new ModelAndView(new RedirectView("/index.jsp"));
25+
})
26+
.orElse(new ModelAndView(new JspView("/login.jsp")));
2127
}
2228
}
Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package com.techcourse.controller;
22

3+
import context.org.springframework.stereotype.Controller;
34
import jakarta.servlet.http.HttpServletRequest;
45
import jakarta.servlet.http.HttpServletResponse;
5-
import webmvc.org.springframework.web.servlet.mvc.asis.Controller;
6+
import web.org.springframework.web.bind.annotation.RequestMapping;
7+
import web.org.springframework.web.bind.annotation.RequestMethod;
8+
import webmvc.org.springframework.web.servlet.view.ModelAndView;
9+
import webmvc.org.springframework.web.servlet.view.RedirectView;
610

7-
public class LogoutController implements Controller {
11+
@Controller
12+
public class LogoutController {
813

9-
@Override
10-
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
11-
final var session = req.getSession();
14+
@RequestMapping(value = "/logout", method = RequestMethod.GET)
15+
public ModelAndView logout(final HttpServletRequest request, final HttpServletResponse response) {
16+
final var session = request.getSession();
1217
session.removeAttribute(UserSession.SESSION_KEY);
13-
return "redirect:/";
18+
return new ModelAndView(new RedirectView("/index.jsp"));
1419
}
1520
}

app/src/main/java/com/techcourse/controller/RegisterController.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,25 @@
22

33
import com.techcourse.domain.User;
44
import com.techcourse.repository.InMemoryUserRepository;
5+
import context.org.springframework.stereotype.Controller;
56
import jakarta.servlet.http.HttpServletRequest;
67
import jakarta.servlet.http.HttpServletResponse;
7-
import webmvc.org.springframework.web.servlet.mvc.asis.Controller;
8+
import web.org.springframework.web.bind.annotation.RequestMapping;
9+
import web.org.springframework.web.bind.annotation.RequestMethod;
10+
import webmvc.org.springframework.web.servlet.view.ModelAndView;
11+
import webmvc.org.springframework.web.servlet.view.RedirectView;
812

9-
public class RegisterController implements Controller {
13+
@Controller
14+
public class RegisterController {
1015

11-
@Override
12-
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
16+
@RequestMapping(value = "/register", method = RequestMethod.POST)
17+
public ModelAndView register(final HttpServletRequest request, final HttpServletResponse response) {
1318
final var user = new User(2,
14-
req.getParameter("account"),
15-
req.getParameter("password"),
16-
req.getParameter("email"));
19+
request.getParameter("account"),
20+
request.getParameter("password"),
21+
request.getParameter("email"));
1722
InMemoryUserRepository.save(user);
1823

19-
return "redirect:/index.jsp";
24+
return new ModelAndView(new RedirectView("/index.jsp"));
2025
}
2126
}
Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package com.techcourse.controller;
22

3+
import context.org.springframework.stereotype.Controller;
34
import jakarta.servlet.http.HttpServletRequest;
45
import jakarta.servlet.http.HttpServletResponse;
5-
import webmvc.org.springframework.web.servlet.mvc.asis.Controller;
6+
import web.org.springframework.web.bind.annotation.RequestMapping;
7+
import web.org.springframework.web.bind.annotation.RequestMethod;
8+
import webmvc.org.springframework.web.servlet.view.ModelAndView;
9+
import webmvc.org.springframework.web.servlet.view.JspView;
610

7-
public class RegisterViewController implements Controller {
11+
@Controller
12+
public class RegisterViewController {
813

9-
@Override
10-
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
11-
return "/register.jsp";
14+
@RequestMapping(value = "/register/view", method = RequestMethod.GET)
15+
public ModelAndView show(final HttpServletRequest request, final HttpServletResponse response) {
16+
return new ModelAndView(new JspView("/register.jsp"));
1217
}
1318
}

0 commit comments

Comments
 (0)