MVCモード
12016 ワード
1つのサーブレットまたはJSPのみを使用してビジネスロジック、ビュー、およびレンダリングを処理すると、ロールが過剰に発生し、メンテナンスが困難になります.そこで,この問題を解決するためにMVCモードを用いた.
画像ソース
HTTP要求検証パラメータを受信し、ビジネスロジックを実行する.次に、ビューに渡す結果データをクエリーし、モデルに挿入します.
出力するデータをビューに含めます.表示する必要があるすべてのデータをモデルに挿入し、渡します.したがって、ビューはビジネスロジックやデータアクセスを理解する必要はなく、レンダリング画面に注目するだけです.
モデル内のデータを使用して、ペイント画面に集中します.HTMLセクションの生成を担当します.
redirectは実際のクライアント(Webブラウザ)に応答を失い、クライアントがリダイレクトパスを再要求する.したがって,クライアントは認識でき,URLパスも実際に変更される.逆にfordはサーバ内部の呼び出しであるため,クライアントはまったく知らない.
パスviewpathを指定し、リクエストが来ると自動的にcontrollerからviewに移行します.
しかし、これらのMVCモードには限界がある.
繰り返しviewpath
もしあなたがjspではなく、胸腺ペプチドなどを交換したら、すべて交換しなければなりません.
パブリック冗長性
powed、viewのような部分は繰り返し、毎回呼び出されます.
共存し難い.
従って、コントローラを呼び出す前に、汎用機能を扱うことができるFront Controlモードが必要となる.Spring MVCもこのFront Controlにあります.
画像ソース
コントローラとビューの分離
せいぎょそうち
HTTP要求検証パラメータを受信し、ビジネスロジックを実行する.次に、ビューに渡す結果データをクエリーし、モデルに挿入します.
モデル人
出力するデータをビューに含めます.表示する必要があるすべてのデータをモデルに挿入し、渡します.したがって、ビューはビジネスロジックやデータアクセスを理解する必要はなく、レンダリング画面に注目するだけです.
表示
モデル内のデータを使用して、ペイント画面に集中します.HTMLセクションの生成を担当します.
会員がMVCに加入する
購読画面出力
@WebServlet(name = "mvcMemberFormServlet", urlPatterns = "/servlet-mvc/members/new-form")
public class MVCMemberFormServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String viewPath = "/WEB-INF/views/new-form.jsp";
RequestDispatcher requestDispatcher = request.getRequestDispatcher(viewPath);
requestDispatcher.forward(request, response); // 제어권 넘김
// 서버안에서 내부적으로 호출하는것이지, 리다이렉트 하는게 아니다.
}
}
redirect vs forward redirectは実際のクライアント(Webブラウザ)に応答を失い、クライアントがリダイレクトパスを再要求する.したがって,クライアントは認識でき,URLパスも実際に変更される.逆にfordはサーバ内部の呼び出しであるため,クライアントはまったく知らない.
パスviewpathを指定し、リクエストが来ると自動的にcontrollerからviewに移行します.
購読後の画面出力
@WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save")
public class MvcMemberSaveServlet extends HttpServlet {
private final MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
memberRepository.save(member);
//Model에 데이터를 보관한다.
request.setAttribute("member", member);
String viewPath = "/WEB-INF/views/save-result.jsp";
RequestDispatcher requestDispatcher = request.getRequestDispatcher(viewPath);
requestDispatcher.forward(request, response);
リクエストが受信したparamを各変数に設定し、メンバーを作成して保存し、プロパティに設定してviewに渡し、view論理に従って出力します.すべてのクエリー
@WebServlet(name = "mvcMemberListServlet", urlPatterns = "/servlet-mvc/members")
public class MvcMemberListServlet extends HttpServlet {
private final MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Member> members = memberRepository.findAll();
request.setAttribute("member", members);
String viewPath = "/WEB-INF/views/save-result.jsp";
RequestDispatcher requestDispatcher = request.getRequestDispatcher(viewPath);
requestDispatcher.forward(request, response);
同様に、クエリ全体のためにListをArtreviewに設定し、viewに出力します.しかし、これらのMVCモードには限界がある.
MVC制限
繰り返しviewpath
もしあなたがjspではなく、胸腺ペプチドなどを交換したら、すべて交換しなければなりません.
パブリック冗長性
powed、viewのような部分は繰り返し、毎回呼び出されます.
従って、コントローラを呼び出す前に、汎用機能を扱うことができるFront Controlモードが必要となる.Spring MVCもこのFront Controlにあります.
Reference
この問題について(MVCモード), 我々は、より多くの情報をここで見つけました https://velog.io/@blacklandbird/MVC-패턴テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol