注: 記事の内容はすべて実験室チュートリアル [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、プロセッサ マッパー、プロセッサ アダプター、プロセッサ (コントローラー)、ビュー リゾルバー、ビューで構成されます。
Spring MVC の高レベルのリクエスト処理ワークフローは次のとおりです (写真は Spring 公式 Web サイトから):
分解後の 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 の基本原理とアプリケーションを理解するために、簡単なユーザー登録を例に挙げてみましょう。
実験環境のデスクトップでXfceを開き、以下のコードを入力して取得してください。
wget次のコマンドを入力して .zip ファイルを解凍します:
unzip Spring-jars.zip5. 実験手順 1 新しいプロジェクトを作成します Eclipse で新しい Web プロジェクト (動的 Web プロジェクト) を作成し、
SpringMVCTest という名前を付けます。コード>。 <p><code>SpringMVCTest
。
注意勾选 “自动生成 web.xml” 这个选项。
将 /home/shiyanlou/Spring-jars/
路径下的全部 jar 包拷贝到项目的 WebContent/WEB-INF/lib/
目录下。
修改 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
。
在 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
。
🎜/home/shiyanlou/Spring-jars/
パスにあるすべての jar パッケージをプロジェクトの WebContent/WEB-INF/lib/
ディレクトリにコピーします。 🎜🎜🎜🎜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 之后,如果不配置处理映射器、处理器适配器和视图解析器,会使用默认的。
在项目目录 /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; } }
在包 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"; } }
(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>
(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>
注:由于在线环境的资源问题,这里启动 tomcat 比较慢,需要大家耐心等待几分钟。如果遇到 Tomcat 启动超时的问题,请按照下图的方法延长 Tomcat 的启动时间。
右击 SpringMVCTest 工程,Run As->Run on Server,保持默认选项不变,点击 Finish,一会儿即可看到结果:
输入注册信息,点击注册按钮,结果如下:
以上がSpring MVC入門と導入事例(画像と文章で詳しく解説)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。