springMVC--Controller配置总结

发布于:2025-04-06 ⋅ 阅读:(32) ⋅ 点赞:(0)

控制器Controller

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

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

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

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

实现Controller接口

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

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

测试1

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

2.编写一个Controller类,ControllerDemo01

 
//只要实现了该接口的类,说明这就是一个控制器
 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代表对应请求的类

 <bean name="/test" class="com.lyc.controller.ControllerDemo01"/>

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

 <%@ 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能找到控制器,需要在配置文件中声明组件扫描

   <!-- 自动扫描指定的包-->
   <context:component-scan base-package="com.lyc.controller"/>
  • 增加一个ControllerDemo02类,使用注解实现

 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到控制器类一个特定的处理程序方法,可用于类或方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父地址 如果要访问类中的方法,需要在网页中加上/父地址/方法地址

    测试:

    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";
         }
     }