SpringMVC概述及入門

SpringMVC是一種基於java實現MVC設計模式的請求驅動類型的輕量級Web框架。是Spring FrameWord的後續產品,Spring框架提供了構建Web應用程序的全功能MVC模塊,使用Spring可插入MVC架構。從而在使用Spring進行Web開發時,可以選用Spring的SpringMVC框架或者其他MVC開發框架等。

SpringMVC程序入門

1.工程創建

通過IDEA創建SpringMVC工程,創建工程時,選用了骨架,如下圖所示在這裏插入圖片描述
當創建項目完成後,發現項目目錄不完整,需要進行補充,添加如下圖目錄
在這裏插入圖片描述

2.代碼編寫

  • 編寫index.jsp頁面
<%@page contentType="text/html; charset=UTF-8" language="java" %>

<html>
    <head>

    </head>
    <body>
        <h2>SpringMVC入門案例</h2><br/>
        <a href="hello">入門程序</a><br/>
    </body>
</html>
  • 引入項目所需jar包(pom.xml)
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source><!--編譯版本-->
    <maven.compiler.target>1.8</maven.compiler.target>
    <!--版本鎖定-->
  <spring.version>5.2.1.RELEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
  </dependencies>

此處引入jar包,我只引入了spring-webmvc的jar包,但是有的人同時也引入了spring-web這個jar包,其實spring-webmvc依賴於spring-web,這樣引入spring-webmvc的jar包會間接的添加了spring-web,而不必顯式的去添加spring-web

  • 配置核心控制器——DispatcherServlet(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>
  <!--配置SpringMVC的核心控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <!--配置初始化參數,用於讀取SpringMVC的配置文件 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--配置servlet對象創建時間點:應用啓動時加載這個Servlet-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
  • 創建springmvc.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">
    <!--配置SpringMVC創建容器時需要掃描的包-->
    <context:component-scan base-package="com.liang"></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>
</beans>
  • 編寫控制器並使用註解配置
package com.liang.controller;

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

@Controller
public class HelloController {

    @RequestMapping(path = "/hello")
    public String sayHello(){
        System.out.println("HelloController控制器的syaHello方法執行了...");
        return "success";
    }

}
  • 編寫success.jsp頁面(WEB-INF/pages/success.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>入門程序</title>
</head>
<body>
    入門程序執行成功
</body>
</html>

完成後的工程目錄如下圖
在這裏插入圖片描述

入門程序執行過程圖

在這裏插入圖片描述
從入門程序執行過程圖中可以看出:瀏覽器發送請求,被DispatcherServlet捕獲,該Servlet不處理請求,而是將請求進行轉發,轉發的路徑是根據請求URL匹配@RequestMapping中的內容;匹配成功後,執行對應方法,該方法存在返回值;根據該返回是,藉助InternalResourceViewResolver找到對應的結果視圖;渲染結果視圖,響應到瀏覽器。

SpringMVC組件瞭解

DispatcherServlet

DispatcherServlet是整個流程控制的中心,由它調用其他組件處理用戶請求,DispatcherServlet的存在降低了組件之間的耦合性。其主要職責是調度工作。

通過HandlerMapping,將請求映射到處理器。
通過HandlerAdapter支持多種類型的處理器。
通過視圖解析器解析邏輯視圖名到對應的視圖。
文件上傳解析,如果請求類型是multipart將通過MultipartResolver進行文件上傳解析;
HandlerMapping

負責根據用戶請求找到對應的Handler,SpringMVC提供了不用的映射器實現不同的映射方式。

Handler

開發中編寫的棘突業務控制器,由DispatcherServlet把用戶請求轉發到Handler,由Handler對具體的用戶請求做處理。

HandlerAdapter

用於對handler進行執行,通過擴展handlerAdapter可以對更多類型的handler進行處理

ViewResolver

負責將處理結果生成View視圖,ViewResolver根據邏輯視圖名解析成具體的頁面地址(物理視圖名),再生成View視圖對象,最後將View視圖進行渲染將處理結果通過頁面展示給用戶。

@Controller 註解

此註解用於標記在一個類上,使用此標記的類將成爲一個SpringMVC Controller對象。基於註解的控制器不需要在配置文件中部署映射,僅需要使用@RequestMapping註解方法進行請求處理;在SpringMVC的配置文件中,用context:component-scan/啓動包掃描功能,以便註冊帶有@Controller,@Service,@repository,@Component等註解的類成爲Spring的Bean。

@RequestMapping註解

用於建立請求URL和處理請求方法之間的對應關係。次註解可以標記在類或者方法上,當標記在類上時,表示請求URL的一級訪問目錄,此處若不寫,則相當於應用的根目錄,寫的話必須以/開頭,主要目的是爲了使我們的URL可以按照模塊化管理;當標記出現在方法上,表示請求URL的第二級訪問目錄

屬性 功能
path 用於指定請求的URL,和value屬性作用一樣
method 用於指定請求方式
params 用於指定限制請求參數的條件,支持簡單的表達式

@RequestMapping註解使用示例

編寫JSP代碼

<%@page contentType="text/html; charset=UTF-8" language="java"  isELIgnored="false" %>

<html>
    <head>
        <title>requestMapping的使用</title>
    </head>
    <body>
        <!--第一種訪問方式-->
        <a href="${pageContext.request.contextPath}/account/findAccount">查詢賬戶</a><br/>
        <!--第二種訪問方式-->
        <a href="account/findAccount">查詢賬戶</a><br/><br/>

        <!--請求方式不同-->
        <a href="account/saveAccount">保存賬戶,get請求</a><br/>
        <form action="account/saveAccount" method="post">
            <input type="submit" value="保存賬戶,post請求"/>
        </form>

        <!--params屬性示例-->
        <a href="account/deleteAccount?accountName=zhangshan&money=100">刪除賬戶,金額100</a><br/>
        <a href="account/deleteAccount?accountName=zhangshan&money=1000">刪除賬戶,金額1000</a><br/>
    </body>
</html>

編寫Controller的代碼

package com.liang.controller;

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

@Controller("accountController")
@RequestMapping(path = "/account")
public class AccountController {

    /**
     * 查詢所有賬戶
     * @return
     */
    @RequestMapping(path = "/findAccount")
    public String findAccount(){
        System.out.println("查詢了賬戶...");
        return "success";
    }

    /**
     * 保存賬戶 只接受 post 方式請求
     * @return
     */
    @RequestMapping(path = "/saveAccount", method = RequestMethod.POST)
    public String saveAccount()
    {
        System.out.println("保存賬戶");
        return "success";
    }

    /**
     * 刪除用戶  用於測試 params 參數
     * @return
     */
    @RequestMapping(path = "/deleteAccount", params = {"accountName","money!=100"})
    public String deleteAccount()
    {
        System.out.println("刪除用戶");
        return "success";
    }
}

上述代碼需要注意的是: 1.保存賬戶使用get請求的超鏈接點擊後會出現如下頁面在這裏插入圖片描述
這是由於保存賬戶的方法設置了請求方式,只允許post請求方式。
2.刪除用戶,金額100的超鏈接點擊後會出現以下頁面在這裏插入圖片描述
這是由於刪除賬戶需要傳遞滿足條件的參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章