ホームページ >Java >&#&チュートリアル >SpringMVCの基本構成の詳細な紹介
この記事では、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 はそれをコンテナー に自動的に保存します。 3)@SessionAttributes:将这个模型中的某个属性存储到Session中,以便多个请求之间共享这个属性,只能用来修饰类。在里面的方法如果参数容器中如map里卖弄保存一个与定义的属性名字相同会保存到容器中共享 4)@ModelAttribute:方法形参标记该注解后,形参对象就会放到模型中。 SpringMVC在调用方法之前会逐个调用方法上标注了这个注解的方法。将@ModelAttribute中的属性保存到map中,可在执行表单提交生成对象之前,替换执行方法名相同的参数。 由@SessionAttributs会引发一个很容易轻视的错误当类使用@SessionAttributes修饰,而方法中使用了和SessionAttributes修饰同名的映射参数,确没有添加@ModelAttribute修饰时,则会报错。@RequestMapping("/testMap")
public String hello9(Map<String,Object> map){
map.put("mapdata", "map data");
return "hello";
}
@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 方法");
}
以上がSpringMVCの基本構成の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。