springMVC簡單使用

本筆記是在學習狂神說的SpringMVC時創建。

SpringMVC學習筆記

1.什么是SpringMVC?

   + Spring MVC屬于SpringFrameWork的后續產品,已經融合在Spring Web Flow里面。
   + Spring 框架提供了構建 [Web](https://baike.baidu.com/item/Web/150564) 應用程序的全功能 MVC 模塊。
   + 使用 Spring 可插入的 MVC 架構,從而在使用Spring進行WEB開發時,可以選擇使用Spring的Spring MVC框架或集成其他MVC開發框架,如Struts1(現在一般不用),Struts 2(一般老項目使用)等等。

2.使用SpringMVC的好處

  • Lifecycle for overriding binding, validation, etc,易于同其它View框架(Tiles等)無縫集成,采用IOC便于測試。* 它是一個典型的教科書式的mvc構架,而不像struts等都是變種或者不是完全基于mvc系統的框架。

3.SpringMVC執行原理

SpringMVC的核心是DispatcherServlet中心控制器

Spring MVC框架像許多其他MVC框架一樣, 以請求為驅動 , 圍繞一個中心Servlet分派請求及提供其他功能 ,DispatcherServlet 是一個實際的Servlet (它繼承自HttpServlet 基類)。

SpringMVC執行流程圖

mvc01.png

1.用戶發起請求,中心控制器接到用戶請求,調用處理器映射器(HanderMapping)處理用戶請求,

在通過調用HanderExecution解析用戶請求查找Handler,最后返回給中心控制器。

2.中心控制器得到用戶請求的Handler,調用處理器適配器,找到用戶請求的Controller。

3.Controller將具體的執行信息返回給HandlerAdapter,如ModelAndView,然后返回中心控制器。

4.中心控制器在調用ViewResolver,根據Controller返回的信息生成View返回給用戶。

1.第一個SpringMVC程序

  1. 搭建環境

  2. 創建Maven項目

  3. 添加wed框架支持

  4. 進行SpringMVC配置

1.在pom中添加SpringMVC依賴

<dependencies>
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-webmvc</artifactId>
           <version>5.1.9.RELEASE</version>
       </dependency>
 </dependencies>

2.在wed.xml中進行相關配置

     <!-- 注冊DispatcherServlet-->
      <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-Servlet.xml</param-value>
          </init-param>
          <!--啟動級別-1-->
          <load-on-startup>1</load-on-startup>
      </servlet>

<!--設置配置DispatcherServlet匹配所有請求-->
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

3.創建關聯配置文件

<?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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

</beans>

4.在配置文件中

<!--添加處理映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--添加處理器適配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--添加視圖解析器-->
    <mvc:view-resolvers>
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              id="InternalResourceViewResolver">
        <!--前綴-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后綴-->
        <property name="suffix" value=".jsp"/>
        </bean>
    </mvc:view-resolvers>

5.編寫Controller業務代碼

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class controller implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //ModelAndView 模型和視圖
        ModelAndView mv=new ModelAndView();
       //封裝對象,放在ModelAndView中。Model
        mv.addObject("msg","SpringMVC-------");
        //封裝要跳轉的視圖,放在ModelAndView中
        mv.setViewName("hello");
        return mv;
    }
}

6.在Spring容器中注冊Bean

<bean id="/tets" class="com.chao.wed.controller"></bean>

7.創建需要跳轉jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  //取出封裝對象中的值
   ${msg}
</body>
</html>

8.配置tomcat啟動測試 得到效果


mvc02.png

2.使用注解開發SpringMVC

準備工作:

  1. 創建一個新的Maven模塊

  2. 添加wed框架支持

  1. 在wed.xml中配置SpringMVC

     <servlet>
            <servlet-name>DispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--         關聯一個springmvc的配置文件:【servlet-name】-servlet.xml-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:SpringMVC-Servlet.xml</param-value>
            </init-param>
            <!--啟動級別-1-->
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>DispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    

    2.創建SpringMVC的配置文件

        <!-- 自動掃描包 -->
        <context:component-scan base-package="com.chao.controller"/>
        <!-- 不處理靜態資源 -->
        <mvc:default-servlet-handler />
        <mvc:annotation-driven />
    
        <!-- 視圖解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              id="internalResourceViewResolver">
            <!-- 前綴 -->
            <property name="prefix" value="/WEB-INF/jsp/" />
            <!-- 后綴 -->
            <property name="suffix" value=".jsp" />
        </bean>
    
    

    3.創建controller

    package com.chao.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    //使用注解定義類為Controller
    @Controller
    public class controller {
    
        @RequestMapping("/hello")
        public String servlet(Model model)
        {
            model.addAttribute("msg","hello---");
    
            return "hello";
        }
    }
    
    • @RequestMapping是為了映射請求路徑;

    • 方法中聲明Model類型的參數是為了把Action中的數據帶到視圖中;

    • 方法返回的結果是視圖的名稱hello;

4.創建jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

5.配置tomcat 啟動測試


mvc03.png

3.RequestMapping

@RequestMapping

  • @RequestMapping注解用于映射url到控制器類或一個特定的處理程序方法。

    @Controller
    public class TestController {
       @RequestMapping("/hello")
       public String test(){
           return "hello";
      }
    }
    

4.RestFul 風格

概念

Restful就是一個資源定位及資源操作的風格。不是標準也不是協議,只是一種風格。

功能

資源:互聯網所有的事物都可以被抽象為資源

資源操作:使用POST、DELETE、PUT、GET,使用不同方法對資源進行操作。

分別對應 添加、 刪除、修改、查詢。

測試

  1. 在新建一個類 RestFulController

    @Controller
    public class RestFulController {
    }
    
  2. 使用 @PathVariable 注解,讓方法參數的值綁定到一個URI上。

    package com.chao.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    
    @Controller
    public class controller {
    
        @RequestMapping("/hello")
        public String servlet(Model model)
        {
            model.addAttribute("msg","hello---");
    
            return "hello";
        }
    }
    
  3. 我們來測試請求查看下


    mvc03.png

我們來修改下對應的參數類型,再次測試

package com.chao.controller;

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


@Controller
public class controller {

    @RequestMapping("/hello/{a}/{b}")
    public String servlet(@PathVariable int a,@PathVariable int b, Model model)
    {
        int res=a+b;
        model.addAttribute("msg",res);

        return "hello";
    }
}

mvc04.png

使用method屬性指定請求類型

指定請求的類型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等

我們來測試一下:

  • 增加一個方法

    @Controller
    public class controller {
    
        @RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.POST)
        public String servlet(@PathVariable int a,@PathVariable int b, Model model)
        {
            int res=a+b;
            model.addAttribute("msg",res);
    
            return "hello";
        }
    }
    
    
  • 使用瀏覽器地址欄進行訪問默認是Get請求,會報錯405:


    mvc05.png

    將POST修改為GET就可以了;

@Controller
public class controller {

    @RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.GET)
    public String servlet(@PathVariable int a,@PathVariable int b, Model model)
    {
        int res=a+b;
        model.addAttribute("msg",res);

        return "hello";
    }
}

mvc06.png

另外,可以使用組合注解

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@Controller
public class controller {

    @PostMapping("/hello/{a}/{b}")
    public String servlet(@PathVariable int a,@PathVariable int b, Model model)
    {
        int res=a+b;
        model.addAttribute("msg",res);

        return "hello";
    }
}

也是可以的!

mvc07.png

在實際開發中是用組合注解比較多!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 三層架構 和 MVC模型 三層架構:我們在Servlet 學習筆記講過,當前 Web 應用體系主要為 C/S架構 ...
    Whyn閱讀 542評論 0 0
  • 寫文章 一、SpringMVC基礎入門,創建一個HelloWorld程序 1.首先,導入SpringMVC需要的j...
    刺繡蘭溪閱讀 565評論 0 0
  • springmvc學習筆記 學習springmvc框架原理 包括哪些組件: 前端控制器(中心) 處理器映射器(三大...
    羅志贇閱讀 1,178評論 0 51
  • 強烈推薦使用Spring Boot,搭建Spring Web項目,進入網址,把WEB依賴打鉤,點擊生成項目,會下載...
    tenlee閱讀 1,595評論 3 44
  • 今天感恩節哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉變要...
    迷月閃星情閱讀 10,607評論 0 11