ばねMVC構造
前章で作成したプロジェクトの構造とSpring MVCの構造を比較してみましょう
GOT YOUNGHNの講義がどれほど体系的だったかがわかりますが…
Handlerクエリ:Handlerマッピングクエリによって要求URLのHandler(コントローラ)にマッピングされます.
クエリーHandlerアダプタ:クエリーはHandlerのHandlerアダプタを実行します.
Handlerアダプタの実行:Handlerアダプタを実行します.
Handlerを実行:Handlerアダプタで実際のHandlerを実行します.
ModelAndViewを返します:HandlerアダプタHandlerが返した情報をModelAndViewに変換します.
viewResolverの呼び出し:ビューアZooverを検索して実行します. JSPの場合:InternalResourceViewResolverが自動的に登録され、使用されます.
ビューに戻る:ビューの論理名を物理名に変更し、レンダリングを担当するビューオブジェクトを返します. JSPではInternalResourceViewに戻り、内部に順方向論理があります.
レンダービュー(Render View):ビューからビューをレンダーします.
さあ.正直難しすぎるので、私たちがやった項目を基準に簡単に解いてみましょう. Handlerクエリー->入力要求のURL情報を取得してコントローラをクエリーします. Handlerアダプタ->クエリーされたコントローラがアダプタの実行に適しているかどうかを判断します. Handlerアダプタ->Handlerアダプタを実行します. Handler-> を実行 ModelAndViewを返します.>4からMv を返します.
呼び出し viewResolver ビュー を返します.レンダー
コントローラを呼び出すには、HandlerマッピングとHandlerアダプタが必要です.ハンドルマッピング:ハンドルマッピングでコントローラを見つける必要があります. Handlerアダプタ:Handlerマッピングで見つかったHandlerを実行するには、Handlerアダプタが必要です. スプリングは,必要なHandlerマッピングとHandlerアダプタの大部分を実現した.
スプリングガイドによって自動的に登録されるHandlerマッピングのセットとHandlerアダプタのセットがあります.
優先順位に従って順番に検索します.
HandlerMapping
0=requestmappingHandleMapping:プレゼンテーションベースのコントローラ@requestMapping用
1=BeanName UrlHandleMapping:SpringBinの名前でHandlerを検索します.
HandlerAadapter
0=requestmappingHandlerAdapter:アニメーションベースのコントローラ@requestmapping用
1=HttpResquestHandler Adapter:HttpResquestHandler処理
2=単純コントローラHandler Adapter:Controllerインタフェース(ノイズX、過去使用)処理
Spring Bootでは、InternalResourceViewResolverというビューライブラリが自動的に登録されます.
このとき、
スプリングガイドによって自動的に登録されたビュートリム
1=BeanName ViewResolver:空の名前でビューを検索して返します.(たとえば、Excelファイルを作成する場合)
2=InternalResourceViewResolver:JSPを処理できるビューを返します.
ハンドラアダプタの呼び出し
Handlerアダプタでnew-formという論理ビューを取得します.
ViewResolverの呼び出し
new-formという名前のビュー名でviewResolverを順次呼び出します.
BeanNameViewResolverは、new-formと命名されたスプリングシート登録のビューを検索する必要はありません.InternalResourceViewResolverを呼び出します.
InternalResourceViewResolver
このビューアZooverはInternalResourceViewを返します.
ビュー-InternalResourceView
InternalResourceViewは、JSPのように順方向()を呼び出して処理できる場合に使用します.
view.render()
view.render()が呼び出され、InternalResourceViewはforward()を使用してJSPを実行します.
GOT YOUNGHNの講義がどれほど体系的だったかがわかりますが…
ばねMVCの構造
Handlerクエリ:Handlerマッピングクエリによって要求URLのHandler(コントローラ)にマッピングされます.
クエリーHandlerアダプタ:クエリーはHandlerのHandlerアダプタを実行します.
Handlerアダプタの実行:Handlerアダプタを実行します.
Handlerを実行:Handlerアダプタで実際のHandlerを実行します.
ModelAndViewを返します:HandlerアダプタHandlerが返した情報をModelAndViewに変換します.
viewResolverの呼び出し:ビューアZooverを検索して実行します.
ビューに戻る:ビューの論理名を物理名に変更し、レンダリングを担当するビューオブジェクトを返します.
レンダービュー(Render View):ビューからビューをレンダーします.
public class FrontControllerServletV5 extends HttpServlet {
private final Map<String, Object> handlerMappingMap = new HashMap<>();
private final List<MyHandlerAdapter> handlerAdapters = new ArrayList<>();
public FrontControllerServletV5() {
initHandlerMappingMap();
initHandlerAdapters();
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object handler = getHandler(request);
if(handler == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
MyHandlerAdapter adapter = getHandlerAdapter(handler);
ModelView mv = adapter.handle(request, response, handler);
MyView view = viewResolver(mv);
view.render(mv.getModel(), request, response);
}
private MyHandlerAdapter getHandlerAdapter(Object handler) {
for (MyHandlerAdapter adapter : handlerAdapters) {
if(adapter.supports(handler)) {
return adapter;
}
}
throw new IllegalArgumentException("no handler adapter, handler= " + handler);
}
private Object getHandler(HttpServletRequest request) {
String requestURI = request.getRequestURI();
return handlerMappingMap.get(requestURI);
}
private void initHandlerAdapters() {
handlerAdapters.add(new ControllerV3HandlerAdapter());
handlerAdapters.add(new ControllerV4HandlerAdapter());
}
private void initHandlerMappingMap() {
handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3());
handlerMappingMap.put("/front-controller/v5/v3/members/save", new MemberSaveControllerV3());
handlerMappingMap.put("/front-controller/v5/v3/members", new MemberListControllerV3());
handlerMappingMap.put("/front-controller/v5/v4/members/new-form", new MemberFormControllerV4());
handlerMappingMap.put("/front-controller/v5/v4/members/save", new MemberSaveControllerV4());
handlerMappingMap.put("/front-controller/v5/v4/members", new MemberListControllerV4());
}
private MyView viewResolver(ModelView mv) {
return new MyView("/WEB-INF/views/" + mv.getViewName() + ".jsp");
}
}
私たちのV 5フロントエンドコントローラ.Object handler = getHandler(request);
private Object getHandler(HttpServletRequest request) {
String requestURI = request.getRequestURI();
return handlerMappingMap.get(requestURI);
}
クエリーMyHandlerAdapter adapter = getHandlerAdapter(handler);
private MyHandlerAdapter getHandlerAdapter(Object handler) {
for (MyHandlerAdapter adapter : handlerAdapters) {
if(adapter.supports(handler)) {
return adapter;
}
}
throw new IllegalArgumentException();
}
ModelView mv = adapter.handle(request, response, handler);
@Override // 핸들러 어댑터를 상속 받은 실제 어댑터
public ModelView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
ControllerV3 controller = (ControllerV3) handler;
Map<String, String> paramMap = createParamMap(request);
return controller.process(paramMap);
}
呼び出し
MyView view = viewResolver(mv);
private MyView viewResolver(ModelView mv) {
return new MyView("/WEB-INF/views/" + mv.getViewName() + ".jsp");
}
Handlerマッピング、アダプタ
コントローラを呼び出すには、HandlerマッピングとHandlerアダプタが必要です.
スプリングガイドによって自動的に登録されるHandlerマッピングのセットとHandlerアダプタのセットがあります.
優先順位に従って順番に検索します.
HandlerMapping
0=requestmappingHandleMapping:プレゼンテーションベースのコントローラ@requestMapping用
1=BeanName UrlHandleMapping:SpringBinの名前でHandlerを検索します.
HandlerAadapter
0=requestmappingHandlerAdapter:アニメーションベースのコントローラ@requestmapping用
1=HttpResquestHandler Adapter:HttpResquestHandler処理
2=単純コントローラHandler Adapter:Controllerインタフェース(ノイズX、過去使用)処理
ビューアグリゲータ-内部リソースビューアResolver
Spring Bootでは、InternalResourceViewResolverというビューライブラリが自動的に登録されます.
このとき、
application.properties
に登録されているspring.mvc.view.prefix , spring.mvc.view.suffix
の構成情報を用いて登録する.ビューアZooverの動作
スプリングガイドによって自動的に登録されたビュートリム
1=BeanName ViewResolver:空の名前でビューを検索して返します.(たとえば、Excelファイルを作成する場合)
2=InternalResourceViewResolver:JSPを処理できるビューを返します.
ハンドラアダプタの呼び出し
Handlerアダプタでnew-formという論理ビューを取得します.
ViewResolverの呼び出し
new-formという名前のビュー名でviewResolverを順次呼び出します.
BeanNameViewResolverは、new-formと命名されたスプリングシート登録のビューを検索する必要はありません.InternalResourceViewResolverを呼び出します.
InternalResourceViewResolver
このビューアZooverはInternalResourceViewを返します.
ビュー-InternalResourceView
InternalResourceViewは、JSPのように順方向()を呼び出して処理できる場合に使用します.
view.render()
view.render()が呼び出され、InternalResourceViewはforward()を使用してJSPを実行します.
Reference
この問題について(ばねMVC構造), 我々は、より多くの情報をここで見つけました https://velog.io/@jaca/스프링-MVC-구조テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol