1控制器Controller
控制器複雜提供通路應用程式的行為,通常通過接口定義或注解定義兩種方法實作。
控制器負責解析使用者的請求并将其轉換為一個模型。
在Spring MVC中一個控制器類可以包含多個方法
在Spring MVC中,對于Controller的配置方式有很多種
1實作Controller接口
public interface Controller {
@Nullable
ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
1 編寫一個Controller類:HelloController
package com.zs.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//注意:這裡我們先導入Controller接口
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//ModelAndView 模型和視圖
ModelAndView mv = new ModelAndView();
//封裝對象,放在ModelAndView中。Model
mv.addObject("msg","HelloSpringMVC!");
//封裝要跳轉的視圖,放在ModelAndView中
mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
return mv;
}
}
2編寫完畢後,去Spring配置檔案中注冊請求的bean
3 編寫前端hello.jsp,注意在WEB-INF/jsp目錄下編寫,對應我們的視圖解析器
<%--
Created by IntelliJ IDEA.
User: DELL
Date: 2021/1/24
Time: 9:46
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
4配置Tomcat運作測試
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNyZuBnL2ADNwATOwUTM0ITMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
實作接口Controller定義控制器是較老的辦法
缺點是:一個控制器中隻有一個方法,如果要多個方法則需要定義多個Controller;定義的方式比較麻煩
2使用注解@Controller
@Controller注解類型用于聲明Spring類的執行個體是一個控制器
Spring可以使用掃描機制來找到應用程式中所有基于注解的控制器類,為了保證Spring能找到你的控制器,需要在配置檔案中聲明元件掃描
<!-- 自動掃描包,讓指定包下的注解生效,由IOC容器統一管理 -->
<context:component-scan base-package="com.zs.controller"/>
增加一個HelloController,使用注解實作
package com.zs.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller //自動裝配springIOC容器中
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model) {
// 封裝資料
model.addAttribute("msg","Hello,SpringMVCAnnotation");
return "hello"; //會被視圖解析器處理
}
}
運作tomcat測試
注解方式是平時使用的最多的方式
2RequestMapping
@RequestMapping
@RequestMapping注解用于映射url到控制器類或一個特定的處理程式方法。可用于類或方法上。用于類上,表示類中的所有響應請求的方法都是以該位址作為父路徑。
1隻注解在方法上面
@Controller //自動裝配springIOC容器中
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model) {
// 封裝資料
model.addAttribute("msg","Hello,SpringMVCAnnotation");
return "hello"; //會被視圖解析器處理
}
}
http://localhost:8080/hello
2 同時注解類與方法
@Controller//自動裝配springIOC容器中
@RequestMapping("/zs")
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model) {
// 封裝資料
model.addAttribute("msg","Hello,SpringMVCAnnotation");
return "hello"; //會被視圖解析器處理
}
}
http://localhost:8080/zs/hello
3RestFul 風格
Restful就是一個資源定位及資源操作的風格。不是标準也不是協定,隻是一種風格。基于這個風格設計的軟體可以更簡潔,更有層次,更易于實作緩存等機制
傳統方式操作資源 :通過不同的參數來實作不同的效果!方法單一,post 和 get
http://127.0.0.1/item/queryItem.action?id=1 查詢,GET
http://127.0.0.1/item/saveItem.action 新增,POST
http://127.0.0.1/item/updateItem.action 更新,POST
http://127.0.0.1/item/deleteItem.action?id=1 删除,GET或POST
使用RESTful操作資源 :可以通過不同的請求方式來實作不同的效果!如下:請求位址一樣,但是功能可以不同!
http://127.0.0.1/item/1 查詢,GET
http://127.0.0.1/item 新增,POST
http://127.0.0.1/item 更新,PUT
http://127.0.0.1/item/1 删除,DELETE
1傳統風格
2RestFul風格
@PathVariable 注解,讓方法參數的值對應綁定到一個URI模闆變量上