序文
springMVCの学習を終えたばかりです。springMVCの理解と応用を向上させるために、一般的な注釈を提示します。皆様のお役に立てれば幸いです。
まず、サーバー側の3層アーキテクチャ(プレゼンテーションレイヤー、ビジネスレイヤー、永続性レイヤー)を理解しています。また、springMVCはプレゼンテーションレイヤーのフレームワークです。
MVCワークフロー:
最初に、クライアント(通常はブラウザー)が要求を行います。この要求を受け入れる最初のコンポーネントは、通常、フロントコントローラーです。さまざまな要求をさまざまなバックエンドコントローラーに渡して処理し、バックエンドコントローラーは対応するモデルオブジェクトを呼び出して特定のビジネスロジックを処理し、最後に特定のビュー応答をクライアントに返すことができます。
次の図は、springMVCフレームワークの操作の詳細を示してい
ます。SpringMVCワークフロー:
この要求を受け入れる最初のフロントエンドコントローラーはDispatcherServletと呼ばれ、バックエンドコントローラーはControllerと呼ばれます。リクエストURLとバックエンドコントローラーのマッピングの処理を担当するものはHandMappingと呼ばれ、複数のタイプがあり、より柔軟性があります。また、xmlファイルで構成されます。ビジネスロジック処理を担当するモデルオブジェクトは、通常、通常作成するDAO / DTOコンポーネントです。ただし、最終的な戻り値はより柔軟です。コントローラーはModelAndViewオブジェクトをDispatcherServletに返します。ModelAndViewは、ビューオブジェクトまたはビューオブジェクトの論理名を運ぶことができます。ビューオブジェクトの論理名が含まれている場合、DispatcherServletは、応答のレンダリングに使用されるビューオブジェクトを見つけるためにViewResolverを必要とします。最後に、DispatcherServletは、ModelAndViewオブジェクトで指定されたビューオブジェクトに要求をディスパッチします。ビューオブジェクトは、顧客に返される応答をレンダリングする責任があります。
(そごう百科事典より)
@コントローラ:
クラスに作用して、現在のクラスがコントローラークラスであることを示します。この注釈を追加した後、Springフレームワークは、注釈を使用するクラスのメソッドをスキャンし、メソッドが@RequestMapping注釈を使用するかどうかを検出します。
@RequestMapping:
役割:リクエストURLとリクエストの処理方法の間の対応を確立するために使用されます
。スコープ:スコープはメソッドまたはクラスにあります。注釈がクラスで使用される場合、ページへのJSPアクセスはhrefアクセスメソッドのパスの前にある必要があります。クラスのパス
属性を追加します:
パス:パス
値:パス
メソッドのエイリアス:リクエストメソッドの値が列挙型である
ことを確認しますparams: "username"後でこのメソッドをリクエストします。コメントにusernameの値がある場合は、username属性を渡す必要があります次に、usernameの値も渡す値である必要があります
。headers:送信要求に含める必要がある要求ヘッダー
@Controller
public class HelloController {
@RequestMapping(path = "/Hello",params={"username=heihei"},headers={"Accept"})
public String sayHellio() {
System.out.println("Hello SpringMVC");
return "success";
}
}
@RequestParam:
シナリオ:アップロードされたパラメーターがアクセスされたメソッドのパラメーターと一致しない場合、パラメーターを取得できないので、どうすればよいですか?
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name = "name") String username) {
System.out.println("执行了");
System.out.println(username);
return "success";
}
@RequestBody:
これは、key = value&key = valueの形式で直接取得される要求ヘッダーのコンテンツを取得するために使用され
ます。getrequestメソッドは使用できません。
//获取请求体
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body) {
System.out.println(body);
return "success";
}
@RequestHeader:
指定されたリクエストヘッダーを取得します
// 获取请求头的值 需要哪个填哪个 (据说可以防爬虫 可以试下)
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header) {
System.out.println(header);
return "success";
}
@CookieValue:
//获取cookie的值
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
System.out.println(cookieValue);
return "success";
}
@ModelAttribute:
メソッドについてのコメント
この場合、各コントローラーメソッドが呼び出される前にメソッドが呼び出されます。
//获取cookie的值
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
System.out.println(cookieValue);
return "success";
}
@SessionAttributes
コントローラ間でのメソッドパラメータ共有の複数実行に使用されます。
この注釈はクラスでのみ使用できます。
//@SessionAttributes(value = {"msg"}) //把msg存入到session域中
//获取SessionAttributes的值
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model) {
System.out.println("testSessionAttributes执行了");
//底层会存储到request域当中
model.addAttribute("msg", "haha");
return "success";
}
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap model) {
System.out.println("testSessionAttributes执行了");
//从session中获取值
String msg = (String) model.get("msg");
System.out.println(msg);
return "success";
}
@RequestBodyは、リクエストの本文とBeanの対応を自動的にカプセル化します
@ResponseBodytは自動的にBeanをjsonデータに変換します
信頼する:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
ps:jqueryのajaxアップロードを使用する場合、静的リソースインターセプトの問題を解決します
springmvc.xml
<!--前端控制器,哪些静态资源不拦截 两参数:请求路径带js任何文件也都不拦截 以后js下的任何文件都不拦截 -->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
//模拟异步请求和响应
@RequestMapping("/testAjax")
public @ResponseBody User1 testAjax(@RequestBody User1 user1) { //拿到请求体的内容
System.out.println("异步");
//客户端发送的是ajax请求 传的是json字符串,后端把json字符串封装到user1对象中
System.out.println(user1);
//做响应,模拟查询
user1.setUsername("查完了");
user1.setAge(40);
user1.setPassword("ahha");
System.out.println(user1);
//做响应
return user1;
}
上記はいくつかの一般的な注釈です。アップロードインターセプター、ファイルのアップロードとダウンロード、例外処理、その他の記事については後で詳しく説明します。