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/,一眼就看出來