ホームページ  >  記事  >  Java  >  Spring MVC入門と導入事例(画像と文章で詳しく解説)

Spring MVC入門と導入事例(画像と文章で詳しく解説)

怪我咯
怪我咯オリジナル
2017-06-25 09:59:563772ブラウズ

注: 記事の内容はすべて実験室チュートリアル [Spring MVC 簡易チュートリアル] からの抜粋です

1. Spring MVC とは

Spring MVC は SpringFrameWork の後継製品であり、Spring Web Flow に統合されています。強力かつ柔軟な Web フレームです。 Spring MVC は、リクエストをディスパッチするためのフロントエンド コントローラーとして DispatcherServlet を提供します。 Spring フレームワークは、ストラテジー インターフェイスを介して高度に構成可能です。 Spring MVC には、Java Server Pages (JSP)、Velocity、Tiles、iText、POI などのさまざまなビュー テクノロジも含まれています。 Spring MVC では、コントローラー、モデル オブジェクト、ディスパッチャー、ハンドラー オブジェクトの役割が分離され、カスタマイズが容易になります。

Spring MVC フレームワークは主に DispatcherServlet、プロセッサ マッパー、プロセッサ アダプター、プロセッサ (コントローラー)、ビュー リゾルバー、ビューで構成されます。

2. Spring MVC 実行プロセス

Spring MVC の高レベルのリクエスト処理ワークフローは次のとおりです (写真は Spring 公式 Web サイトから):

Spring MVC入門と導入事例(画像と文章で詳しく解説)

分解後の Spring MVC 実行プロセスは次のとおりです。合計:

Spring MVC入門と導入事例(画像と文章で詳しく解説)

Spring MVC関連インターフェースの説明:

(1) DispatcherServlet

フロントエンドコントローラー、すべてのリクエストはそれを通じて均一に分散され、リクエストは対応するHandlerに分散されます。

(2) HandlerMapping (プロセッサ マッパー)

リクエスト リンクを解析し、リクエスト リンクに基づいてリクエストを実行するクラス (HandlerMapping と呼ばれるハンドラー) を見つけます。

(3) HandlerAdapter (プロセッサアダプター)

特定のメソッドを呼び出してユーザーからのリクエストを処理します。

(4) コントローラー

コントローラーはユーザーリクエストを処理した後、ModelAndView オブジェクトを DispatcherServlet フロントエンドコントローラーに返します。

マクロの観点からは、DispatcherServlet は Web アプリケーション全体のコントローラーであり、ミクロの観点からは、Controller は単一の Http リクエストを処理するコントローラーです。

(5) ViewResolver (ビューリゾルバー)

MdoelAndViewを解決し、MdoelAndView内の論理ビュー名を実際のViewオブジェクトに変更し、MdoelAndView内のModelを取り出します。

Spring MVC は以前に簡単に紹介しましたが、Spring MVC の基本原理とアプリケーションを理解するために、簡単なユーザー登録を例に挙げてみましょう。

3. プロジェクトファイル構造

Spring MVC入門と導入事例(画像と文章で詳しく解説)

4. 開発準備

実験環境のデスクトップでXfceを開き、以下のコードを入力して取得してください。

wget
次のコマンドを入力して .zip ファイルを解凍します:

unzip Spring-jars.zip
5. 実験手順

1 新しいプロジェクトを作成します

Eclipse で新しい Web プロジェクト (動的 Web プロジェクト) を作成し、SpringMVCTest という名前を付けます。コード>。 <p><code>SpringMVCTest

注意勾选 “自动生成 web.xml” 这个选项。

/home/shiyanlou/Spring-jars/ 路径下的全部 jar 包拷贝到项目的 WebContent/WEB-INF/lib/ 目录下。

Spring MVC入門と導入事例(画像と文章で詳しく解説)

2 配置 web.xml 文件

修改 web.xml 文件内容如下:

<?xml  version="1.0" encoding="UTF-8"?>
<web-app>
    <display-name>SpringMVCTest</display-name>

    <!-- 配置 Spring MVC DispatchcerServlet 前端控制器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!-- contextConfigLocation 是参数名称,该参数的值包含 Spring MVC 的配置文件路径 -->
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/springmvc-config.xml</param-value>
        </init-param>
        <!-- 在 Web 应用启动时立即加载 Servlet -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- Servlet 映射声明 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- 监听当前域的所有请求 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!-- 添加 register.jsp 为首页 -->
    <welcome-file-list>
        <welcome-file>register.jsp</welcome-file>
    </welcome-file-list>
</web-app>

在 web.xml 中配置了 DispatchcerServlet,DispatchcerServlet 加载时需要一个 Spring MVC 的配置文件,默认会去 WEB-INF 下查找对应的 [servlet-name]-servlet.xml 文件,如本例中默认查找的是 springmvc-servlet.xml

Spring MVC 的配置文件可以放在任何地方,用 servlet 的子元素 init-param 描述即可,见上述示例代码,这时 DispatchcerServlet 就会去查找 /WEB-INF/springmvc-config.xml

3 springmvc-config.xml 文件

WebContent/WEB-INF/ 目录下新建 Spring MVC 配置文件 springmvc-config.xml,配置 Spring MVC 的 Controller,添加如下代码:

<?xml  version="1.0" encoding="UTF-8"?>
<beans>

    <annotation-config></annotation-config>
    <!-- 配置自动扫描的包,完成 Bean 的创建和自动依赖注入的功能 -->
    <component-scan></component-scan>
     <!-- 这两个类用来配置 annotation 类型的处理器映射器和处理器适配器 -->
    <bean></bean>
    <bean></bean>

    <!-- 配置视图解析器 -->
    <bean>
        <property></property>
        <property></property>
    </bean>

</beans>

上述配置文件中, Spring 使用了扫描机制查找应用程序所有基于注解的控制器类,在本例中,扫描的是 com.shiyanlou.springmvc.controller

「web.xmlを自動的に生成する」オプションにチェックを入れてください

🎜 /home/shiyanlou/Spring-jars/ パスにあるすべての jar パッケージをプロジェクトの WebContent/WEB-INF/lib/ ディレクトリにコピーします。 🎜🎜Spring MVC入門と導入事例(画像と文章で詳しく解説)🎜🎜2 設定web .xml ファイル🎜🎜 web.xml ファイルの内容を次のように変更します:🎜
package com.shiyanlou.springmvc.entity;

import java.io.Serializable;

public class User implements Serializable {

    private static final long serialVersionUID = 1L;
    private Integer id;
    private String username;
    private String password;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

}
🎜 web.xml で DispatchcerServlet を構成します。DispatchcerServlet は、ロード時に Spring MVC 構成ファイルを必要とします。 WEB に移動 -INF で、対応する [servlet-name]-servlet.xml ファイルを検索します。たとえば、この例では、デフォルトの検索は springmvc です。 -servlet.xml。 🎜🎜Spring MVC 設定ファイルはどこにでも配置できます。サーブレットのサブ要素 init-param を使用して記述します。上記のコード例を参照してください。その後、DispatchcerServlet は /WEB-INF を検索します。 /springmvc-config.xml。 🎜🎜3 springmvc-config.xml ファイル🎜🎜 Spring を設定するために、WebContent/WEB-INF/ ディレクトリに新しい Spring MVC 設定ファイル springmvc-config.xml を作成します。 MVC コントローラー 、次のコードを追加します。 🎜
package com.shiyanlou.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.shiyanlou.springmvc.entity.User;

/**
 * UserController 是一个基于注解的控制器
 * 可以同时处理多个请求动作
 */
@Controller
public class UserController {
    
    /**
    * RequestMapping 用来映射一个请求和请求的方法
    * value="/register" 表示请求由 register 方法进行处理
    */
    @RequestMapping(value="/register")
    public String Register(@ModelAttribute("form") User user, Model model) {  // user:视图层传给控制层的表单对象;model:控制层返回给视图层的对象
        // 在 model 中添加一个名为 "user" 的 user 对象
        model.addAttribute("user", user);
        // 返回一个字符串 " success" 作为视图名称
        return "success";
    }
}
🎜 上記の構成ファイルでは、Spring はスキャン メカニズムを使用して、アプリケーション内のすべてのアノテーション ベースのコントローラー クラスを検索します。この場合、スキャンは com.shiyanlou.springmvc です。 controller パッケージとそのサブパッケージ内のすべての Java ファイル。 🎜🎜アノテーション タイプのプロセッサ マッパー DefaultAnnotationHandlerMapping とプロセッサ アダプター AnnotationMethodHandlerAdapter が同時に構成され、DefaultAnnotationHandlerMapping がリクエストに従ってマッピングを見つけ、AnnotationMethodHandlerAdapter がコントローラー クラスの @RequestMapping アノテーション メソッド (後述) の呼び出しを完了します。 🎜

最后配置的视图解析器 InternalResourceViewResolver 用来解析视图,将 View 呈现给用户。视图解析器中配置的 prefix表示视图的前缀, suffix表示视图的后缀。

注:在 Spring4.0 之后,如果不配置处理映射器、处理器适配器和视图解析器,会使用默认的。

4 实体类 User

在项目目录 /Java Resources/src 的包 com.shiyanlou.springmvc.entity 下新建类 User.java,包含 id、username、password 和 age 属性,代码如下:

package com.shiyanlou.springmvc.entity;

import java.io.Serializable;

public class User implements Serializable {

    private static final long serialVersionUID = 1L;
    private Integer id;
    private String username;
    private String password;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

}

5 Controller 类的实现

在包 com.shiyanlou.springmvc.controller 下新建 Controller 类 UserController.java,具体解释注释已经给出,代码如下:

package com.shiyanlou.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.shiyanlou.springmvc.entity.User;

/**
 * UserController 是一个基于注解的控制器
 * 可以同时处理多个请求动作
 */
@Controller
public class UserController {
    
    /**
    * RequestMapping 用来映射一个请求和请求的方法
    * value="/register" 表示请求由 register 方法进行处理
    */
    @RequestMapping(value="/register")
    public String Register(@ModelAttribute("form") User user, Model model) {  // user:视图层传给控制层的表单对象;model:控制层返回给视图层的对象
        // 在 model 中添加一个名为 "user" 的 user 对象
        model.addAttribute("user", user);
        // 返回一个字符串 " success" 作为视图名称
        return "success";
    }
}

6 JSP 页面

(1)register.jsp

WebContent 目录下新建一个 JSP 页面命名为 register.jsp,代码如下:

nbsp;html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<meta>
<title>register page</title>


    
        
User registration
        

                      

        

                      

        

                      

        

                                  

    

(2)success.jsp

WebContent/WEB-INF 目录下新建文件夹 views,并在该路径下新建一个 JSP 页面命名为 success.jsp,代码如下:

nbsp;html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<meta>
<title>success page</title>


    <h5>login was successful</h5>
    <p>
        name:${requestScope.user.username}<br> password:${requestScope.user.password}<br> age:${requestScope.user.age}<br>
    </p>

7 运行测试

注:由于在线环境的资源问题,这里启动 tomcat 比较慢,需要大家耐心等待几分钟。如果遇到 Tomcat 启动超时的问题,请按照下图的方法延长 Tomcat 的启动时间。

Spring MVC入門と導入事例(画像と文章で詳しく解説)

右击 SpringMVCTest 工程,Run As->Run on Server,保持默认选项不变,点击 Finish,一会儿即可看到结果:

Spring MVC入門と導入事例(画像と文章で詳しく解説)

输入注册信息,点击注册按钮,结果如下:

Spring MVC入門と導入事例(画像と文章で詳しく解説)

Spring MVC入門と導入事例(画像と文章で詳しく解説)

以上がSpring MVC入門と導入事例(画像と文章で詳しく解説)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。