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";
         }
     }
相关推荐
DKunYu8 分钟前
1.多线程初阶
java·开发语言
尤利乌斯.X15 分钟前
在Java中调用MATLAB函数的完整流程:从打包-jar-到服务器部署
java·服务器·python·matlab·ci/cd·jar·个人开发
spencer_tseng21 分钟前
easy-captcha-1.6.2.jar
java·jar
旭编43 分钟前
牛客周赛 Round 117
java·开发语言
无敌最俊朗@1 小时前
01-总结
java·jvm·数据库
华仔啊1 小时前
MyBatis-Plus 让你开发效率翻倍!新手也能5分钟上手!
java·后端·mybatis
武子康1 小时前
Java-167 Neo4j CQL 实战:CREATE/MATCH 与关系建模速通 案例实测
java·开发语言·数据库·python·sql·nosql·neo4j
乌暮2 小时前
JavaEE入门--计算机是怎么工作的
java·后端·java-ee
Z3r4y2 小时前
【代码审计】RuoYi-4.2 五处安全问题分析
java·web安全·代码审计·若依4.2·ruoyi-4.2
代码栈上的思考2 小时前
Spring MVC 中 @RequestMapping 路径映射与请求处理全流程
java·spring·mvc