1. 程式人生 > ><SpringMvc>入門一 HelloWorld

<SpringMvc>入門一 HelloWorld

1.pom匯入基礎依賴

     <!--spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--spring mvc
--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</
groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!--servlet & jsp--> <dependency> <groupId>javax.servlet</groupId> <artifactId
>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency>

2.伺服器啟動,通過配置

<load-on-startup>1</load-on-startup>

載入前端控制器 dispatcherServlet物件 ,同時通過

<init-param>

來載入springmvc的配置檔案,所以web.xml檔案如下

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <!--配置前端控制器-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--初始化servlet載入springmvc.xml的配置檔案-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--設定伺服器啟動載入servlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

3.springmvc.xml配置

首先配置註解掃描,將@Controller的類載入進spring容器

配置檢視解析器,將返回的結果資料渲染成jsp頁面,放在哪個地方

配置mvc的註解

<?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">

    <!-- 配置spring建立容器時要掃描的包 -->
    <context:component-scan base-package="org.maple.controller"></context:component-scan>

    <!-- 配置檢視解析器 -->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--配置spring開啟註解mvc的支援-->
    <mvc:annotation-driven/>

</beans>

4.編寫controller

package org.maple.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author mapleins
 * @Date 2018-12-15 23:47
 * @Desc 控制器類
 **/
@Controller
public class HelloWorldController {

    @RequestMapping("hello")
    public String sayHello(){
        System.out.println("hello SpringMVC");
        return "success";
    }
}

5.編寫jsp頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>入門程式</title>
</head>
<body>

<h3>入門程式</h3>

<a href="/hello" >入門程式</a>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h3>成功頁面</h3>

</body>
</html>

6.執行流程

1.DisPatcherServlet:前端控制器(不需要程式設計師開發)
使用者請求到達前端控制器,它相當於MVC模式中的C(Controller),DispatcherServlet是整個流程控制的中心,由它呼叫其它元件處理使用者的請求,DispatcherServlet的存在降低了元件之間的耦合性。
作用:作為接受請求,相應結果,相當於轉發器,中央處理器,減少其他元件之間的耦合度。
2.HandlerMapping:處理器對映器(不需要程式設計師開發)
HandlerMapping負責根據使用者請求找到Handler(即:處理器),SpringMVC提供了不同的對映器實現實現不同的對映方式,例如:配置檔案方式、實現介面方式、註解方式等。
作用:根據請求的Url 查詢Handler
3.HandLer:處理器(需要程式設計師開發)
Handler是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下,Handler對具體的使用者請求進行處理。
由於Handler設計到具體的使用者業務請求,所以一般情況需要程式設計師根據業務需求開發Handler。
注意:編寫Handler時按照HandlerAdpter的要求去做,這樣才可以去正確執行Handler。
4.HandlerAdapter:處理器介面卡
通過HandlerAdapter對處理器進行執行,這是介面卡模式的應用,通過擴充套件介面卡可以對更多型別的處理器進行執行。
作用:按照特定的規則(HandlerAdapter要求的規則)去執行Handler
5.ViewResolver:檢視解析器(不需要程式設計師開發)
ViewResolver負責將處理結果生成View檢視,ViewResolver首先根據邏輯檢視名解析成物理檢視名,即具體的頁面地址,再生成View檢視物件,最後對View進行渲染將處理結果通過頁面的展示給使用者。SpringMVC框架提供了很多View檢視型別,包括:JSTLView、freemarkerView、pdfView等等.
作用:進行檢視解析,根據邏輯檢視名解析成真正的檢視(view)。
6.View檢視 (需要程式設計師開發 jsp)
View是一個介面,實現類支援不同的View型別(jsp、freemarker、pdf)
一般情況下需要通過頁面標籤或者頁面模板技術將模型資料通過頁面展示給使用者,需要由程式設計師根據業務需求開發具體的頁面。

 

【流程圖說明】
1.使用者傳送請求至 前端控制器DispatcherServlet。
2.前端控制器DispatcherServlet收到請求後呼叫處理器對映器HandlerMapping。
3.處理器對映器HandlerMapping根據請求的Url找到具體的處理器,生成處理器物件Handler及處理器攔截器HandlerIntercepter(如果有則生成)一併返回給前端控制器DispatcherServlet。相當於找到路徑對應的controller類中的方法內容。
4.前端控制器DispatcherServlet通過處理器介面卡HandlerAdapter呼叫處理器Controller。
5.執行處理器(Controller,也叫後端控制器)
6.處理器Controller執行完後返回ModelAnView。
7.處理器對映器HandlerAdapter將處理器Controller執行返回的結果ModelAndView返回給前端控制器DispatcherServlet。
8.前端控制器DispatcherServlet將ModelAnView傳給檢視解析器ViewResolver。
9.檢視解析器ViewResolver解析後返回具體的檢視View。
10.前端控制器DispatcherServlet對檢視View進行渲染檢視(即:將模型資料填充至檢視中)
11.前端控制器DispatcherServlet響應使用者。