Skip to content

Commit

Permalink
(servlet) Model추가
Browse files Browse the repository at this point in the history
  • Loading branch information
mike6321 committed Apr 15, 2021
1 parent 5e89c4c commit fd4aff5
Show file tree
Hide file tree
Showing 7 changed files with 191 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
* Time : 11:00 오후
*/
public class ModelView {
private String viewName;
private Map<String, Object> model = new HashMap<>();
private final String viewName;
private final Map<String, Object> model = new HashMap<>();

public ModelView(String viewName) {
public ModelView(final String viewName) {
this.viewName = viewName;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

/**
* Project : servlet
Expand All @@ -14,14 +15,24 @@
* Time : 9:58 오후
*/
public class MyView {
private String viewPath;
private final String viewPath;

public MyView(String viewPath) {
public MyView(final String viewPath) {
this.viewPath = viewPath;
}

public void render(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
public void render(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
final RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
}

public void render(final Map<String, Object> model, final HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
modelToRequestAttribute(model, request);
final RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
}

private void modelToRequestAttribute(final Map<String, Object> model, final HttpServletRequest request) {
model.forEach(request::setAttribute);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package me.choi.servlet.web.frontcontroller.version03;

import me.choi.servlet.web.frontcontroller.ModelView;

import java.util.Map;

/**
* Project : servlet
*
* @author : jwdeveloper
* @comment :
* Time : 9:31 오후
*/
public interface ControllerV3 {

ModelView process(final Map<String, String> paramMap);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package me.choi.servlet.web.frontcontroller.version03;

import me.choi.servlet.web.frontcontroller.ModelView;
import me.choi.servlet.web.frontcontroller.MyView;
import me.choi.servlet.web.frontcontroller.version03.controller.MemberFormControllerV3;
import me.choi.servlet.web.frontcontroller.version03.controller.MemberListControllerV3;
import me.choi.servlet.web.frontcontroller.version03.controller.MemberSaveControllerV3;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
* Project : servlet
*
* @author : jwdeveloper
* @comment : 현재의 문제점 : HttpServletRequest, HttpServletResponse등의 사용하지 않는 코드가 너무 많다.
* Time : 9:13 오후
*/
@WebServlet(name = "frontControllerServletV3", urlPatterns = "/front-controller/v3/*")
public class FrontControllerServletV3 extends HttpServlet {

private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final Map<String, ControllerV3> controllerMap = new HashMap<>();

public FrontControllerServletV3() {
this.controllerMap.put("/front-controller/v3/members/new-form", new MemberFormControllerV3());
this.controllerMap.put("/front-controller/v3/members/save", new MemberSaveControllerV3());
this.controllerMap.put("/front-controller/v3/members", new MemberListControllerV3());
}

@Override
protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {

final String requestURI = request.getRequestURI();
final ControllerV3 controller = controllerMap.get(requestURI);

if (controller == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}

final Map<String, String> paramMap = createParamMap(request);
final ModelView mv = controller.process(paramMap);

final String viewName = mv.getViewName();// 논리이름
final MyView view = viewResolver(viewName);
view.render(mv.getModel(), request, response);
}

private MyView viewResolver(final String viewName) {
return new MyView("/WEB-INF/views/" + viewName + ".jsp");
}

private Map<String, String> createParamMap(final HttpServletRequest request) {
final Map<String, String> paramMap = new HashMap<>();
request.getParameterNames().asIterator()
.forEachRemaining(paramName -> paramMap.put(paramName, request.getParameter(paramName)));
return paramMap;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package me.choi.servlet.web.frontcontroller.version03.controller;

import me.choi.servlet.web.frontcontroller.ModelView;
import me.choi.servlet.web.frontcontroller.version03.ControllerV3;

import java.util.Map;

/**
* Project : servlet
*
* @author : jwdeveloper
* @comment :
* Time : 9:33 오후
*/
public class MemberFormControllerV3 implements ControllerV3 {

@Override
public ModelView process(final Map<String, String> paramMap) {
return new ModelView("new-form");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package me.choi.servlet.web.frontcontroller.version03.controller;

import me.choi.servlet.domain.member.Member;
import me.choi.servlet.domain.member.MemberRepository;
import me.choi.servlet.web.frontcontroller.ModelView;
import me.choi.servlet.web.frontcontroller.version03.ControllerV3;

import java.util.List;
import java.util.Map;

/**
* Project : servlet
*
* @author : jwdeveloper
* @comment :
* Time : 9:37 오후
*/
public class MemberListControllerV3 implements ControllerV3 {

private final MemberRepository memberRepository = MemberRepository.getInstance();

@Override
public ModelView process(final Map<String, String> paramMap) {

final List<Member> members = memberRepository.finalAll();
final ModelView mv = new ModelView("members");
mv.getModel().put("members", members);

return mv;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package me.choi.servlet.web.frontcontroller.version03.controller;

import me.choi.servlet.domain.member.Member;
import me.choi.servlet.domain.member.MemberRepository;
import me.choi.servlet.web.frontcontroller.ModelView;
import me.choi.servlet.web.frontcontroller.version03.ControllerV3;

import java.util.Map;

/**
* Project : servlet
*
* @author : jwdeveloper
* @comment :
* Time : 9:34 오후
*/
public class MemberSaveControllerV3 implements ControllerV3 {

private final MemberRepository memberRepository = MemberRepository.getInstance();

@Override
public ModelView process(final Map<String, String> paramMap) {

final String username = paramMap.get("username");
final int age = Integer.parseInt(paramMap.get("age"));

final Member member = new Member(username, age);
memberRepository.save(member);
final ModelView mv = new ModelView("save-result");
mv.getModel().put("member", member);

return mv;
}
}

0 comments on commit fd4aff5

Please sign in to comment.