ホームページ >Java >&#&チュートリアル >SpringMVCの基本構成の詳細な紹介

SpringMVCの基本構成の詳細な紹介

不言
不言転載
2018-09-30 16:04:532252ブラウズ

この記事では、SpringMVC の基本的な構成について詳しく説明します。必要な方は参考にしていただければ幸いです。

今日は SpringMVC の基本的な構成について説明します。現在、アノテーションをサポートする主流フレームワークが増えており、当社の無敵 Spring もアノテーションに基づく「ゼロ構成」をサポートしています。

XML と比較したアノテーションの利点: Java のリフレクション メカニズムを最大限に活用して、クラス内の構造情報を取得できます。この情報は、アノテーションと Java コードが 1 つのファイルに格納されているため、構成作業を効果的に削減できます。メンテナンスがより容易になります。

注: アノテーションは Spring 2.5 バージョン以降でのみ使用できます。

アノテーションメソッドはBeanの定義情報とBeanの実装クラスを組み合わせたものです。 Springが提供するアノテーションは以下のとおりです。

@コンポーネント: 共通Beanクラスの宣言

@リポジトリ: 永続層Daoクラスの宣言

@サービス: ビジネス層クラスの宣言

@Controller: コントローラー クラスの宣言

友人はすでにこれら 4 つのアノテーションに精通していると思いますので、ばかげた話をする必要はありません。注釈を使用するときは、クラス内で注釈をスキャンすることを忘れないでください。 ! !

@RequestMapping (非常にコアなアノテーション)。このアノテーションは、コントローラーのリクエスト URL を指定するために使用されます。

コントローラーのクラス定義で、予備のマッピング情報を提供し、クラス下のすべてのリクエスト メソッドにプレフィックスを追加します。

コントローラー クラスのメソッド定義: さらにマッピング情報を提供し、メソッドのリクエスト パスを提供します。

DispacherServlet がリクエストをインターセプトした後、確認します。コントローラー上の @RequestMapping によって提供されるマッピング情報を通じて、リクエストに対応する処理メソッドを取得します。

@Controller
@RequestMapping("user")
public class UserController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

現時点でリクエストするパスは http://localhost:8080/SpringMvcDemo2/user/hello

@RequestMapping リクエスト URL リクエストのマッピングに加えて、リクエスト メソッドを使用することもできます。リクエスト パラメータとリクエスト ヘッダーを含むリクエストの場合、アノテーションにいくつかのパラメータがあります:

1) 値: リクエストの URL を示します

2) メソッド:リクエストメソッド(GET/POST)を表します

3) params: リクエストのパラメータを表します

4) heads: リクエストヘッダー

両者の関係は and になります。複数のリクエストを併用すると、リクエストをより正確に変更できます。

@RequestMapping(value="hello2",method=RequestMethod.POST,params={"username","userpass"},headers="contentType=text/*") 
   public String hello2(){
           return "hello";
    }

このコードは、要求されたアドレスが hello であることを示し、要求メソッドは Post であり、要求ヘッダーの contentType は text/ で始まる必要があります。同じメソッドで 2 つの URL を記述することができます。1 つは POST、もう 1 つは GET で、設定に従って厳密に呼び出されます。また、

@RequestMapping は Ant スタイルの URL をサポートし、Ant の 3 つのワイルドカードをサポートします。 。

? :キャラクターを設定することを示します。

*: 任意の文字と一致します

**: 多層パスと一致します

SpringMVC でのパラメータ処理:

@pathVariable: URL テンプレート メソッド

URL 内のプレースホルダーをマップするために使用されます。マップされた変数名は、次のようにプレースホルダー内の名前と一致している必要があります。リクエスト アドレスは http: //localhost:8080/SpringMvcDemo2/user/testPathVariable/Miya。この miya は、従来の URL で渡したパラメータです。 username=miya ですが、これは Baidu の参加につながりません。

@RequestMapping("/testPathVariable/{username}")
    public String hello3(@PathVariable("username")String username){
        System.out.println("username :  " + username);        
        return "hello";
    }

@RequestParam: リクエスト パラメータを取得します。リクエスト パラメータ名が型の名前と一致する場合は、このアノテーションを省略しても値を受け取ることができます。

@RequestMapping("/textParam")
    public String hello4(@RequestParam("username")String username,@RequestParam("userpass")String userpass){
        System.out.println("userpass :  " + userpass);        
        return "hello";
    }

@RequestHeader: リクエスト ヘッダーのパラメーターを取得します。

ここには 3 つのパラメーターがあります。 value: 指定されたパラメーターの名前、 required: 指定されたパラメータ 必須かどうか、defaultValue: パラメータのデフォルト値を指定します。

@RequestMapping("/testRequestHeader")
    public String hello5(@RequestHeader("Accept-Language") String language){
        System.out.println("language=" + language);       
        return "hello";
    }

@CookieValue: クライアントの Cookie 情報を取得するために使用されます。

@RequestMapping("/testCookieValue")    
public String hello6(@CookieValue("JSESSIONID")String sessionid){
        System.out.println("sessionid=" + sessionid);        
        return "hello";
    }

SpringMVC は、リクエスト メソッドのパラメータとして ServletAPI を使用できます。

@RequestMapping("/testServletAPI")    
public String hello7(HttpServletRequest request,HttpServletResponse response,HttpSession session){        
//我们可以在这里使用
        return "hello";
    }

SpringMVC は、モデル データを処理する次の方法を提供します。

#1) ModelAndView: 処理メソッドの戻り値の型を ModelAndView メソッド本体に設定し、モデル オブジェクトを通じてモデル データを追加します。ビューとモデル情報の両方が含まれます

@RequestMapping("/testModelAndView")
    public ModelAndView hello8(){
        ModelAndView modelAndView = new ModelAndView("hello");
        //添加单个值
        modelAndView.addObject("h","Hello Spring MVC");        
        return modelAndView;
    }

2) マップと仮パラメーター: 仮パラメーターが Map、Model、および ModelMap の場合、処理メソッドが返されるとき、マップ内のデータはモデルに自動的に追加されます。 # Spring MVC は内部で Model インターフェイスを使用してデータを保存し、暗黙的なオブジェクトを作成します。モデル オブジェクトはストレージとして機能します。データモデルのコンテナ。受信パラメータが

Map、Model、ModelMap の場合、SpringMVC はそれをコンテナー に自動的に保存します。

@RequestMapping("/testMap")    
public String hello9(Map<String,Object> map){
        map.put("mapdata", "map data");       
        return "hello";
    }

3)@SessionAttributes:将这个模型中的某个属性存储到Session中,以便多个请求之间共享这个属性,只能用来修饰类。在里面的方法如果参数容器中如map里卖弄保存一个与定义的属性名字相同会保存到容器中共享

4)@ModelAttribute:方法形参标记该注解后,形参对象就会放到模型中。

  SpringMVC在调用方法之前会逐个调用方法上标注了这个注解的方法。将@ModelAttribute中的属性保存到map中,可在执行表单提交生成对象之前,替换执行方法名相同的参数。

@ModelAttribute
public User getUser(){
    User user = new User();
    System.out.println("调用 getUser 方法");
    //默认保存名字为类名首字母小写的user对象到Request中
    return user;
}
@ModelAttribute
public void getUserById(Integer id,Map<String,Object> map){
    User myuser = new User();
    map.put("myuser", myuser);
    //手动指定user对象的名称,到Request中
    System.out.println("调用 getUser 方法");
}

由@SessionAttributs会引发一个很容易轻视的错误当类使用@SessionAttributes修饰,而方法中使用了和SessionAttributes修饰同名的映射参数,确没有添加@ModelAttribute修饰时,则会报错。

以上がSpringMVCの基本構成の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。