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";
         }
     }
相关推荐
敲代码的小小酥几秒前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring
天天被压力7 分钟前
【A股分钟级高频数据完全手册 #03】股票历史1分钟K线数据接口怎么用:Pro版批量拉取与本地缓存
java·人工智能·python
apcipot_rain13 分钟前
C++转Java日记(02)
java·开发语言·c++
nice_lcj52022 分钟前
【从零理解 Spring AI · 03】Spring AI 在 Spring 生态里的位置
java·spring boot·大模型·spring ai·ai应用开发
码农小河6610 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
风若飞13 小时前
Spring Ai 入门遇到问题1
java·后端·spring
Nuanyt13 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
黑马程序员毕设14 小时前
基于 Java 的餐饮点餐系统设计与应用报告
java·开发语言
SL_staff14 小时前
从文档工具到知识中枢:基于JVS数字底座构建企业级统一内容管理平台的技术实践
java·开源·全栈
SL_staff14 小时前
从‘连得上’到‘管得好’:JVS-IOT双引擎驱动设备运维闭环
java·物联网·产品