SpringMVCの紹介
背景分析
大規模なソフトウェアシステムの設計では、ビジネスは一般に比較的複雑です。すべてのビジネス実装コードが絡み合っていると、ロジックが不明瞭、読みやすさが低下し、メンテナンスが困難になり、変更が全身に影響を与えるなどの問題が発生します。この問題をよりよく解決するために、私たちが今よく言う階層化されたアーキテクチャ設計があります。
MVCとは
MVCは、ソフトウェアアーキテクチャの設計アイデアです。MVCアーキテクチャに基づいて、アプリケーションソフトウェアは階層的に設計および実装されます。たとえば、ビューレイヤー(ビュー)、コントロールレイヤー(コントローラー)、モデルレイヤー(モデル)に分割できます。レイヤーデザインにより、プログラムの柔軟性とスケーラビリティが向上します。これにより、複雑なアプリケーションが簡素化されるため、それぞれの役割を実現し、最善を尽くします。大規模なアプリケーションの開発に適しています。
SpringMVCの概要
Spring MVCは、SpringフレームワークにMVC設計アイデアを実装したものです。このアイデアに基づいて、Springフレームワークは、MVCアーキテクチャに基づいて要求と応答をより適切に処理するために、いくつかの関連オブジェクトを設計しました。その単純なアーキテクチャを図に示します。
その中で:
1)DispatcherServletは、すべてのクライアント要求を処理するためのエントリポイントであり、要求の転送を担当します。
2)RequestMappingは、リクエストURLとバックエンドハンドラオブジェクト間のマッピングを保存する役割を果たします。
3)ハンドラーは、DispatcherServletオブジェクトによって転送された要求データを処理するために使用されます。
4)ViewResolverは、すべてのHandlerオブジェクトの応答結果のビューを処理する責任があります。
春のMVCクイックスタート
準備オーケー
最初のステップ:プロジェクトモジュールを作成します。基本情報を図に示します。
ステップ2:プロジェクトの依存関係を追加します(モジュールの作成時または作成後)。コードは次のとおりです。
Spring Web依存関係(Spring mvcサポートが提供され、tomcatが埋め込まれます)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Thymeleafの依存関係(解析および操作用のページテンプレートとしてhtmlを使用する関連オブジェクトを提供します)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
ステップ3:プロジェクトを開始し、コンソールの起動ステータスがOKかどうかを確認します
統計カタログの分析と適用
staticsディレクトリは、springbootプロジェクトの作成時にWeb依存関係が追加された後に自動的に作成されるディレクトリです。このディレクトリには、html、css、js、html、およびその他の関連リソースを格納できます。これらのリソースには、サーバーの起動後にブラウザから直接アクセスできます。例えば:
ステップ1:staticsディレクトリにindex.htmlページを作成します。コードは次のとおりです。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>The First Html Page</h1>
</body>
</html>
ステップ2:図に示すように、サーバーを起動し、アクセステストを直接実行します
テンプレートディレクトリの分析と適用
テンプレートディレクトリは、springbootプロジェクトの作成時に、自動的に作成されたディレクトリにthymeleafの依存関係を追加します。一部のhtmlテンプレートはこのディレクトリに保存されます。このテンプレートページには、ブラウザのURLから直接アクセスできません。バックエンドコントローラに基づいており、メソッドでページを定義する必要があります。応答、例:
最初のステップ:TemplateControllerとメソッドを定義します。コードは次のとおりです。
package com.cy.pj.health.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TemplateController {
@RequestMapping("doTemplateUI")
public String doTemplateUI(){
return "default";
}
}
ステップ2:テンプレートディレクトリでテンプレートページdefault.htmlを定義します。コードは次のとおりです。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>The Default Template page</h1>
</body>
</html>
その中で、default.htmlをtemplatesサブディレクトリに配置する場合は、次のように、構成ファイルでthymeleafプレフィックスも構成する必要があります。
spring.thymeleaf.prefix=classpath:/templates/module/
3番目のステップ:図に示すように、アクセステストのサービスを開始します。
SpringMVC応答データ処理
ModelAndViewアプリケーション
ビジネスがあり、応答データをModelAndViewオブジェクトにカプセル化してから、クライアントに応答する必要があります。それを実現するにはどうすればよいですか。
最初のステップ:### ModelAndViewontrollerとメソッドを定義し、ページとデータフォームを返します。
package com.cy.pj.module.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ModelViewController {
@RequestMapping("/doModelAndView")
public String doModelAndView(Model model) {
model.addAttribute("username", "jason");
model.addAttribute("state", true);
return "default";
}
}
返品ページのフォームコード:
package com.cy.pj.health.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PageController {
//返回页面
@RequestMapping("/getview")
public String doHealthUI(){
return "default";
}
}
ステップ3:アクセステストのためにプロジェクトを開始し、出力結果を確認します。次に例を示します。
JSONデータ応答
ページを必要とせず、応答データをjsonに変換してから、クライアントに応答するだけのビジネスがあります。それを実現するにはどうすればよいですか。
最初のステップ:ResponseResultオブジェクトを定義して、応答データをカプセル化します。次に例を示します。
package com.cy.pj.module.pojo;
public class ResponseResult {
private Integer code;
private String message;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
ステップ2:JsonObjctControllerとメソッドを定義します。コードは次のとおりです。
package com.cy.pj.module.controller;
@RestController
//@RestController=@Controller+@ponseBody
public class JsonObjectController {
@RequestMapping("/doConvertResponseToJson")
public ResponseResult doConvertResponseToJson(){
ResponseResult rs=new ResponseResult();
rs.setCode(200);
rs.setMessage("OK");
return rs;
}
@RequestMapping("/doConvertMapToJson")
public Map<String,Object> doConvertMapToJson(){
Map<String,Object> map=new HashMap<>();
map.put("username","刘德华");
map.put("state",true);
return map;
}
@RequestMapping("/doPrintJSON")
public void doPrint(HttpServletResponse response)throws Exception{
Map<String,Object> map=new HashMap<>();
map.put("username","刘德华");
map.put("state",true);
//将map中的数据转换为json格式字符串
ObjectMapper om=new ObjectMapper();
String jsonStr=om.writeValueAsString(map);
System.out.println("jsonStr="+jsonStr);
//将字符串响应到客户端
//设置响应数据的编码
response.setCharacterEncoding("utf-8");
//告诉客户端,要向它响应的数据类型为text/html,编码为utf-8.请以这种编码进行数据呈现
response.setContentType("text/html;charset=utf-8");
PrintWriter pw=response.getWriter();
pw.println(jsonStr);
}
}
3番目のステップ:アクセステストのためにサーバーをそれぞれ起動します。コードは次のとおりです。
異常分析:
要求されたリソースは存在しません。ページに404が表示されます。
テンプレートの解析が正しくないか、ページが存在しないと500が表示されます
SpingMVC要求パラメータデータ処理
ビジネスを実行する過程で、通常、いくつかの要求パラメーターをサーバーに渡します。サーバーはどのようにしてパラメーターを取得し、メソッドパラメーターに挿入しますか?
準備オーケー
ユーザーがクライアント要求を処理するためのコントローラーオブジェクトを定義します。次に例を示します。
package com.cy.pj.module.controller;
import com.cy.pj.module.pojo.RequestParameter;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
public class ParamObjectController {}
直接測定
ParamObjectControllerにメソッドを追加して、直接メソッドに基づいてクライアント要求パラメーターを受け入れます。次に例を示します。
@GetMapping("/doParam01")
public String doMethodParam(String name){
return "request params "+name;
}
訪問するとき、次のようなパラメータを渡すことができます。次に例を示します。
http://localhost/doParam01?name=beijing
POJOオブジェクトメソッド
クライアント要求パラメータを受け入れるようにpojoオブジェクトを定義します。次に例を示します。
package com.cy.pj.module.pojo;
public class RequestParameter {
private String name;
//......
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "RequestParam{" +
"name='" + name + ''' +
'}';
}
}
次のように、pojoオブジェクトを使用してメソッドパラメータを受け取るControllerメソッドを定義します。
@RequestMapping("/doParam02")
public String doMethodParam(RequestParameter param){//pojo对象接收请求参数,pojo对象中需提供与参数名相匹配的set方法
return "request params "+param.toString();
}
アクセステスト用のサービスを開始するには、次のようなパラメータを渡すことができます。次に例を示します。
http://localhost/doParam02?name=beijing
マップオブジェクトメソッド
pojoオブジェクトを使用してリクエストパラメータを受信したくない場合は、mapオブジェクトを使用して受信できますが、それを実現するにはどうすればよいですか?
次に、マップオブジェクトに基づいて要求パラメータを受信するようにControllerメソッドを定義します。
@GetMapping("/doParam03")
public String doMethodParam(@RequestParam Map<String,Object> param){
return "request params "+param.toString();
}
その中で、mapは要求パラメーターを受け取り、@ RequestParamを使用してパラメーターを記述する必要があります。
アクセステスト用のサービスを開始するには、次のようなパラメータを渡すことができます。次に例を示します。
http://localhost/doParam03?name=beijing
まとめ(まとめ)
この章では、springbootプロジェクトでのspring mvcテクノロジーのアプリケーションの概要を説明し、実際のプロジェクトのビジネスアプリケーションを組み合わせて、MVCでの要求データの取得と応答データの処理の基本的なプロセスについて説明します。