天天看點

Controller詳解【springmvc】

springmvc的核心Controller簡介

控制器Controller

  • 控制器複雜提供通路應用程式的行為,通常通過接口定義或注解定義兩種方法實作。
  • 控制器負責解析使用者的請求并将其轉換為一個模型。
  • 在Spring MVC中一個控制器類可以包含多個方法
  • 在Spring MVC中,對于Controller的配置方式有很多種
以下是兩種編寫Controller的方式

實作Controller接口

Controller是一個接口,在org.springframework.web.servlet.mvc包下,接口中隻有一個方法;

//實作該接口的類獲得控制器功能
public interface Controller {
    //處理請求且傳回一個模型與視圖對象
    ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
}
           

測試

  • 建立一個Moudle,springmvc-04-controller 。
  • mvc的配置檔案隻留下 視圖解析器!
  • 編寫一個Controller類,ControllerTest1
    //定義控制器
    //注意點:不要導錯包,實作Controller接口,重寫方法;
    public class ControllerTest1 implements Controller {
     
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            //傳回一個模型視圖對象
            ModelAndView mv = new ModelAndView();
            mv.addObject("msg","Test1Controller");
            mv.setViewName("test");
            return mv;
        }
    }
               
  • 編寫完畢後,去Spring配置檔案中注冊請求的bean;name對應請求路徑,class對應處理請求的類
  • 編寫前端test.jsp,注意在WEB-INF/jsp目錄下編寫,對應我們的視圖解析器
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Kuangshen</title>
    </head>
    <body>
    ${msg}
    </body>
    </html>
               
  • 配置Tomcat運作測試,我這裡沒有項目釋出名配置的就是一個 / ,是以請求不用加項目名,OK!
    Controller詳解【springmvc】

說明:

  • 實作接口Controller定義控制器是較老的辦法
  • 缺點是:一個控制器中隻有一個方法,如果要多個方法則需要定義多個Controller;定義的方式比較麻煩;

使用注解@Controller(

常用

  • @Controller注解類型用于聲明Spring類的執行個體是一個控制器(在講IOC時還提到了另外3個注解);
  • Spring可以使用掃描機制來找到應用程式中所有基于注解的控制器類,為了保證Spring能找到你的控制器,需要在配置檔案中聲明元件掃描。
    <!-- 自動掃描指定的包,下面所有注解類交給IOC容器管理 -->
    <context:component-scan base-package="com.kuang.controller"/>
               
  • 增加一個ControllerTest2類,使用注解實作;
    //@Controller注解的類會自動添加到Spring上下文中
    @Controller
    public class ControllerTest2{
     
        //映射通路路徑
        @RequestMapping("/t2")
        public String index(Model model){
            //Spring MVC會自動執行個體化一個Model對象用于向視圖中傳值
            model.addAttribute("msg", "ControllerTest2");
            //傳回視圖位置
            return "test";
        }
     
    }
               
  • 運作tomcat測試
    Controller詳解【springmvc】

可以發現,我們的兩個請求都可以指向一個視圖,但是頁面結果的結果是不一樣的,從這裡可以看出視圖是被複用的,而控制器與視圖之間是弱偶合關系。

注解方式是平時使用的最多的方式!

@RequestMapping

  • @RequestMapping注解用于映射url到控制器類或一個特定的處理程式方法。可用于類或方法上。用于類上,表示類中的所有響應請求的方法都是以該位址作為父路徑。
  • 為了測試結論更加準确,我們可以加上一個項目名測試 myweb
  • 隻注解在方法上面
    @Controller
    public class TestController {
        @RequestMapping("/h1")
        public String test(){
            return "test";
        }
    }
               
    通路路徑:http://localhost:8080 / 項目名 / h1
  • 同時注解類與方法
    @Controller
    @RequestMapping("/admin")
    public class TestController {
        @RequestMapping("/h1")
        public String test(){
            return "test";
        }
    }
               
    通路路徑:http://localhost:8080 / 項目名/ admin /h1 , 需要先指定類的路徑再指定方法的路徑;

Controller的使用

Controller結果跳轉方式【springmvc】

Controller 接收資料+顯示資料【springmvc】

繼續閱讀