首頁  >  文章  >  Java  >  Spring MVC 簡介及入門小範例(圖文詳解)

Spring MVC 簡介及入門小範例(圖文詳解)

怪我咯
怪我咯原創
2017-06-25 09:59:563821瀏覽

說明:文章內容全部截選自實驗大樓教學【Spring MVC 簡易教學】

一、什麼是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 MVC 高階的請求處理工作流程如下(圖來自Spring 官網):

Spring MVC 簡介及入門小範例(圖文詳解)

細分後,Spring MVC 執行流程如下,共包含八個步驟:

Spring MVC 簡介及入門小範例(圖文詳解)

Spring MVC 相關介面解釋:

(1)DispatcherServlet

前端控制器,所有的請求都有經過它來統一分發,請求會被分發給對應的Handler。

(2)HandlerMapping(處理器映射器)

解析請求鏈接,然後根據請求鏈接找到執行這個請求的類別(HandlerMapping 所說的 handler)。

(3)HandlerAdapter(處理器適配器)

呼叫特定的方法對使用者發送的請求來處理。

(4)Controller

Controller 將處理使用者請求,Controller 處理完使用者請求,則傳回 ModelAndView 物件給 DispatcherServlet 前端控制器。

從宏觀角度考慮,DispatcherServlet 是整個 Web 應用的控制器;從微觀考慮,Controller 是單一 Http 請求處理過程中的控制器。

(5)ViewResolver(視圖解析器)

解析 MdoelAndView,將 MdoelAndView 中的邏輯視圖名稱變為一個真正的 View 對象,並將 MdoelAndView 中的 Model 取出。

前面簡單的介紹了 Spring MVC ,以下以簡單的使用者註冊為例,來了解 Spring MVC 的一些基本原理和運用。

三、專案文件結構

Spring MVC 簡介及入門小範例(圖文詳解)

四、開發準備

Spring MVC 的相關檔案放在實驗大樓的伺服器中,請開啟實驗環境桌面上的Xfce ,輸入下面的程式碼取得:

wget

輸入下面的指令解壓縮.zip 檔案:

unzip Spring-jars.zip

五、實驗步驟

# 1 新建專案工程

在Eclipse 新建一個Web 工程(Dynamic Web Project),命名為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 套件及其子包下的所有Java 檔案。

同時配置了 annatation 類型的處理器映射器 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn