MVC
A、MVCパターン
代表MVCモデル - ビュー - コントローラ(モデル - ビュー - コントローラ)パターン。
- モデル:モデルは、DAO(データアクセスオブジェクトデータアクセスオブジェクト)またはPOJO(プレーン普通のJavaオブジェクトの通常のJavaBeans)を表しています。アプリケーションデータのアプリケーションロジックを処理する部分。
- ビュー:ビューのデータの可視化。
- コントローラー:ユーザーとの対話アプリケーションプロセスの一部。コントローラはモデルとビューに作用します。これは、データモデルオブジェクト、ビューを流れ、データの変更を更新し制御します。モデル・ビュー・コントローラを分離します。
二、 Model 2
JavaのWebアプリケーションの開発、2つの設計モデル、モデル1とモデル2があります。
モデル1は、JSPページの中心である、JSP、ページ表示からビジネス・ロジックを呼び出し、小さなアプリケーションの開発に適しています。
JSPビューとコントローラとして機能、JavaBeansはモデルとしての役割を果たす。
MVC方式に基づくモデル2は、ほぼすべての近代的なWebフレームワークは、すべてのモデル2の実装です。
JSP、サーブレットフィルタからのビューとして機能する、またはコントローラとして機能するように、JavaBeansは、モデルとして働きます。
コントローラへの各HTTPリクエストは、リクエストURIは、識別されたアクションに対応します。アプリケーションの代わりにアクションが操作を行うことができます。
コントローラは、URIを解決し、適切なアクションを呼び出す、次にビューモデルにアクセスできる領域にオブジェクト。
最後に、ビューにするRequestDispatcher移す際にHttpServletResponse.sendRedirectの方法又はジャンプを使用してコントローラ。JSPページでは、データの表現言語とカスタムラベルを表示します。
三、サーブレットコントローラ
@WebServlet(名= "ControllerServletの"、urlPatterns = { "/入力製品"、 "/ SAVE-製品" }) パブリック クラス ControllerServletのが延びHttpServletを{ プライベート 静的 最終 長いのserialVersionUID = 1579Lを、 @Override 公共 ボイドのdoGet(HttpServletRequestのリクエスト、HttpServletResponseの応答がスローにIOException、ServletExceptionが{ 工程(要求、応答); } @Override 公共 ボイドのdoPost(HttpServletRequestのリクエスト、HttpServletResponseの応答)がスローにIOException、ServletExceptionがを{ プロセス(要求、応答); } // インプットメソッド要求プロセスのすべてによって処理 専用 空隙プロセス(HttpServletRequestのリクエスト、HttpServletResponseの応答)がスローにIOException、ServletExceptionがを{ // 取得アクション 列URI = Request.getRequestURI(); // URI = / contextName / resourceNameのか/ resourceNameを int型 lastIndexの= uri.lastIndexOf( "/" ;) 文字列のアクションを(lastIndexの+1を付けましたuri.substring = ;) // 転送URL 文字列dispatchUrl = ヌル; // プロセスアクション IF( "製品-INPUT".equals(アクション)){ dispatchUrlを = "/jsp/ProductForm.jsp" 。 } それ以外の 場合( "セーブ・製品" .equals(アクション)){ // 创建模型 製品= 新製品(); product.setName(request.getParameter( "名前" )); product.setDescription(request.getParameter( "説明" )); product.setPrice(Integer.parseInt(request.getParameter( "価格" ))); // 业务逻辑保存模型等 SaveProductAction saveProductAction = 新しい SaveProductAction(); saveProductAction.save(製品) アクセスの要求にモデルビューを追加する属性 request.setAttribute( "製品" 、プロダクトを); dispatchUrl = "/jsp/ProductDetails.jsp" ; } // 前方 IF(DispatchUrl =!ヌル){ するRequestDispatcher RD = request.getRequestDispatcherを(dispatchUrl); rd.forward(リクエスト、レスポンス); } } }
<% - ProductForm.jsp - %> < "セーブ・製品"フォームメソッド= "ポスト"アクション=> <H1>製品を追加</ H1> <ラベル> の<span>製品名:</ span>の <入力ID = "名前"タイプ= "テキスト"名前= "名前"> </ 1abel> <ラベル> の<span>説明:</ span>の <入力されたID = "記述"タイプ= "テキスト"名前= "説明"> </ label>は <ラベル> の<span>価格:</ label>は <入力されたID = "価格"名前= "価格"タイプ= "数"ステップ= "任意の"> </ label>は <ラベル> の<span>&NBSP :</ span>の <input type = "提出"> </ label>は </ form>を
三、フィルターの販売代理店
@WebFilter(FILTERNAME = "DispatcherFilter"、urlPatterns = { "/ *" }) パブリック クラス DispatcherFilter 実装フィルタ{ @Override 公共 ボイドのinit(に、FilterConfigに、FilterConfig)スローServletExceptionが{} @Override 公共 ボイドが破壊(){} @Override 公共 ボイドdoFilter(のServletRequest要求たServletResponse応答れるFilterChainフィルターチェーン)がスローIOExceptionが、ServletExceptionが{ HttpServletRequestのREQ = (HttpServletRequestの)要求。 ストリングURI = req.getRequestURI()。 // ...サーブレットコントローラと一致する IF(dispatchUrl =!ヌル){ するRequestDispatcher RD = request.getRequestDispatcher(dispatchUrl); rd.forward(リクエスト、レスポンス); } 他{ // フィルター媒体には、静的ターゲットを含みますすべてのURLアクションが沿って通過していきませんがあれば FilterChain.doFilter(要求、応答); } } }