Skip to content

Commit c8974e1

Browse files
authored
[MVC 구현하기 - 3단계] 블랙캣(송우석) 미션 제출합니다. (#591)
* refactor: Jsp 렌더링을 JspView 객체로 위임 * refactor: 레거시 MVC 삭제 및 어노테이션 MVC로 변경 * feat: JSON 문자열을 객체로 직렬화 하는 기능 구현 * feat: 컨트롤러 메서드에서 세션, @RequestParam, @RequestBody 를 받을 수 있는 기능 구현 * feat: JSON 반환 기능 구현 * refactor: 컨트롤러 메서드 파라미터 변경 * refactor: app 모듈에서 mvc 프레임워크 모듈로 이동 * refactor: 코드 정렬 * refactor: DispatcherServletInitializer app 모듈로 이동 * refactor: 어노테이션 매핑 핸들러의 getHandler 반환타입 변경 * refactor: 로그인 뷰 - 로그인 요청 컨틀롤러 통합 * refactor: ObjectWriter, ObjectReader 로 static 선언 * remove: 사용하지 않는 메서드 제거
1 parent 2ff83d8 commit c8974e1

File tree

50 files changed

+723
-281
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+723
-281
lines changed

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

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

3-
import org.slf4j.Logger;
4-
import org.slf4j.LoggerFactory;
5-
63
import java.io.IOException;
74
import java.util.stream.Stream;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
87

98
public class Application {
109

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@ public class DispatcherServletInitializer implements WebApplicationInitializer {
2424
@Override
2525
public void onStartup(final ServletContext servletContext) {
2626
final HandlerMappings handlerMappings = new HandlerMappings(List.of(
27-
new ManualHandlerMapping(),
2827
new AnnotationHandlerMapping("com.techcourse.controller")
2928
));
3029
final HandlerAdapters handlerAdapters = new HandlerAdapters(List.of(
31-
new ManualHandlerAdapter(),
3230
new AnnotationHandlerAdapter()
3331
));
3432
final var dispatcherServlet = new DispatcherServlet(handlerMappings, handlerAdapters);

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

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

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

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

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package com.techcourse;
22

3+
import java.io.File;
34
import org.apache.catalina.Context;
45
import org.apache.catalina.LifecycleException;
56
import org.apache.catalina.connector.Connector;
67
import org.apache.catalina.core.StandardContext;
78
import org.apache.catalina.startup.Tomcat;
89
import org.apache.tomcat.util.scan.StandardJarScanner;
910

10-
import java.io.File;
11-
1211
public class TomcatStarter {
1312

1413
public static final String WEBAPP_DIR_LOCATION = "app/src/main/webapp/";
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.techcourse.controller;
2+
3+
import context.org.springframework.stereotype.Controller;
4+
import web.org.springframework.web.bind.annotation.RequestMapping;
5+
import web.org.springframework.web.bind.annotation.RequestMethod;
6+
import webmvc.org.springframework.web.servlet.ModelAndView;
7+
import webmvc.org.springframework.web.servlet.view.JspView;
8+
9+
@Controller
10+
public class IndexController {
11+
12+
@RequestMapping(value = "/", method = RequestMethod.GET)
13+
public ModelAndView index() {
14+
return new ModelAndView(new JspView("/index.jsp"));
15+
}
16+
}

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

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,53 @@
22

33
import com.techcourse.domain.User;
44
import com.techcourse.repository.InMemoryUserRepository;
5-
import jakarta.servlet.http.HttpServletRequest;
6-
import jakarta.servlet.http.HttpServletResponse;
7-
import webmvc.org.springframework.web.servlet.mvc.asis.Controller;
5+
import context.org.springframework.stereotype.Controller;
6+
import jakarta.servlet.http.HttpSession;
87
import org.slf4j.Logger;
98
import org.slf4j.LoggerFactory;
9+
import web.org.springframework.web.bind.annotation.RequestMapping;
10+
import web.org.springframework.web.bind.annotation.RequestMethod;
11+
import web.org.springframework.web.bind.annotation.RequestParam;
12+
import webmvc.org.springframework.web.servlet.ModelAndView;
13+
import webmvc.org.springframework.web.servlet.view.JspView;
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/view", method = RequestMethod.GET)
21+
public ModelAndView loginView(final HttpSession session) {
22+
return UserSession.getUserFrom(session)
23+
.map(user -> {
24+
log.info("logged in {}", user.getAccount());
25+
return "redirect:/index.jsp";
26+
})
27+
.map(it -> new ModelAndView(new JspView(it)))
28+
.orElse(new ModelAndView(new JspView("/login.jsp")));
29+
}
30+
31+
@RequestMapping(value = "/login", method = RequestMethod.POST)
32+
public ModelAndView login(
33+
final HttpSession session,
34+
@RequestParam(value = "account") final String account,
35+
@RequestParam("password") final String password
36+
) {
37+
if (UserSession.isLoggedIn(session)) {
38+
return new ModelAndView(new JspView("redirect:/index.jsp"));
1939
}
2040

21-
return InMemoryUserRepository.findByAccount(req.getParameter("account"))
41+
return InMemoryUserRepository.findByAccount(account)
2242
.map(user -> {
2343
log.info("User : {}", user);
24-
return login(req, user);
44+
return login(user, password, session);
2545
})
26-
.orElse("redirect:/401.jsp");
46+
.map(it -> new ModelAndView(new JspView(it)))
47+
.orElse(new ModelAndView(new JspView("redirect:/401.jsp")));
2748
}
2849

29-
private String login(final HttpServletRequest request, final User user) {
30-
if (user.checkPassword(request.getParameter("password"))) {
31-
final var session = request.getSession();
50+
private String login(final User user, final String password, final HttpSession session) {
51+
if (user.checkPassword(password)) {
3252
session.setAttribute(UserSession.SESSION_KEY, user);
3353
return "redirect:/index.jsp";
3454
}

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

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package com.techcourse.controller;
22

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

7-
public class LogoutController implements Controller {
10+
@Controller
11+
public class LogoutController {
812

9-
@Override
10-
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
11-
final var session = req.getSession();
13+
@RequestMapping(value = "/logout", method = RequestMethod.GET)
14+
public ModelAndView logout(final HttpSession session) {
1215
session.removeAttribute(UserSession.SESSION_KEY);
13-
return "redirect:/";
16+
return new ModelAndView(new JspView("redirect:/"));
1417
}
1518
}
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.techcourse.controller;
22

33
import com.techcourse.domain.User;
4+
import com.techcourse.dto.RegisterRequest;
45
import com.techcourse.repository.InMemoryUserRepository;
56
import context.org.springframework.stereotype.Controller;
6-
import jakarta.servlet.http.HttpServletRequest;
7-
import jakarta.servlet.http.HttpServletResponse;
7+
import web.org.springframework.web.bind.annotation.RequestBody;
88
import web.org.springframework.web.bind.annotation.RequestMapping;
99
import web.org.springframework.web.bind.annotation.RequestMethod;
1010
import webmvc.org.springframework.web.servlet.ModelAndView;
@@ -14,18 +14,18 @@
1414
public class RegisterController {
1515

1616
@RequestMapping(value = "/register", method = RequestMethod.POST)
17-
public ModelAndView save(HttpServletRequest req, HttpServletResponse res) {
17+
public ModelAndView save(@RequestBody final RegisterRequest registerRequest) {
1818
final var user = new User(2,
19-
req.getParameter("account"),
20-
req.getParameter("password"),
21-
req.getParameter("email"));
19+
registerRequest.getAccount(),
20+
registerRequest.getPassword(),
21+
registerRequest.getEmail());
2222
InMemoryUserRepository.save(user);
2323

2424
return new ModelAndView(new JspView("redirect:/index.jsp"));
2525
}
2626

27-
@RequestMapping(value = "/register", method = RequestMethod.GET)
28-
public ModelAndView show(HttpServletRequest req, HttpServletResponse res) {
27+
@RequestMapping(value = "/register/view", method = RequestMethod.GET)
28+
public ModelAndView show() {
2929
return new ModelAndView(new JspView("/register.jsp"));
3030
}
3131
}

0 commit comments

Comments
 (0)