zoukankan      html  css  js  c++  java
  • SpringMVC-04-Controller

    4. Controller及RestFul风格

    控制器Controller

    • 控制器提供访问应用程序的行为,通常通过接口定义或注解定义实现;
    • 控制器负责解析用户的请求并将其转化为一个模型;
    • 在SpringMVC中一个控制器类可以包含多个方法;
    • 对于Controller的配置方式有很多种(紧接下文)

    实现Controller接口

    1. 编写一个Controller类,ControllerTest1

      public class ControllerTest1 implements Controller {
          public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
              ModelAndView mv = new ModelAndView();
      
              mv.addObject("msg","ControllerTest1");
      
              mv.setViewName("test");
      
              return mv;
          }
      }
      
    2. 编写完毕后,去Spring配置文件中注册请求的bean;name对应请求路径,class对应请求的类

      <bean id="/test" class="com.kuang.controller.ControllerTest1"/>
      
    3. 编写前端的test.jsp,对应视图解析器

    4. 配置Tomcat运行测试,这里的项目发布名配置就是一个/,所以请求不用加项目名。

    说明:

    • 实现接口的方法比较古老,不建议使用;
    • 缺点:一个控制器类只有一个方法;

    使用注解方法

    • @Controller注解类型用于声明Spring类的实例是一个控制器,另外还有3个等效的注解:

      • Component
      • @Service
      • @Repository
    • Spring可以使用扫描机制找到所有基于注解的控制器类,为了保证Spring找到你的控制器,需要在配置文件中声明组件扫描;

      <!--自动扫描包 让指定包下的注解生效 由IOC容器统一管理-->
      <context:component-scan base-package="com.kuang.controller"/>
      
    • 增加一个ControllerTest2类,使用注解实现;

      @Controller //代表这个类会被Spring接管,被这个注解的类,中的所有方法,如果返回值是String,并且可以跳转,那么就会被视图解析器解析
      public class ControllerTest2 {
          @RequestMapping("/test2")
          public String test1(Model model){
      
              model.addAttribute("msg","ControllerTest2");
      
              return "test";
          }
      }
      
    • 运行Tomcat测试

    多个请求可以指向一个视图,但页面结果可以不一样,可以看出视图是被复用的,而控制器和视图之间是弱耦合关系。

    RequestMapper

    @RequestMapper

    • 该注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法。用于类上,表示类中所有的响应请求的方式都是以该地址作为父路径。
  • 相关阅读:
    Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
    error: RPC failed; result=22, HTTP code = 411
    linux进程控制命令
    主机找不到vmnet1和vmnet8
    sqlserver安装相关问题
    linux下使用libiconv库转码
    Jenkins持续集成
    Ansible性能调优
    Ansible Playbook
    Ansible模块
  • 原文地址:https://www.cnblogs.com/CodeHuba/p/13608043.html
Copyright © 2011-2022 走看看