21.06.11 TILスプリングMVC:Front Control-2片(サーブレット)


📌 SpringMvc-FrontController[V4]


<出典:Spring MVC:金英漢講師>


https://www.inflearn.com/roadmaps/373

🐳 V4


V 3は、テンプレート依存性とビュー冗長性を排除する設計の良いコントローラです.
しかし、実際のコントローラインタフェースを実施する開発者にとっては、
常にModelViewオブジェクトを生成して返す部分は少し面倒です.構造を参照してください.V 3とあまり違いはありません.
ただし、ModelViewではなくViewのみが返されます.
ConV4.interface
String process(Map<String, String> paramMap, Map<String, Object> model);
モデルオブジェクトはパラメータとして渡されるため、直接使用し、結果はビューの名前のみを返します.
FormV4
@Override
public String process(Map<String, String> paramMap, Map<String,Object> model){
	return "new-form";
}
new-formというビューの論理名を簡単に返すだけでよい.
ListV4
@Override
public String process(Map<String, String> paramMap, Map<String, Object> model){
	List<Member> members = memberRepository.findAll();
    	model.put("members", members);
         
        return "members";
V 3とは異なり、モデルはパラメータとして渡されるので、V 3のようにModeViewを作成および処理する必要はありません.
私の状況は複雑ですか?これは少し抜けて、コードも少しきれいになったと思います.
FrontConV 4[FrontConV 3の違い]
private Map<String, ConV4> controllerMap = new HashMap<>();

public FrontConV4(){
	controllerMap.put("/front/v4/member/new-form", new FormV4());
}
protected void service(HttpServletRequest req, HttpServletResponse res) 
	throws ServletException, IOException{
    String requestURI=req.getRequestURI();
    ConV4 controller = controllerMap.get(requestURI);
    if(controller==null){
    	...
    }
    Map<String, String> paramMap = createParamMap(req);
    추가 --> Map<String, Object> model = new HashMap<>();
    
    ModelView mv = controller.process(paramMap);
    변경--> String viewName = controller.process(paramMap, model);
    
    String viewName = mv.getViewName();
    --> 제거
    
    MyView view = viewResolver(viewName);
    
    view.render(mv.getModel(), req, res);
    변경 --> view.render(model, req, res);
➽V 4の定理
これはV 3とあまり変わらないと思います.しかし、コードを見るともっと直感的に感じられます.
ある意味では、変更された部分は、モデルをパラメータに渡し、ビューの論理名を返す操作のみを適用します.
➽V 5の場合はSpring Mvcの構造と似ているので,V 5は単独で整理するのではなく,Spring Mvcの構造を直接位置決めする.