springMVC--Controller配置总结

控制器Controller

  • 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方式

  • 控制器负责解析客户的请求转换成一个模型

  • 在springMVC中,一个控制器类可以包含多种方法

  • 在springMVC中,对于controller的配置有多种

实现Controller接口

Controller是一个接口,在org.springframework.web.servlet.mvc包下

java 复制代码
 @FunctionalInterface//函数式接口
 //实现该接口的类获得控制器功能
 public interface Controller {
     @Nullable//值可以为空
     ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;//处理请求并返回一个MOdelAndView对象
 }

测试1

1.新建一个模块,web.xml与springmvc-servlet.xml中的代码不变

2.编写一个Controller类,ControllerDemo01

复制代码
 
java 复制代码
//只要实现了该接口的类,说明这就是一个控制器
 public class ControllerDemo01 implements Controller {
     @Override
     public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
         ModelAndView mv = new ModelAndView();
         //业务代码
         mv.addObject("msg","ControllerDemo01");
         //视图跳转
         mv.setViewName("test");
 ​
 ​
         return mv;
     }
 }

3.编写完毕后,去spring配置文件中注册请求的bean;name代表请求路径,class代表对应请求的类

XML 复制代码
 <bean name="/test" class="com.lyc.controller.ControllerDemo01"/>

4.编写前端页面,对应视图解析器

XML 复制代码
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <html>
 <head>
     <title>Title</title>
 </head>
 <body>
 ${msg}
 </body>
 </html>

配置tomcat运行测试

小结:

  • 实现接口定义控制器有些过时了

  • 缺点:一个控制器里只有一个方法,如果多个方法则需要定义多个Controller;定义的方法比较麻烦

测试2

使用注解@Controller

  • @Controller注解类型用于声明spring类的实例是一个控制器(在spring笔记中还有另外三个注解,@Component,@Service,@Repository);

  • spring可以通过扫描机制来找到应用程序中所有基于注解的控制类,为了保证spring能找到控制器,需要在配置文件中声明组件扫描

XML 复制代码
   <!-- 自动扫描指定的包-->
   <context:component-scan base-package="com.lyc.controller"/>
  • 增加一个ControllerDemo02类,使用注解实现
java 复制代码
 package com.lyc.controller;
 ​
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
 ​
 @Controller
 //代表这个类被spring接管
 //被解析的这个类中的所有的方法,如果返回值是string,并且有具体的页面可以跳转,就会被视图解析器解析
 @RequestMapping("/demo2")
 public class ControllerDemo02 {
     @RequestMapping("/test2")
     public String demo01(Model model){
         model.addAttribute("msg","ControllerDemo02");
         return "test";
     }

小结:从这里两次测试可以发现,我们的两个请求是可以指向一个视图的,但是页面显示的结果是不同的,表明这里的视图是被复用 了,而控制器与视图之间是弱耦合关系

RequsetMapping说明

RequestMapping

  • @RequestMapping 注解用于映射URL到控制器类一个特定的处理程序方法 ,可用于类或方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父地址 如果要访问类中的方法,需要在网页中加上**/父地址/方法地址**

    测试:

    java 复制代码
    ConreollerDemo3
    
     package com.lyc.controller;
     ​
     import org.springframework.stereotype.Controller;
     import org.springframework.ui.Model;
     import org.springframework.web.bind.annotation.RequestMapping;
     ​
     @Controller
     @RequestMapping("/demo3")
     public class ControllerDemo3 {
         @RequestMapping("/test3")
         public String test(Model model){
           model.addAttribute("msg","ControllerDemo3");
             return "test";
         }
     }
相关推荐
寒士obj26 分钟前
类加载的过程
java·开发语言
无名之逆29 分钟前
大三自学笔记:探索Hyperlane框架的心路历程
java·开发语言·前端·spring boot·后端·rust·编程
Chuck1sn31 分钟前
我把 Cursor AI 整合到 Ruoyi 中,从此让 Java 脚手架脱离人工!
java·vue.js·后端
广州山泉婚姻32 分钟前
智慧零工平台后端开发进阶:Spring Boot 3结合MyBatis-Flex的技术实践与优化【无标题】
人工智能·爬虫·spring
水木石画室34 分钟前
Spring Boot 常用注解面试题深度解析
java·spring boot·后端
hweiyu001 小时前
tomcat指定使用的jdk版本
java·开发语言·tomcat
百锦再1 小时前
.NET 类库开发详细指南c
java·log4j·.net·net·dot
阿里云云原生1 小时前
Spring AI Alibaba 1.0 GA 正式发布,Java 智能体开发进入新时代
spring
黎䪽圓1 小时前
【Java多线程从青铜到王者】阻塞队列(十)
java·开发语言