SpringMVC-@Controllerと@RequestMapping注記の詳細

18545 ワード

注記ベースのコントローラ
注記ベースのコントローラを使用すると、次の2つの利点があります.
  • 注釈ベースのコントローラクラスでは、複数の処理方法を記述することができ、さらに複数の要求(動作)を処理することができ、これにより、関連する操作を同じコントローラクラスに記述することができ、コントローラクラスの数を減らし、今後のメンテナンスを容易にすることができる.
  • 注釈ベースのコントローラは、プロファイルにマッピングを配置する必要はなく、RequestMapping注釈タイプ注釈の1つのメソッドを使用して要求処理を行う必要があります.

  • Controller注記タイプ
    Spring MVCでorg.springframework.stereotype.controller注釈タイプを使用してクラスのインスタンスがコントローラであることを宣言します.たとえば、springMVCDemo 02が適用するsrcディレクトリの下にcontrollerパッケージを作成し、そのパッケージにController注記のコントローラクラスIndexControllerを作成します.サンプルコードは次のとおりです.
    package controller;
    
    import org.springframework.stereotype.Controller;
    
    /**
    * “@Controller”   IndexController          
    *
    * @Controller   @Controller(@Controller)  @Controller(value="@Controller")
    */
    @Controller
    public class IndexController {
        //        
    }
    

    Spring MVCではスキャンメカニズムを使用してアプリケーション内のすべての注釈ベースのコントローラクラスを見つけるため、コントローラクラスをSpring MVCフレームワークでスキャンするには、プロファイルにspring-contextを宣言し、要素を使用してコントローラクラスの基本パッケージを指定する必要があります(基本パッケージとそのサブパッケージの下にあるコントローラクラスがあることを確認してください).
    たとえば、springMVCDemo 02アプリケーションの/WEB-INF/ディレクトリの下にプロファイルspringmvc-servlet.xmlを作成します.サンプルコードは次のとおりです.
    
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:p="http://www.springframework.org/schema/p" 
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        
        <context:component-scan base-package="controller" />
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="suffix" value=".jsp" />
        bean>
    beans>
    

    RequestMapping注記タイプ
    org.springframework.web.bind.annotation.RequestMapping注記タイプを使用して、要求を処理方法に対応させる必要があります.
    1)方法レベル注記方法レベル注記のサンプルコードは以下の通りである.
    package controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
    * “@Controller”   IndexController          
    *
    * @Controller   @Controller(@Controller)  @Controller(value="@Controller")
    */
    @Controller
    public class IndexController {
        @RequestMapping(value = "/index/login")
        public String login() {
            /**
             * login        ,    Spring MVC  
             *    internalResourceViewResolver               
             */
            return "login";
        }
    
        @RequestMapping(value = "/index/register")
        public String register() {
            return "register";
        }
    }
    

    上記の例には、処理方法に作用するRequestMapping注記文が2つあります.注記のvalue属性は要求URIをメソッドにマッピングし、value属性はRequestMapping注記のデフォルト属性であり、value属性が1つしかない場合は省略できます.
    ユーザは、loginメソッドにアクセスする前に/WEB-INF/jsp/ディレクトリの下にlogin.jspを作成する必要があるURLアクセスloginメソッド(リクエスト処理メソッド)を使用することができる.
    http://localhost:8080/springMVCDemo02/index/login
    

    2)クラスレベル注釈クラスレベル注釈のサンプルコードは以下の通りである.
    package controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    @Controller
    @RequestMapping("/index")
    public class IndexController {
        @RequestMapping("/login")
        public String login() {
            return "login";
        }
    
        @RequestMapping("/register")
        public String register() {
            return "register";
        }
    }
    

    クラスレベル注記の場合、コントローラクラスのすべてのメソッドがクラスレベルのリクエストにマッピングされます.ユーザーは、以下のURLを使用してloginメソッドにアクセスできます.
    http://localhost:8080/springMVCDemo02/index/login
    

    メンテナンスプログラムを容易にするために、開発者はクラスレベルの注釈を採用し、関連処理を同じコントローラクラスに置くことをお勧めします.例えば、商品の追加、削除、変更、検索処理方法はGoodsOperate制御クラスに入れることができる.
    要求処理方法の作成
    制御クラスの各リクエスト処理メソッドには、複数の異なるタイプのパラメータと、複数のタイプの戻り結果があります.
    1)要求処理方法でよく見られるパラメータタイプ要求処理方法でサーブレットAPIタイプを使用する必要がある場合、これらのタイプを要求処理方法のパラメータタイプとすることができる.サーブレットAPIパラメータタイプのサンプルコードは次のとおりです.
    package controller;
    import javax.servlet.http.HttpSession;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    @Controller
    @RequestMapping("/index")
    public class IndexController {
        @RequestMapping("/login")
        public String login(HttpSession session,HttpServletRequest request) {
            session.setAttribute("skey", "session    ");
            session.setAttribute("rkey", "request    ");
            return "login";
        }
    }
    

    特に重要なタイプはorg.springframework.ui.Modelタイプで、Mapを含むSpringフレームワークタイプです.Spring MVCは、要求処理メソッドが呼び出されるたびにorg.springframework.ui.Modelオブジェクトを作成します.Modelパラメータタイプのサンプルコードは次のとおりです.
    package controller;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    @Controller
    @RequestMapping("/index")
    public class IndexController {
        @RequestMapping("/register")
        public String register(Model model) {
            /*        EL   ${success}  model   */
            model.addAttribute("success", "    ");
            return "register";
        }
    }
    

    2)要求処理方法によく見られる戻りタイプ最も一般的な戻りタイプは,論理ビュー名を表すStringタイプである.Stringタイプのほか、ModelAndView、Model、View、その他任意のJavaタイプがあります.