Spring MVC とは
MVC はソフトウェア アーキテクチャ パターンであり、ソフトウェア システムを 3 つの基本部分 (モデル、ビュー、コントローラー) に分割します。
Spring MVC は、MVC のアイデアを具体的に実装したものです。
Spring MVC を学習するには、次の 3 つの関数を習得する必要があります。
-
接続の機能: ユーザー (ブラウザ) を Java プログラムに接続します。つまり、アドレスにアクセスすると Spring プログラムを呼び出すことができます。
@RequestMapping("/hi")
@RequestMapping の機能は、URL ルートを登録することであり、このルートを通じて、フロントエンド リクエストはバックエンド プログラムと対話できます。@RequestMapping アノテーションはメソッドとクラスの両方を変更できますが、アクセス レベルは異なります。
@RequestMapping がパラメーターを指定しない (ルーティング アドレスのみを設定する) 場合、このメソッドは Get リクエストと Post リクエストの両方のタイプをサポートします。
メソッド属性が @RequestMapping に設定されている場合、設定されたリクエスト タイプのみをサポートでき、他のタイプではエラー (405) が報告されます。概要: @RequestMapping、@GetMapping、@PostMapping
-
パラメータを取得する機能: ユーザーはアクセス時にいくつかのパラメータを持ってきて、プログラム内でパラメータを取得する方法を見つけます。
2.1 単一パラメータを取得する@GetMapping("/reg") // 注意,前端传的参数 命名必须也是 name. public String reg(String name){ return "注册:"+name; }
@GetMapping("/reg") // 注意,前端传的参数 命名必须也是 name. public String reg(String name){ return "注册:"+name; }
@RequestParam は、リクエスト パラメーターの名前を変更できるだけでなく、このパラメーターが必須パラメーターであることを確認することもできます。
フロントエンドは時刻を送信し、バックエンドはcreatetimeを送信します。必要@GetMapping("/time") public String setTime(@RequestParam(value="time",required = false) String createtime){ return "时间:"+createtime; }
2.2 オブジェクトの取得
渡す必要があるパラメータが多すぎる場合は、オブジェクトを直接渡すことを検討できます。まず、モデルの下に User エンティティ クラスを作成します。@Setter @Getter @ToString public class User { private String name; private int age; private String password; private int sex; }
@GetMapping("/reg2") public Object reg2(User user){ return user; }
2.3 json オブジェクトを渡す
Postman を使用して json オブジェクトを渡しました
が、バックエンドが JSON オブジェクトを取得していないことがわかりました。解決策: JSON オブジェクトを取得するには、@RequestBody アノテーションを追加する必要があります。
@GetMapping("/reg2") public Object reg2(@RequestBody User user){ return user; }
2.4 URL 内のパラメータ @PathVariable を取得する
@PostMapping("/p/{name}/{password}") public Object param(@PathVariable String name,@PathVariable String password){ return name+" "+password; }
2.5 ファイルのアップロード@RequestMapping("/file") public String upload(@RequestPart("myfile") MultipartFile file) throws IOException { // 保存文件 file.transferTo(new File("D:\\test.jpg")); return "上传成功"; }
@RequestMapping("/file2") public String upload2(@RequestPart("myfile") MultipartFile file) throws IOException { // 1.上传文件目录(从配置文件中读取) String basePath = uploadPath; // 2.生成动态的文件名 String fileName = UUID.randomUUID()+ (file.getOriginalFilename().substring( file.getOriginalFilename().lastIndexOf(".") )); file.transferTo(new File(basePath+fileName)); return "上传成功"; }
2.6 Cookie を取得する本来の方法/** * Spring MVC(基于Servlet)所有映射方法中都会内置两个参数:HttpServletRequest HttpServletResponse * */ @RequestMapping("/getCk") public Cookie[] getCk(HttpServletRequest request, HttpServletResponse response){ Cookie[] cookies = request.getCookies(); return cookies; }
Cookie を構築し、Cookie とセッション アノテーションを取得する
簡単な方法
: @CookieValue@RequestMapping("/getCk2") public String getCk2(@CookieValue("bite") String bite){ return bite; }
ヘッダーの取得: @RequestHeader@RequestMapping("/getua") public String getUa(@RequestHeader("User-Agent") String userAgent){ return userAgent; }
セッションへのアクセスと取得// 相当于登录存储Session的操作 @RequestMapping("/getSession") public String setSession(HttpServletRequest request){ HttpSession session = request.getSession(true); if(session!=null){ session.setAttribute("username","ls"); } return "用户登录成功"; }
/** * 验证用户是否登录 * */ @RequestMapping("/getSession2") public String getSession(HttpServletRequest request){ String username = "无"; HttpSession session = request.getSession(false); if(session!=null && session.getAttribute("username")!=null){ username = (String) session.getAttribute("username"); } return username; }
セッションを読み取る簡単な方法:
@RequestMapping("/getSession3") public String getSession3(@SessionAttribute(value = "username",required = false) String username){ return username; }
-
データを出力する機能: ビジネスロジックを実行した後、プログラムの実行結果をユーザーに返す必要があります。
デフォルトでは、HTML ページが返されますが、@ResponseBody アノテーションを追加すると、ページ以外のデータを返すことができます。@ResponseBody を使用してクラスを変更すると、このクラスのすべてのメソッドが非ページ データを返すことになります。
@ResponseBody を追加しないとエラーが報告されます
@RequestMapping("/gethtml") public String getHtml(String name){ return "<h1>你好:"+name+"</h1>"; }
リクエストの転送とリクエストのリダイレクトについて
@RequestMapping("/index")
public String index(){
return "redirect:/index.html";
}
@RequestMapping("/index2")
public String index2(){
return "forward:/index.html";
}
- リクエストの転送 (forward): サーバーはクライアントのリクエストを転送し、それに応じて結果をクライアントに送信します。URL アドレスは変更されません。リクエスト転送を使用すると、外部リソースが失われ、アクセスできなくなる可能性があります。
- リクエストのリダイレクト(リダイレクト):サーバーがアクセス先のアドレスにリクエストを再定義し、URLアドレスが変更されます。したがって、リクエストのリダイレクトとターゲット アドレスへの直接アクセスの効果はまったく同じであり、外部リソースが失われることはありません。
結合されたアノテーション
@RestController = @Controller + @ResponseBody