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";
         }
     }
相关推荐
掉鱼的猫2 分钟前
全球首个支持 IETF JSONPath (RFC 9535) 标准的 Java 框架,Snack4-Jsonpath v4.0.0 发布
java·json
赶飞机偏偏下雨20 分钟前
【Java笔记】消息队列
java·开发语言·笔记
yacolex37 分钟前
Mac安装使用Gradle
spring·macos·gradle
豐儀麟阁贵40 分钟前
2.6 代码注释与编码规
java·开发语言
程序员三明治41 分钟前
【Mybatis从入门到入土】ResultMap映射、多表查询与缓存机制全解析
java·sql·缓存·mybatis·resultmap·缓存机制·多表查询
华仔啊1 小时前
Java 重试机制没写对,线上很容易出问题!这份生产级方案请收好
java·后端
你不是我我1 小时前
【Java 开发日记】什么是线程池?它的工作原理?
java·开发语言
Seven971 小时前
剑指offer-35、数组中的逆序对
java·leetcode
梵得儿SHI1 小时前
Java 反射机制深度解析:从运行时 “解剖” 类的底层逻辑
java·开发语言·反射·反射机制·private·类成员·反射的三大核心功能
豆沙沙包?1 小时前
2025年--Lc188--931. 下降路径最小和(多维动态规划,矩阵)--Java版
java·矩阵·动态规划