栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC基础学习之Controller的两种实现方式和RequstMapping注解的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC基础学习之Controller的两种实现方式和RequstMapping注解的使用

前言:

小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师。

这个SpringMVC基础学习系列是用来记录我学习SpringMVC框架基础知识的全过程 (这个系列是参照B站狂神的SpringMVC最新教程来写的,由于是之前整理的,但当时没有发布出来,所以有些地方可能有错误,希望大家能够及时指正!)


之后我将尽量以两天一更的速度更新这个系列,还没有学习SpringMVC框架的小伙伴可以参照我的博客学习一下;当然学习过的小伙伴,也可以顺便跟我一起复习一下基础。最后,希望能够和大家一同进步吧,加油吧,编程人!

特别提醒:如果对SpringMVC基础学习系列感兴趣,可以阅读本系列往期博客:
第一篇:SpringMVC基础学习之简单回顾MVC架构和Servlet的使用
第二篇:SpringMVC基础学习之初识SpringMVC
第三篇:SpringMVC基础学习之初识
第三篇:SpringMVC基础学习之使用注解开发


今天我们来到了SpringMVC基础学习的第五站:Controller的两种实现方式和RequstMapping注解的使用 。废话不多说,让我们开始今天的学习内容吧。

5.Controller的两种实现方式和RequstMapping注解的使用 5.1 什么是Controller?
  • Controller (即控制器) ,它主要负责提供访问应用程序的行为和解析用户的请求,并将其转换为一个模型,通常通过接口定义注解定义这两种方式来实现
  • Spring MVC中一个控制器类可以包含多个方法,并且对于 Controller的配置方式 包含多种,包括接口定义注解定义
5.2 实现Controller接口 5.1.1 了解Controller接口
  • Controller是一个接口,在org.springframework.web.servlet.mvc包下,为了进一步了解它,我们可以查看其源代码:
// 实现该接口的类获得控制器功能
public interface Controller {
    
    // 处理请求并返回一个模型与视图对象
    ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
    
}

查看Controller接口的源码后,发现该接口中只有一个方法,即handleRequest方法,用来处理请求并返回一个ModelAndView(模型和视图)对象

5.1.2 创建HelloController类
  • src源文件下的java目录中创建一个com.kuang.controller包,创建HelloController类并且实现Controller接口
package com.kuang.controller;

import org.springframework.web.servlet.ModelAndView;
// 注意: 该Controller接口是servlet.mvc包下
import org.springframework.web.servlet.mvc.Controller; 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 只要实现了Controller接口的类,说明这就是一个控制器了
public class HelloController implements Controller {
    
    
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        // 获取ModelAndView(模型视图)对象
        ModelAndView mv = new ModelAndView();
        // 封装数据到ModelAndView对象中
        mv.addObject("msg","Hello,Controller!");
        // 设置跳转视图, 存入到ModelAndView对象中
        mv.setViewName("hello");
        // 返回视图模型对象给视图解析器
        return mv;
    }
    
}
5.1.3 编写核心配置文件 1.编写web.xml配置文件


    
    
    
    
        
        springmvc
        
        org.springframework.web.servlet.DispatcherServlet
        
            
            contextConfigLocation
            
            classpath:springmvc-servlet.xml
        
        
        1
    
    
    
    
        springmvc
        
        // 封装数据:向模型中添加属性msg与其值,可以在JSP页面取出并且渲染
        model.addAttribute("msg","Hello,Controller!");
        // 会被视图解析器处理,注意:这里的hello对应的是JSP页面的名字
        return "hello";
    }
    
    // 使用@RequestMapping注解, 设置请求映射, 其作用域是类或者方法
    @RequestMapping("/h2") 
    public String hello2(Model model) {
        // 封装数据: 向模型中添加属性msg与其值,可以在JSP页面取出并且渲染
        model.addAttribute("msg","Hello,World!");
        // 会被视图解析器处理(注意: 这里的hello对应的是JSP页面的名字)
        return "hello";
    }
    
}
5.1.3 编写核心配置文件 1.编写web.xml配置文件


    
    
    
    
        
        springmvc
        
        org.springframework.web.servlet.DispatcherServlet
        
            
            contextConfigLocation
            
            classpath:springmvc-servlet2.xml
        
        
        1
    
    
    
    
        springmvc
        
        // 封装数据: 向模型中添加属性msg与其值,进行视图渲染
        model.addAttribute("msg","Hello,RequestMapping!");
        // 返回视图逻辑名,让视图解析器进行解析(注意:这里的hello是要跳转的视图逻辑名)
        return "hello"; 
    }
    
}
1-2 修改路径后
  • hello.jsp的存放路径修改为WEB-INF/jsp/user/hello.jsp,即在jsp文件下创建一个user,将hello.jsp放入其中
package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

// 使用@Controller注解, 将该类注册为Controller接口, 交由Spring的IOC容器统一管理
@Controller
public class HelloController3 {
    
    
    @RequestMapping("/user/hello3") 
    public String hello3(Model model) {
        // 封装数据: 向模型中添加属性msg与其值,进行视图渲染
        model.addAttribute("msg","Hello,User!");
        // 返回视图逻辑名,让视图解析器进行解析 (注意: 由于路径发生了改变,因此要跳转的视图逻辑名也要相应变化)
        return "hello/user"; 
    }
    
}

建议这样使用@RequestMapping注解,即在方法前的映射请求中设置全路径

2.测试结果 2-1 使用正常路径

结果:成功查询到了hello2页面,并且显示“Hello,RequestMapping!”信息

2-2 修改路径后

结果:成功查询到了user/hello3页面,并且显示“Hello,User”信息!

5.4.2 在类和方法上同时使用 1.修改HelloController3控制类
  • hello.jsp的存放路径仍然为WEB-INF/jsp/user/hello.jsp
package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

// 使用@Controller注解, 将该类注册为Controller接口, 交由Spring的IOC容器统一管理
@Controller
// 在控制类上使用@RequestMapping: 相当于在URL链接上再加一个父目录进行区分 
@RequestMapping("/user") // 先访问类上的/user
public class HelloController3 {
    
    // 真实访问路径变为了:http://localhost:8080/项目名称/user/hello2
    @RequestMapping("/hello2") //再访问/hello2
    public String hello2(Model model) {
        // 封装数据:向模型中添加属性msg与值,进行视图渲染
        model.addAttribute("msg","Hello,RequestMapping2!");
        // 返回视图逻辑名,让视图解析器进行解析 (注意: 由于路径发生了改变,因此要跳转的视图逻辑名也要相应变化)
        return "user/hello"; 
    }
    
}
2.测试结果

结果:成功查询到了user/hello2页面,并且显示“Hello,RequestMapping2!”信息

5.4.3 使用总结
  • 只在方法上使用@RequestMapping注解,代码编写更加简便,只用在每个方法前设置映射关系,而且方法中的页面的路径选择更加宽泛
  • 在类和方法上同时使用@RequestMapping注解,逻辑更加清晰,但页面的调用范围也受到了限制,即只能调用在类上的映射关系中设置的父目录下的页面

好了,今天的有关 Controller的两种实现方式和RequstMapping注解的使用 的学习就到此结束啦。欢迎小伙伴们积极学习和讨论,喜欢的可以给蜗牛君点个关注,顺便来个一键三连。我们下期见,拜拜啦!


参考视频链接:【狂神说Java】SpringMVC最新教程IDEA版通俗易懂

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490797.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号