Spring-MVC : 1
プロジェクトの作成
プロジェクトのMavenメニューからUpdate Projectをクリックして更新します.
「/」パスでPathセクションを処理することで、プロジェクトを実行できます.
プロジェクトのロード構造について
web.xml:Tomcatドライバの設定
root-context.xml, servlet-context.xml:この2つのファイルはspringに関連する設定です.
web.xml
context-paramにはroot-contextが含まれています.xmlのパスが設定されています.
root-context.xmlファイルを処理した後、root-context.xmlファイルのbean(オブジェクト)設定が役立ちます.
root-conext.xmlで定義したオブジェクトはスプリングの領域内で作成され、オブジェクト間の依存性が処理されます.
ContextLoaderListener Springコンテナを作成します.
Springはすべてのサーブレットとフィルタを共有する役割を果たしているそうです.
root-context.xmlのbeans図の画像.
ホテル、レストラン、シェフの依存性が扱われています.
root-context.xmlの処理が完了すると、DispatcherServiceletに関する設定が有効になります.
まずこの絵を見てから行きましょう.
DispatcherServiceletの動作原理
HandleMappingインタフェースを実現する複数のオブジェクトのうち,RequestMappingHandleMappingのような場合は,@RequestMapping操作を適用したことによって開発者が判断する.
適切なコントローラが見つかった場合は、HandlerAdapterを使用して操作します.
この場合,Viewに渡す必要があるデータは主にModelというオブジェクトに含まれる.
コントローラは異なるタイプの結果を返し、この処理にはviewResolverを使用します.
生成された応答はDispatcherServiceletによって送信されます.
すべての要求はDispatcherServiceletによって設計され、この方式はFront-Controllerモードである.
「Front-Controller」モードを使用すると、すべてのリクエストの処理が指定された方法で割り当てられます.
これらの特徴は厳密な構造を生み出すことができる.
スプリングMVCを使用して作成されたコントローラの特性
Controller
@ControllerというSpring MVCで使用される@ArnotationをExControllerに適用します.
作成したExControllerクラスは、自動的にスプリングのオブジェクト(bean)として登録されます.
この部分はservlet-contextです.xmlファイルを見ればわかります.
これはservlet-contextですこれはxmlの一部です.
com.xml.実際には、mvcプロジェクトを作成するときにデフォルトで生成されるパッケージで、HomeControllerが含まれています.
SpringMVC作成時com.velog.ioというパッケージがあり、そのパッケージの下にHomeControllerがあります.
root-context.xml, servlet-context.xml
この2つのxmlファイルはcomponent-scanを行います.
パッケージで宣言されたクラスをスキャンするときに、スプリングでオブジェクト(bean)を設定します.
@これらのツールを持つクラスを理解し、必要に応じてオブジェクトとして作成して管理します.
クラスがスプリングで管理されている場合、クラスの横に図に示すように「s」シェイプのアイコンが追加されます.
@RequestMapping
現在のクラス内のすべてのメソッドのデフォルトURLのパスです.
ex)TestControlクラスでは、
@ResquestMapping(“/sample/*”).
/sample/aaa
/sample/bbb
どちらのパスもACControllerで処理されます.
@Controllerは他の属性を指定できません.
@RequestMappingの場合は、いくつかのプロパティを追加できます.
RequestMapping(value="/basic", method=RequestMethod.GET)
でも今はこの方法より.
@GetMapping("/basic")
@PostMapping("/basic")と書きます.
GetとPostを同時にサポートする必要がある場合は、
@RequestMapping(value="/abc", method={RequestMethod.GET, RequestMethod.Post})
コントローラからパラメータを収集
サンプルのSamDTOクラスを作成します.
@Data
public class SamDTO{
private String name;
private int age;
}
Lombokの@Data操作を使用してgetter/setter、equals()、toString()を作成します.@Controller
@RequestMapping("/sample/*")
@Log4j
public class TestController{
@GetMapping("/ex01")
public String ex01(SamDTO dto){
log.info(""+dto);
return "ex01";
}
}
ACControllerのメソッドがSamDTOをパラメータとして使用している場合.SamDTOのsetterメソッドは、自動的に操作され、パラメータが収集されます.
ACcontrollerのパスは「/sample*」です.
ただしex 01()メソッドではGetMappingが設定されている.
呼び出されたパスはsample/ex 01です.
必要なパラメータはURLの後ろにありますか?「name=AAA&age=10」という形でコールを追加すると、
以下のログが記録されます.
INFO : packageName.AController-SamDTO(name=AAA, age=10)
パラメータの収集と変換
@Controllerがパラメータを収集する方法は、パラメータタイプに応じて自動的に変換されます.
ex>の上記の例では、intタイプとして宣言されたage(SamDTO)が自動的に数値に変わります.
@RequestParam
基本資料型や文字列などを使用する場合は、パラメータタイプのみを宣言する方法を使用します.
ex 02()メソッドは、@requestParam宣言を使用してパラメータに記述されます.
@requestParamパラメータで使用する変数名と渡されたパラメータ名が異なる場合に便利です
@RequestParamを使用する場合.
@GetMapping("/ex02")
public String ex02(@RequestParam("name") String name,
@RequsetParam("age") int age){
log.info("name:"+name);
log.info("age:"+age);
return "ex02";
}
@RequestParamを使用すると、List、Array配列も処理できます@GetMapping("/ex02List")
public String ex02List( @RequestParam("ids")ArrayList<String> ids){
log.info("ids: "+ids);
return "ex02List";
スプリングは、パラメータのタイプを表示し、オブジェクトを作成します.パラメータのタイプは、実際のArrayListクラスとして指定され、Listクラスではありません.
このコードに対しては、「ids」というパラメータが複数渡されても、ArrayListが生成されて自動的に収集される.
/sample/ex02List?ids=111&ids=222&ids=333.
INFO:パッケージ.コントローラ-ids:{111222333}
これでログが撮れます
次に、オブジェクト自体をリストとして作成して処理します.
SamListDTO.Javaでオブジェクトを作成します.
@Data
public class SamListDTO{
private List<SamDTO> list;
public SamListDTO(){
list = new ArrayList<>();
}
}
Controller.java @GetMapping("/ex02Bean")
public String ex02Bean(SamListDTO list){
log.info("list dtos: "+list);
return "ex02Bean";
}
URLプロジェクトパス/sample/ex 02 beanをテストしますか?list[0].name=aaa&list[2].name=bbb[]Tomcatバージョンによっては、このセクションでエラーが発生する可能性があります.
==>/sample/ex02Bean?list%5B0%5D.name=aaaと呼ぶと
INFO:パッケージ.コントローラ-listdtos:SamList=[SamDTO(name=aaa,age=0)
これでログが撮られていることを確認できます.
@DateTimeFormat
パラメータとして使用されるインスタンス変数に@DateTimeFormatを適用してタイプ変換できます.
@Data
public class TodoDTO{
private String title;
@DateTimeFormat(pattern="yyyy/MM/dd")
private Date dueDate;
}
Test URL : localhost:~/sample/ex03?title=testFile&dueDate=2018/01/01INFO : package.Controller - todo: TodoDTO(title=testFile, dueDate=Mon Jan 01 00:00:00 KST 2018
これでログが撮られていることを確認できます.
注意:Spring Webプロジェクトのコード学習
Reference
この問題について(Spring-MVC : 1), 我々は、より多くの情報をここで見つけました https://velog.io/@ddwj/Spring-MVC-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol