SpringMVC [SpringMVC(エントリケース、実行処理、単純なデータ型としてカプセル化、オブジェクト型としてカプセル化、コレクション型としてカプセル化)] (1) - 網羅的かつ詳細な解説(学習のまとめ --- 入門から深化まで)

 

 

目次

Spring MVC の概要

SpringMVCエントリーケース

SpringMVC実行処理 

 Spring MVCのコンポーネント

コンポーネントのワークフロー 

単純なデータ型としての SpringMVC パラメーター取得_encapsulation

SpringMVCパラメータacquisition_encapsulationをオブジェクトタイプとして使用 

単一のオブジェクトをカプセル化します

コレクション型としての SpringMVC パラメーター取得_encapsulation 

リスト コレクションとしてカプセル化される

単純なデータ型のコレクションとしてカプセル化される


 

Spring MVC の概要

 MVCモデル

MVC の正式名は Model View Controller で、Web アプリケーションを設計および作成するためのパターンです。これら 3 つの単語は、Web アプリケーションの 3 つの部分を表します。

モデル:データモデルを指します。データを保存し、ユーザー要求を処理するためのビジネス ロジック。Webアプリケーションでは、JavaBeanオブジェクトやビジネスモデルなどはすべてModelに属します。

ビュー (view):モデル内のデータ (通常は jsp または html ファイル) を表示するために使用されます。

コントローラー (コントローラー):ユーザー操作を処理するアプリケーションの一部です。ビューによって行われたリクエストを受け入れ、データを処理のためにモデルに渡し、処理された結果を表示のためにビューに渡します。

 SpringMVC

SpringMVC は、MVC パターンに基づいた軽量の Web フレームワークであり、Spring フレームワークのモジュールであり、Spring と直接統合できます。SpringMVC はサーブレット テクノロジを置き換えるもので、一連のアノテーションを使用して、インターフェイスを実装せずに、単純な Java クラスをコントローラとしてリクエストを処理します。

SpringMVCエントリーケース

 次にSpringMVCのエントリーケースを書きます。

1. Maven を使用して Web プロジェクトを作成し、パッケージ構造を完成させます。

2. 関連する依存関係と Tomcat プラグインを導入する

<dependencies>
    <!-- Spring核心模块 -->
    <dependency>
      <groupId>org.springframework</groupId>
        <artifactId>springcontext</artifactId>
        <version>5.2.12.RELEASE</version>
    </dependency>
    <!-- SpringWeb模块 -->
    <dependency>
      <groupId>org.springframework</groupId>
        <artifactId>springweb</artifactId>
        <version>5.2.12.RELEASE</version>
    </dependency>
    <!-- SpringMVC模块 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>springwebmvc</artifactId>
        <version>5.2.12.RELEASE</version>
    </dependency>
    <!-- Servlet -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servletapi</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <!-- JSP -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>
 </dependencies>
<build>
    <plugins>
        <!-- tomcat插件 -->
        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <port>8080</port>
                <path>/</path>
                <uriEncoding>UTF8</uriEncoding>
                <server>tomcat7</server>
                <systemProperties>
                  <java.util.logging.SimpleFormatter.format>%1$tH:%1$tM:%1$tS %2$s%n%4$s: %5$s%6$s%n
                  </java.util.logging.SimpleFormatter.format>
                </systemProperties>
            </configuration>
        </plugin>
    </plugins>
</build>

3. フロント コントローラーの DispatcherServlet を web.xml で設定します。

<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <!--SpringMVC前端控制器,本质是一个 Servlet,接收所有请求,在容器启动时就会加载-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</paramvalue>
        </init-param>
        <load-on-startup>1</load-onstartup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

4 SpringMVC コア設定ファイル springmvc.xml を書き込みます。これは Spring 設定ファイルと同じ方法で記述されます。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 扫描包 -->
    <context:component-scan base-package="com.tong"/>
    <!-- 开启SpringMVC注解的支持 -->
    <mvc:annotation-driven/>
</beans>

5. コントローラーを作成する

@Controller
public class MyController1 {
    // 该方法的访问路径是/c1/hello1
    @RequestMapping("/c1/hello1")
    public void helloMVC(){
        System.out.println("hello SpringMVC!");
   }
}

6 Tomcat プラグインを使用してプロジェクトを開始し、http://localhost:8080/c1/hello1 にアクセスします。

SpringMVC実行処理 

 Spring MVCのコンポーネント

DispatcherServlet:フロント コントローラー。すべてのリクエストを受け入れ、他のコンポーネントを呼び出します。

HandlerMapping:プロセッサ マッパー。設定に従ってメソッドの実行チェーンを見つけます。

HandlerAdapter:ハンドラー アダプター。メソッドの種類に応じて、対応するハンドラーを検索します。

ViewResolver:ビュー リゾルバー、指定されたビューを検索します。

コンポーネントのワークフロー 

1. クライアントはリクエストをフロント コントローラーに送信します。

2. フロントエンド コントローラーはリクエストをプロセッサ マッパーに送信し、プロセッサ マッパーはパスに従ってメソッドの実行チェーンを見つけて、それをフロントエンド コントローラーに返します。

3. フロント コントローラーはメソッドの実行チェーンをプロセッサ アダプターに送信し、プロセッサ アダプターはメソッド タイプに応じて対応するプロセッサを見つけます。

4. プロセッサはメソッドを実行し、結果をフロント コントローラに返します。

5. フロント コントローラーは結果をビュー リゾルバーに送信し、ビュー リゾルバーはビュー ファイルの場所を見つけます。

6. ビューはデータをレンダリングし、結果をクライアントに表示します。

単純なデータ型としての SpringMVC パラメーター取得_encapsulation

 

 サーブレットでは、request.getParameter(name)を通じてリクエスト パラメータを取得します。このアプローチには 2 つの問題があります。

 1. リクエストパラメータが多い場合、コードの冗長性が生じます。

 2. 容器としっかりと結合します。

SpringMVC は、リクエスト データを取得するためのパラメータ インジェクションをサポートしています。つまり、リクエスト パラメータはメソッド パラメータに直接カプセル化されます。使用方法は次のとおりです。

 1. コントローラーメソッドを書く

// 获取简单类型参数
@RequestMapping("/c1/param1")
public void simpleParam(String username,int age){
    System.out.println(username);
    System.out.println(age);
}

2. メソッドアクセス時のリクエストパラメータ名はメソッドパラメータ名と同じとなり、自動カプセル化が完了します。

SpringMVCパラメータacquisition_encapsulationをオブジェクトタイプとして使用 

 SpringMVC は、次のように記述されたオブジェクトへのパラメータの直接カプセル化をサポートしています。

単一のオブジェクトをカプセル化します

1. エンティティクラスを作成する

public class Student {
    private int id;
    private String name;
    private String sex;
    // 省略getter/setter/tostring
}

2. コントローラーメソッドを書く

// 获取对象类型参数
@RequestMapping("/c1/param2")
public void objParam(Student student){
    System.out.println(student);
}

3. メソッドにアクセスするとき、リクエストパラメータ名がメソッドパラメータの属性名と同じであれば、自動カプセル化が完了します。

関連するオブジェクトをカプセル化する 

1. エンティティクラスを作成する

public class Address {
    private String info; //地址信息
    private String postcode; //邮编
    // 省略getter/setter/tostring
}
public class Student {
    private int id;
    private String name;
    private String sex;
    private Address address; // 地址对象
    // 省略getter/setter/tostring
}

2. コントローラーメソッドを書く

// 获取关联对象类型参数
@RequestMapping("/c1/param3")
public void objParam2(Student student){  
    System.out.println(student);
}

3. メソッドにアクセスするとき、リクエストパラメータ名がメソッドパラメータの属性名と同じであれば、自動カプセル化が完了します。

フォームを使用してパラメーターを含むリクエストを送信することもできます。

<%@ page
contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
     <title>表单提交</title>
</head>
<body>
     <form action="/c1/param3" method="post">
         id:<input name="id">
         姓名:<input name="name">
         性别:<input name="sex">
         住址:<input name="address.info">
         邮编:<input name="address.postcode">
         <input type="submit">
     </form>
 </body>
</html>

コレクション型としての SpringMVC パラメーター取得_encapsulation 

 SpringMVC は、次のように記述された List または Map コレクションとしてのパラメーターのカプセル化をサポートします。

リスト コレクションとしてカプセル化される

単純なデータ型のコレクションとしてカプセル化される

1. コントローラーメソッドを書く

// 绑定简单数据类型List参数,参数前必须添加
@RequestParam注解
@RequestMapping("/c1/param4")
public void listParam(@RequestParamList<String> users){
    System.out.println(users);
}

このメソッドは配列型をバインドすることもできます。

@RequestMapping("/c1/param5")
public void listParam2(@RequestParam String[] users){
    System.out.println(users[0]);
    System.out.println(users[1]);
}

2. リクエストパラメータの書き込み方法

オブジェクト型のコレクションとしてカプセル化される 

SpringMVC は、オブジェクト型の List コレクションへのパラメーターのカプセル化をサポートしていませんが、List プロパティを使用してオブジェクトにカプセル化することはできます。

1. エンティティクラスを作成する

public class Student {
    private int id;
    private String name;
    private String sex;
    private List<Address> address; // 地址集合
    // 省略getter/setter/tostring
}

2. コントローラーメソッドを書く

// 对象中包含集合属性
@RequestMapping("/c1/param6")
public void listParam3(Student student){
    System.out.println(student);
}

3. リクエストパラメータの書き込み方法

マップ コレクションとしてカプセル化 

同様に、SpringMVC が Map コレクションをカプセル化したい場合は、Map 属性を持つオブジェクトにカプセル化する必要があります。

1. エンティティクラスを作成する

public class Student {
    private int id;
    private String name;
    private String sex;
    private Map<String,Address> address;
    // 地址集合
    // 省略getter/setter/tostring
}

2. コントローラーメソッドを書く

// 对象中包含Map属性
@RequestMapping("/c1/param7")
public void mapParam(Student student){  
    System.out.println(student);
}

3. リクエストパラメータの書き込み方法

おすすめ

転載: blog.csdn.net/m0_58719994/article/details/131744917