Skip to content

Commit fd4aff5

Browse files
committed
(servlet) Model추가
1 parent 5e89c4c commit fd4aff5

File tree

7 files changed

+191
-7
lines changed

7 files changed

+191
-7
lines changed

servlet/src/main/java/me/choi/servlet/web/frontcontroller/ModelView.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
* Time : 11:00 오후
1212
*/
1313
public class ModelView {
14-
private String viewName;
15-
private Map<String, Object> model = new HashMap<>();
14+
private final String viewName;
15+
private final Map<String, Object> model = new HashMap<>();
1616

17-
public ModelView(String viewName) {
17+
public ModelView(final String viewName) {
1818
this.viewName = viewName;
1919
}
2020

servlet/src/main/java/me/choi/servlet/web/frontcontroller/MyView.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import javax.servlet.http.HttpServletRequest;
66
import javax.servlet.http.HttpServletResponse;
77
import java.io.IOException;
8+
import java.util.Map;
89

910
/**
1011
* Project : servlet
@@ -14,14 +15,24 @@
1415
* Time : 9:58 오후
1516
*/
1617
public class MyView {
17-
private String viewPath;
18+
private final String viewPath;
1819

19-
public MyView(String viewPath) {
20+
public MyView(final String viewPath) {
2021
this.viewPath = viewPath;
2122
}
2223

23-
public void render(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
24-
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
24+
public void render(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
25+
final RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
2526
dispatcher.forward(request, response);
2627
}
28+
29+
public void render(final Map<String, Object> model, final HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
30+
modelToRequestAttribute(model, request);
31+
final RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
32+
dispatcher.forward(request, response);
33+
}
34+
35+
private void modelToRequestAttribute(final Map<String, Object> model, final HttpServletRequest request) {
36+
model.forEach(request::setAttribute);
37+
}
2738
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package me.choi.servlet.web.frontcontroller.version03;
2+
3+
import me.choi.servlet.web.frontcontroller.ModelView;
4+
5+
import java.util.Map;
6+
7+
/**
8+
* Project : servlet
9+
*
10+
* @author : jwdeveloper
11+
* @comment :
12+
* Time : 9:31 오후
13+
*/
14+
public interface ControllerV3 {
15+
16+
ModelView process(final Map<String, String> paramMap);
17+
18+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package me.choi.servlet.web.frontcontroller.version03;
2+
3+
import me.choi.servlet.web.frontcontroller.ModelView;
4+
import me.choi.servlet.web.frontcontroller.MyView;
5+
import me.choi.servlet.web.frontcontroller.version03.controller.MemberFormControllerV3;
6+
import me.choi.servlet.web.frontcontroller.version03.controller.MemberListControllerV3;
7+
import me.choi.servlet.web.frontcontroller.version03.controller.MemberSaveControllerV3;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
11+
import javax.servlet.ServletException;
12+
import javax.servlet.annotation.WebServlet;
13+
import javax.servlet.http.HttpServlet;
14+
import javax.servlet.http.HttpServletRequest;
15+
import javax.servlet.http.HttpServletResponse;
16+
import java.io.IOException;
17+
import java.util.HashMap;
18+
import java.util.Map;
19+
20+
/**
21+
* Project : servlet
22+
*
23+
* @author : jwdeveloper
24+
* @comment : 현재의 문제점 : HttpServletRequest, HttpServletResponse등의 사용하지 않는 코드가 너무 많다.
25+
* Time : 9:13 오후
26+
*/
27+
@WebServlet(name = "frontControllerServletV3", urlPatterns = "/front-controller/v3/*")
28+
public class FrontControllerServletV3 extends HttpServlet {
29+
30+
private final Logger logger = LoggerFactory.getLogger(this.getClass());
31+
private final Map<String, ControllerV3> controllerMap = new HashMap<>();
32+
33+
public FrontControllerServletV3() {
34+
this.controllerMap.put("/front-controller/v3/members/new-form", new MemberFormControllerV3());
35+
this.controllerMap.put("/front-controller/v3/members/save", new MemberSaveControllerV3());
36+
this.controllerMap.put("/front-controller/v3/members", new MemberListControllerV3());
37+
}
38+
39+
@Override
40+
protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
41+
42+
final String requestURI = request.getRequestURI();
43+
final ControllerV3 controller = controllerMap.get(requestURI);
44+
45+
if (controller == null) {
46+
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
47+
return;
48+
}
49+
50+
final Map<String, String> paramMap = createParamMap(request);
51+
final ModelView mv = controller.process(paramMap);
52+
53+
final String viewName = mv.getViewName();// 논리이름
54+
final MyView view = viewResolver(viewName);
55+
view.render(mv.getModel(), request, response);
56+
}
57+
58+
private MyView viewResolver(final String viewName) {
59+
return new MyView("/WEB-INF/views/" + viewName + ".jsp");
60+
}
61+
62+
private Map<String, String> createParamMap(final HttpServletRequest request) {
63+
final Map<String, String> paramMap = new HashMap<>();
64+
request.getParameterNames().asIterator()
65+
.forEachRemaining(paramName -> paramMap.put(paramName, request.getParameter(paramName)));
66+
return paramMap;
67+
}
68+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package me.choi.servlet.web.frontcontroller.version03.controller;
2+
3+
import me.choi.servlet.web.frontcontroller.ModelView;
4+
import me.choi.servlet.web.frontcontroller.version03.ControllerV3;
5+
6+
import java.util.Map;
7+
8+
/**
9+
* Project : servlet
10+
*
11+
* @author : jwdeveloper
12+
* @comment :
13+
* Time : 9:33 오후
14+
*/
15+
public class MemberFormControllerV3 implements ControllerV3 {
16+
17+
@Override
18+
public ModelView process(final Map<String, String> paramMap) {
19+
return new ModelView("new-form");
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package me.choi.servlet.web.frontcontroller.version03.controller;
2+
3+
import me.choi.servlet.domain.member.Member;
4+
import me.choi.servlet.domain.member.MemberRepository;
5+
import me.choi.servlet.web.frontcontroller.ModelView;
6+
import me.choi.servlet.web.frontcontroller.version03.ControllerV3;
7+
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
/**
12+
* Project : servlet
13+
*
14+
* @author : jwdeveloper
15+
* @comment :
16+
* Time : 9:37 오후
17+
*/
18+
public class MemberListControllerV3 implements ControllerV3 {
19+
20+
private final MemberRepository memberRepository = MemberRepository.getInstance();
21+
22+
@Override
23+
public ModelView process(final Map<String, String> paramMap) {
24+
25+
final List<Member> members = memberRepository.finalAll();
26+
final ModelView mv = new ModelView("members");
27+
mv.getModel().put("members", members);
28+
29+
return mv;
30+
}
31+
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package me.choi.servlet.web.frontcontroller.version03.controller;
2+
3+
import me.choi.servlet.domain.member.Member;
4+
import me.choi.servlet.domain.member.MemberRepository;
5+
import me.choi.servlet.web.frontcontroller.ModelView;
6+
import me.choi.servlet.web.frontcontroller.version03.ControllerV3;
7+
8+
import java.util.Map;
9+
10+
/**
11+
* Project : servlet
12+
*
13+
* @author : jwdeveloper
14+
* @comment :
15+
* Time : 9:34 오후
16+
*/
17+
public class MemberSaveControllerV3 implements ControllerV3 {
18+
19+
private final MemberRepository memberRepository = MemberRepository.getInstance();
20+
21+
@Override
22+
public ModelView process(final Map<String, String> paramMap) {
23+
24+
final String username = paramMap.get("username");
25+
final int age = Integer.parseInt(paramMap.get("age"));
26+
27+
final Member member = new Member(username, age);
28+
memberRepository.save(member);
29+
final ModelView mv = new ModelView("save-result");
30+
mv.getModel().put("member", member);
31+
32+
return mv;
33+
}
34+
}

0 commit comments

Comments
 (0)