Java WebのSpringMVCでデータを返します。

4188 ワード

基本的な紹介
データレビュー:モデルデータガイドビュー(モデルデータ-->Controller-->ビュー)説明:SpringMVCは、メソッドを呼び出す前に暗黙的なモデルオブジェクトを作成し、モデルデータの格納容器(暗黙的モデル)として使用します。
一、ModelAndView
@RequestMapping(method = RequestMethod.POST)
public ModelAndView createUser(User user)
 {
  userService.createUser(user);
  ModelAndView mav = new ModelAndView();
  mav.setViewName("user/createSuccess");
  mav.addObject("user", user);
  return mav;
}

二、@ModelAttribute
1、方法での参上であれば
@RequestMapping(value = "/handle1")
public String  handle1(@ModelAttribute("user") User user)
{
  user.setUserId("1000");
  return "/user/createSuccess";
}

処理の仕組みは以下の通りです。A.HTTP要求パラメータをUserオブジェクトのB.userをキーにしてUserオブジェクトをデータモデルにセットします。map.put(「user」,user)に相当します。
2、定義が方法の上であれば
@ModelAttribute("user")
public User getUser(){
  User user = new User();
  user.setUserId("1001");
  return user;
}
@RequestMapping(value = "/handle2")
public String  handle2(@ModelAttribute("user") User user)
{
  user.setUserName("tom");
  return "/user/showUser";
}

処理の仕組みは以下の通りです。
  • ターゲット方法を起動する前に、スキャンコントローラ内のあらゆる方法に@ModelAttributeの方法が含まれ、方法の戻り値をモデルデータ(上述の第二のステップと同様)に配置する
  • は、指定された方法を実行し、@ModelAttributeがある場合、(1)にモデルデータに配置されたオブジェクトの割当値を、参照されたバインディングオブジェクト
  • に与える。
  • は、HTTP要求に従って、バインディングオブジェクトを充填および上書きし続け、モデルデータの元のオブジェクト
  • をカバーする統合されたオブジェクトを得る。
    三、Map Model(org.springframe eweet.ui.Modelとjava.util.Map)
    SpringMVCは、処理方法にMapやModelの種類があると発見されると、モデル中のオブジェクトを含む参照をこれらのエントリに転送します。
    @RequestMapping(value = "/handle3")
    public String  handle3(ModelMap modelMap)
    {
         modelMap.addAttribute("testAttr","value1");
         User user = (User)modelMap.get("user");
         user.setUserName("tom"); 
         return "/user/showUser";
    }
    
    
    四、Session Attributes(SpringMVCはモデルに対応する属性をHttpSessionに一時保存します)
    
    @Controller
    @RequestMapping("/user")
    @SessionAttributes(“user”)                                         ①   ②           HttpSession 
    public class UserController
    {
            @RequestMapping(value = "/handle4")
             public String  handle4(@ModelAttribute(“user”) User user) ②
             {
                    user.setUserName("John");
                    return "redirect:/user/handle5.html";
             }
     
            @RequestMapping(value = "/handle5")
            public String  handle5(ModelMapmodelMap,SessionStatussessionStatus)
            {
                    User user = (User)modelMap.get(“user”);            ③        
                    if(user != null)
                    {
                          user.setUserName("Jetty");
                          sessionStatus.setComplete();                 ④ Spring MVC             
                    }
                    return "/user/showUser";
            } 
    }
    
    
    上でハンドル4に要求を送る時、異常を投げます。@ModelAttributeと@Session Attributesの処理は流れに従います。
  • 、SpringMVCは、処理方法を呼び出す前に、要求スレッドに暗黙のモデルオブジェクト
  • を自動的に作成する。
  • 、すべての方法で@ModelAttributeと表記された方法を呼び出し、戻り値を暗黙のモデルオブジェクトに追加する
  • 、Sessionに@Session Attributes(XXX)が指定されているXXX属性があるかどうかを確認し、もしあれば、暗黙の対象に追加します。この時、暗黙の対象がすでにXXX属性が存在しているなら、
  • を上書きします。
  • 4、@ModelAttribute(XXX)と表示されている方法について、処理の流れは以下の通りです。
  • (1)もし暗黙的なモデルにXXX属性があるなら、その割当値を参加に与え、要求メッセージをオブジェクトに充填してから戻る。暗黙のモデルにXXXが存在しない場合は、(2)
  • を実行する。
  • (2)XXXがセッション属性である場合は、セッションからこの属性を取り出し、これを参加者にコピーして、要求メッセージをオブジェクトに塗りつぶすことを試みる。もし会話対象にXXX属性が見つからないなら、HttpSession RequiredException異常を投げます。暗黙的なモデルとセッションのいずれもXXXでない場合は、(3)
  • を実行する。
  • (3)参加対象の一例を作成し、要求メッセージでオブジェクトを塗りつぶす。
  • 上記の例は4(2)を満たしていないので、異常を出すと、メソッドレベル@ModelAttributeを定義する方法があり、4(2)までは実行せず、4(1)まで実行すれば必要なデータがすでに見つかっています。
    SpringMVCのデータフローチャートのまとめ
    1.HTTP要求がサーバに到着し、サーバーはHTTPServletRequestオブジェクト2.SpringMVCフレームにカプセル化し、このHTTPServletRequestオブジェクト3.SpringMVCをキャプチャし、暗黙のモデルオブジェクトを作成します。今回の要求を処理するコンテキストデータストア4.SpringMVCは、1つのHTTPServletRequestオブジェクトデータを処理方法の入力オブジェクト(フォーム/コマンドオブジェクト)5にバインディングします。バインディングエラー情報、チェックエラー情報を暗黙のモデル6に保存します。今回要求したオブジェクトモデルデータは、HTTPServletRequestの属性リストに入れます。ビューオブジェクト7に露出します。HTTPServletRequest属性リストに置かれたモデルデータをビューオブジェクト7にレンダリングします。レンダリング後のHTTP応答メッセージをクライアントに送信します。