本筆記是在學習狂神說的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執行流程圖
1.用戶發起請求,中心控制器接到用戶請求,調用處理器映射器(HanderMapping)處理用戶請求,
在通過調用HanderExecution解析用戶請求查找Handler,最后返回給中心控制器。
2.中心控制器得到用戶請求的Handler,調用處理器適配器,找到用戶請求的Controller。
3.Controller將具體的執行信息返回給HandlerAdapter,如ModelAndView,然后返回中心控制器。
4.中心控制器在調用ViewResolver,根據Controller返回的信息生成View返回給用戶。
1.第一個SpringMVC程序
搭建環境
創建Maven項目
添加wed框架支持
進行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啟動測試 得到效果
2.使用注解開發SpringMVC
準備工作:
創建一個新的Maven模塊
添加wed框架支持
-
在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 啟動測試
3.RequestMapping
@RequestMapping
-
@RequestMapping注解用于映射url到控制器類或一個特定的處理程序方法。
@Controller public class TestController { @RequestMapping("/hello") public String test(){ return "hello"; } }
4.RestFul 風格
概念
Restful就是一個資源定位及資源操作的風格。不是標準也不是協議,只是一種風格。
功能
資源:互聯網所有的事物都可以被抽象為資源
資源操作:使用POST、DELETE、PUT、GET,使用不同方法對資源進行操作。
分別對應 添加、 刪除、修改、查詢。
測試
-
在新建一個類 RestFulController
@Controller public class RestFulController { }
-
使用 @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"; } }
-
我們來測試請求查看下
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";
}
}
使用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";
}
}
另外,可以使用組合注解
@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";
}
}
也是可以的!
在實際開發中是用組合注解比較多!!!