srpingMVC基本使用

news2024/11/24 9:37:52

文章目录

  • 1. springMVC基本功能
    • (1) maven坐标导入
    • (2) 编写表现层
    • (3) springMVC配置类编写
    • (4) 部署tomcat访问
  • 2. 各种请求方法
    • get请求
    • post请求
    • put请求
    • delete请求
    • 请求参数提取
  • 3. 请求参数接收
    • (1) param参数接受
      • 封装到对象中
    • (2) 路劲参数接收
    • 集合接受
    • 时间类型接收
    • json参数接收
      • maven导包
      • 开启功能
      • 接收数据
  • 4. 响应数据
  • 5. 全局异常处理
  • 6. springMvc拦截器(Interceptor)

1. springMVC基本功能

与servlet技术功能相等,实现表现层开发:

(1) maven坐标导入

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>6.0.11</version>
    </dependency>
    <dependency>
      <groupId>jakarta.servlet</groupId>
      <artifactId>jakarta.servlet-api</artifactId>
      <version>5.0.0</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

(2) 编写表现层

@Controller         // 使用controller定义bean
public class test {

    @GetMapping("/hello")
     @ResponseBody		// 直接返回给浏览器
    public String testMVC(){
        System.out.println("接收到请求");
        return "hello world!";
    }
}

(3) springMVC配置类编写

容器配置:

package com.xjy.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan({"com.xjy.controller"})
public class MvcConfig {
}

定义 Spring MVC应用程序的初始化器:

package com.xjy.config;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
public class MvcContainerInit extends AbstractDispatcherServletInitializer {
//创建DispatcherServlet的应用程序上下文(ApplicationContext)
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(MvcConfig.class);
        return ctx;
    }
    //指定DispatcherServlet的映射路径
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
    public WebApplicationContext context(){
        return this.createServletApplicationContext();
    }
}

(4) 部署tomcat访问

注意对应的版本:
在这里插入图片描述

部署tomcat程序:
在这里插入图片描述
启动程序后浏览器访问:
在这里插入图片描述

2. 各种请求方法

get请求

    @GetMapping("/get") // 接受get请求
    @ResponseBody
    public String get(){
        System.out.println("接受到请求");
        return "get";
    }

post请求

        @PostMapping("/post")
    @ResponseBody
    public String post(){
        System.out.println("接受到请求");
        return "post";
    }

put请求

    @PutMapping("/put")
    @ResponseBody
    public String put(){
        System.out.println("接受到请求");
        return "put";
    }

delete请求

    @DeleteMapping("/delete")
    @ResponseBody
    public String delete(){
        System.out.println("接受到请求");
        return "delete";
    }

请求参数提取

@Controller
@RequestMapping("/user")
public class userController {
    @RequestMapping("/hello")
    @ResponseBody
    public String save(){
        System.out.println("接受到请求");
        return "hello word!";
    }
   }

访问:
在这里插入图片描述

3. 请求参数接收

(1) param参数接受

直接参数接收:

    @GetMapping("/get")
    @ResponseBody
    public String get(int id){
        System.out.println("接受到请求"+id);
        return "get";
    }

在这里插入图片描述

封装到对象中

    @GetMapping("/get")
    @ResponseBody
    public String get(student stu){
        System.out.println("接受到请求"+stu.getName()+stu.getAge());
        return "get";
    }

发送请求:
在这里插入图片描述
在这里插入图片描述

(2) 路劲参数接收

    @GetMapping("/get/{id}")
    @ResponseBody
    public String get(@PathVariable int id){
        System.out.println("接受到路劲参数:"+id);
        return "get";
    }

发送请求:
在这里插入图片描述
在这里插入图片描述

集合接受

    @PostMapping("/post")
    @ResponseBody
    public String post(@RequestParam List<Integer> list){
        System.out.println("接受到请求"+list.get(0));
        return "ok";
    }

发送请求:
在这里插入图片描述

时间类型接收

    @GetMapping("/get")
    @ResponseBody
    public String get(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date){
        System.out.println("接受到时间参数:"+date);
        return "get";
    }

发送:
在这里插入图片描述

json参数接收

maven导包

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.13.3</version>
    </dependency>

开启功能

@Configuration
@ComponentScan({"com.xjy.controller"})
@EnableWebMvc
public class MvcConfig {
}

接收数据

    @PostMapping("/post")
    @ResponseBody
    public String post(@RequestBody student stu){
        System.out.println("接受到请求"+ stu.getName());
        return "{'status','ok'}";
    }

发送数据:
在这里插入图片描述

4. 响应数据

方法中直接return

返回json: @ResponseBody 加上注解
@RestController -> @controller + @ResponseBody
在这里插入图片描述

5. 全局异常处理

注解需要配包扫描:

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public String exceptionHandler(Exception ex){
        System.out.println("处理到异常");
        return "err";
    }
}

模拟异常:
在这里插入图片描述

6. springMvc拦截器(Interceptor)

自定义拦截:


public class interceptorDo implements HandlerInterceptor {
    @Override // 拦截方法
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截到请求");
        return true;//返回true放行,返回不放行;
    }
    @Override  //资源运行后执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }
    @Override  //视图渲染完毕后执行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

配置拦截器:


@Configuration
@ComponentScan({"com.xjy.controller"})
@EnableWebMvc       
public class MvcConfig implements WebMvcConfigurer {
    @Bean
    public interceptorDo getInteceptor(){
        return new interceptorDo();
    }
    @Autowired
    private interceptorDo interceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
       registry.addInterceptor(interceptor)
               .excludePathPatterns("/long");//过滤登录拦截
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1626997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙OpenHarmony【轻量系统 编写“Hello World”程序】 (基于Hi3861开发板)

编写“Hello World”程序 下方将通过修改源码的方式展示如何编写简单程序&#xff0c;输出“Hello world”。请在下载的源码目录中进行下述操作。 确定目录结构。 开发者编写业务时&#xff0c;务必先在./applications/sample/wifi-iot/app路径下新建一个目录&#xff08;或一…

Electron中使用Prisma(以SQLite为例)

1、安装 Prisma 打开终端&#xff0c;执行以下命令安装 Prisma CLI&#xff1a; npm install prisma -g 2、初始化 Prisma 项目 在工作目录中执行以下命令来初始化一个新的 Prisma 项目&#xff1a; prisma init 这将创建一个新的文件夹&#xff0c;包含了必要的文件和目…

proteus+stm32+CubeMX+dht11+lcd1602

浅浅记录下过程遇到的问题&#x1f921;&#x1f921;&#x1f921; 1 供电网配置错误&#xff08;加上就好了 新起个名也会出这个 / 电源不起名 不创建估计项目也会&#xff09;没zet6的 proteus 里 固件库 账号注册半天没成 就用的stm32F103R6的然后发现单片机不输出高低电平…

ElasticSearch 安装(docker)

下载安装包 阿里云链接&#xff1a; elasticSearch.exe https://www.alipan.com/s/3A356NnmWaJ 提取码: 93da 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速播放。 安装步骤 1、首先…

RabbitMQ发布确认和消息回退(6)

概念 发布确认原理 生产者将信道设置成 confirm 模式&#xff0c;一旦信道进入 confirm 模式&#xff0c;所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始)&#xff0c;一旦消息被投递到所有匹配的队列之后&#xff0c;broker就会发送一个确认给生产者(包含消…

2024精武杯复现

第一部分&#xff1a;计算机和手机取证 1. 请综合分析计算机和手机检材&#xff0c;计算机最近一次登录的账户名是 用火眼分析后在登录信息查找最后登录的人&#xff0c;用户名是admin 2. 请综合分析计算机和手机检材&#xff0c;计算机最近一次插入的USB存储设备串号是 在u…

AIX7环境上一次艰难的Oracle打补丁经历

系统环境 AIX &#xff1a;7200-05-03-2148 Oracle&#xff1a;11.2.0.4 PSU: 11.2.0.4.201020&#xff08;31718723&#xff09; perl:5.28 问题一&#xff1a;AUTO patch #/u01/app/11.2.0/grid/OPatch/opatch auto /tmp/31718723 错误信息如下&#xff1a;匹配mos 2516761.1…

Spring MVC系列之九大核心组件

概述 Spring MVC是面试必问知识点其一&#xff0c;Spring MVC知识体系庞杂&#xff0c;有以下九大核心组件&#xff1a; HandlerMappingHandlerAdapterHandlerExceptionResolverViewResolverRequestToViewNameTranslatorLocaleResolverThemeResolverMultipartResolverFlashMa…

LeetCode 面试题 08.02——迷路的机器人

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题就是一个典型的图搜索题&#xff0c;一种就是广度优先搜索&#xff0c;一种就是深度优先搜索。 3. 代码实现 class Solution { public:vector<vector<int>> pathWithObstacles(vector<vecto…

Go源码--Strconv库

简介 Strconv 库是一些跨类型的转换函数集合&#xff0c;大家应该很熟悉。源码没有什么难点&#xff0c;主要是面试题有可能会出这种类型的&#xff0c;所以简单介绍下&#xff0c;主要介绍 以下两种常用转换&#xff0c;其他的没细研究&#xff0c;感兴趣的可以看看。 Strco…

[笔试训练](八)

目录 022&#xff1a;求最小公倍数 023&#xff1a;数组中的最长连续子序列 024&#xff1a;字母收集 022&#xff1a;求最小公倍数 求最小公倍数_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 求最小公倍数公式&#xff1a;lcm(a,b)a*b/gcd(a,b)&am…

网页提示语闪太快的定位问题(selenium)

selenium UI自动化时&#xff0c;提示语闪太快&#xff0c;导致无法获取元素的问题 解决办法 步骤一&#xff1a; F12---》控制台输入debugger 步骤二&#xff1a;对于需要定位的部分&#xff0c;在控制台的debugger处回车&#xff0c;可以定住页面 步骤三&#xff1a;正常定…

win11 安装qt5.14.2 、qtcreator、vs编译器 。用最小安装进行 c++开发qt界面

系统 &#xff1a;win11 一、安装vs生成工具 &#xff0c;安装编译器 下载visualstudio tools 生成工具&#xff1a; 安装编译器 和 windows sdk&#xff1a; 安装debug 调试器&#xff1a; 二、Qt5.14.2下载 下载链接: Index of /archive/qt/5.14/5.14.2 安装qt 三、配置QT/…

MVP+敏捷开发

MVP敏捷开发 1. 什么是敏捷开发&#xff1f; 敏捷开发是一种软件开发方法论&#xff0c;旨在通过迭代、自组织的团队和持续反馈&#xff0c;快速响应需求变化并交付高质量的软件。相较于传统的瀑布模型&#xff0c;敏捷开发强调灵活性、适应性和与客户的紧密合作。敏捷开发方…

Llama网络结构介绍

LLaMA现在已经是开源社区里炙手可热的模型了&#xff0c;但是原文中仅仅介绍了其和标准Transformer的差别&#xff0c;并没有一个全局的模型介绍。因此打算写篇文章&#xff0c;争取让读者不参考任何其他资料把LLaMA的模型搞懂。 结构 如图所示为LLaMA的示意图&#xff0c;由…

解决ax = Axes3D(fig2)pycharm画3d图空白不显示问题

明明代码运行正确&#xff0c;却总是显示不出来 绘制出来的也是空白 改一下代码就好了 ax Axes3D(fig2) #原来代码 ax fig2.add_axes(Axes3D(fig2)) #改后代码 修改过后就可以显示了

【Jenkins】持续集成与交付 (三):有关报错解决(Jenkins (2.387.3) or higher required)

【Jenkins】持续集成与交付 (三):有关报错解决Jenkins (2.387.3) or higher required 一、Jenkins主页报错二、安装Jenkins插件报错三、解决过程(解压替换jenkins.war)四、重新访问登录💖The Begin💖点点关注,收藏不迷路💖 一、Jenkins主页报错 New version of J…

【nodejs状态库mobx之computed规则】

The above example nicely demonstrates the benefits of a computed value, it acts as a caching point. Even though we change the amount, and this will trigger the total to recompute, it won’t trigger the autorun, as total will detect its output hasn’t been …

一分钟了解期权合约转仓交易的流程

期权合约转仓交易的流程 期权合约转仓交易是指在期权交易过程中&#xff0c;交易者平掉手中现有的仓位&#xff0c;并选择更高或更低的行权价格&#xff0c;进行买入或卖出开仓的交易方法。转仓交易具有多个优势&#xff0c;包括降低风险、锁定利润、提高资金使用效率以及增加…

关于Github默认分支main和master以及如何在git init时指定默认分支

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…