曾经的你我高攀不起,现在的我只想注解和配置(下)

简介: 四、Controller配置总结实现Controller接口使用注解开发@Controller

四、Controller配置总结


控制器Controller


  • 控制器复杂体统访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。


  • 控制器负责解析用户的请求,并将其转换为一个模型


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


  • 在SpringMVC中,对于Controller的配置方法由很多种


实现Controller接口

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//只要实现了Controller接口的类,说明着就是一个控制器
public class ControllerTest1 implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","ControllerTest1");
        modelAndView.setViewName("test");
        return modelAndView;
    }
}

>在springmvc-servlet.xml,spring配置文件中注册bean;name对应请i求路径,class对应处理请求的类


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--视图解析器:模板引擎 Thymeleaf Freemarker-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀,后缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <bean name="/t1" class="com.hxl.controller.ControllerTest1"/>
</beans>

微信图片_20211230182846.png

>此处实现controller接口有缺点:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller;定义的方式比较麻烦;


使用注解开发@Controller


  • @Controller注解类型用于声明Spring类的实例是一个控制器(@Component(组件),@Service(servie)、@Controller(controller)、@Respository(dao))


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


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
    <context:component-scan base-package="com.hxl.controller"/>
    <!--视图解析器:模板引擎 Thymeleaf Freemarker-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀,后缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

>ControllerTest2


package com.hxl.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
//代表这个类会被spring接管,这个注解的类种的所有方法,如果返回值是String并且有具体的页面可以跳转,那么就会被视图解析器解析
@Controller 
public class ControllerTest2 {
  @RequestMapping("/t2")
  public String test(Model model){
      model.addAttribute("msg", "ControllerTest2");
      return "test";
  }
}

微信图片_20211230183008.png


小技巧:


  • 只要改了java的代码就要reload一下


  • 只要改了配置文件,就要重新启动tomcat


  • 如果只改了前端页面,刷新一下就欧克


注意: 两个请求都可以指向一个视图,但是页面结果的结果是不一样的,从这里可以看出视图是被复用的,而控制器与视图之间是弱偶合关系。


比说说:点击一个多选(有增加有修改),有很多不同的页面,但是不一定有这么多的jsp页面,只是换了个模板,把里面的数据交换一下。如果有相关的开发经验会

相关文章
|
7月前
|
Java 编译器
你说啥什么?注解你还不会?
你说啥什么?注解你还不会?
73 0
|
Java 编译器 数据库连接
注解
注解是JAVA5引入JAVA的一个特性,理解起来会有点抽象,这里笔者先给出自己对注解的一个理解——注解就是一张便签! 其次要有一个概念就是注解的应用是基于反射的。 本文举出的三个实例中例1和例3是引用其它的优秀文献 出处为how2J以及 https://blog.csdn.net/briblue/article/details/73824058一文
73 0
|
Java 测试技术 Spring
关于@RunWith注解的一点问题
IDEA写springboot测试关于@Runwith的小问题
255 0
关于@RunWith注解的一点问题
|
Java 编译器
关于@FunctionalInterface注解
FunctionalInterface
473 0
关于@FunctionalInterface注解
|
Java 编译器 Spring
什么是注解
什么是注解
|
存储 JSON Java
一文学会注解的正确使用姿势
一文学会注解的正确使用姿势
一文学会注解的正确使用姿势
|
XML Dubbo Java
duboo注解使用详解
当越来越的的接口与实现类的增加后,duboo的xml配置会越来越多,为了防止几百几千行的代码,减少开发人员配置xml的工作量,使用duboo的注解模式,减少配置多出问题多的可能性!
174 0
duboo注解使用详解
扒一扒@Retryable注解,很优雅,有点意思! (3)
扒一扒@Retryable注解,很优雅,有点意思! (3)
507 0
扒一扒@Retryable注解,很优雅,有点意思! (3)
|
Java Maven
扒一扒@Retryable注解,很优雅,有点意思! (5)
扒一扒@Retryable注解,很优雅,有点意思! (5)
274 0
扒一扒@Retryable注解,很优雅,有点意思! (5)