SpringMVC入門(一)

  • 2020 年 3 月 11 日
  • 筆記

1. 工作流程

  • 用戶請求伺服器,然後核心控制器捕獲請求
  • 核心控制器交由映射器把請求url和控制器進行映射
  • 核心控制器交由適配器調用映射的控制器,中間還進行數據轉換
  • 對應的控制器的邏輯操作完成後返回ModelAndView或String
  • 視圖解析器解析ModelAndView
  • 返回一個View
  • 用戶看到請求的數據
  • 筆者目前的操作都是返回String,然後前端Ajax非同步獲取數據,所以下面演示也用String類型的返回值
  • 並且都是基於註解

2. 步驟

2.1 工程目錄及jar包

2.2 配置Web.xml

<!-- 配置spring的核心控制器 -->  <servlet>      <servlet-name>dispatcherServlet</servlet-name>      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>      <!-- 配置servlet初始化參數,告知applicationContext位置 -->      <init-param>          <param-name>contextConfigLocation</param-name>          <param-value>classpath:applicationContext.xml</param-value>      </init-param>      <!-- 啟動順序 -->      <load-on-startup>1</load-on-startup>  </servlet>  <!-- 映射地址 -->  <servlet-mapping>      <servlet-name>dispatcherServlet</servlet-name>      <url-pattern>*.do</url-pattern>  </servlet-mapping>      <!-- 編碼過濾器,解決傳送過來的參數亂碼問題 -->  <filter>      <filter-name>CharacterEncodingFilter</filter-name>      <filter-class>          org.springframework.web.filter.CharacterEncodingFilter      </filter-class>      <init-param>          <param-name>encoding</param-name>          <param-value>UTF-8</param-value>      </init-param>  </filter>  <filter-mapping>      <filter-name>CharacterEncodingFilter</filter-name>      <url-pattern>/*</url-pattern>  </filter-mapping>      <!-- 歡迎頁 -->  <welcome-file-list>      <welcome-file>/WEB-INF/pages/index.html</welcome-file>  </welcome-file-list>

2.3 配置applicationContext.xml

<!-- 告知sptring創建容器時要掃描的包 -->  <context:component-scan base-package="com.howl.controller"/>      <!-- 配置springmvc的視圖解析器,這裡不使用 -->  <!-- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">      <property name="prefix" value="/WEB-INF/pages/"></property>      <property name="suffix" value=".html"></property>  </bean> -->      <!-- 註冊HandlerMapping,HandlerAdapter -->  <mvc:annotation-driven >      <!-- response設置utf-8,解決返給前端中文亂碼問題 -->      <mvc:message-converters register-defaults="true">          <bean class="org.springframework.http.converter.StringHttpMessageConverter">              <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>          </bean>      </mvc:message-converters>  </mvc:annotation-driven>

2.4 創建Controller

package com.howl.controller;    @Controller("UserController") //註解控制器  @RequestMapping("/User") //分模組地址映射  @ResponseBody  //返回字元串,不是ModelandView  public class UserController {        @RequestMapping(value="/add",method=RequestMethod.GET) //指定訪問方法      public String add(){          System.out.println("執行了add方法");          return "{'code' : '0000','msg' : '執行了add方法'}"; //返回值json      }    //模組測試,先忽略後面講解------------------[開始]      @RequestMapping("/update")      public String update(){          System.out.println("執行了update方法");          return "執行了update方法";      }  //模組測試--------------------------------[完]        @RequestMapping("/insert")      public String insert(int id){          System.out.println("執行了insert方法,id="+ id);          return "執行了insert方法,id="+ id;      }    }

2.5 前端頁面

<body>      <a href="User/add.do">add</a>      <a href="update.do">update</a>  <!-- 這裡測試分模組,後面會講解,先略過 -->      <a href="User/insert.do?id=1">insert</a>  </body>
  • 前端點擊add與insert鏈接的時候,分別返回
  • 這裡注意,前端發送參數的屬性name要和對應方法的參數名字類型一致

2.6 模組測試

  • 筆者在UserController加了@RequestMapping("/User"),設置了模組
  • 而且UserController里確實寫了@RequestMapping("/update")
  • 但是訪問前端頁面的update鏈接的時候 -_- !! 找不到對象 !!

究其原因:是分模組的鍋,仔細看二者的url區別

  • add——http://localhost:8080/Springmvc/User/add.do
  • update——http://localhost:8080/Springmvc/update.do
  • 可以看到二者地址欄區別在於/User/,沒錯就是在類上配置的@RequestMapping("/User")
  • 這個註解可以用在模組化管理,十分便利,比如訪問用戶/User/,訪問問題/Question/,一眼就看出來