Java学习Day42:骑龙救!(springMVC)

news2024/11/15 14:23:41

springMVC与sevlet都是对应表现层web的,但是越复杂的项目使用SpringMVC越方便

基于Java实现MVC模型的轻量级web框架

目标:

小案例:

1.导入依赖

spring-context: 提供 Spring 框架的核心功能,如依赖注入、事件发布和其他应用上下文的功能。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.20</version>
</dependency>
aspectjweaver: 提供 AspectJ 框架的织入支持,允许你在 Spring 应用中使用面向切面编程(AOP)
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<!--   springMVC依赖注入     -->
javax.servlet-api: 提供 Java Servlet API 的接口,用于构建 web 应用的服务器端逻辑。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
spring-webmvc: 支持 Spring MVC 框架,用于构建 web 应用程序的控制器和视图层,处理 HTTP 请求和响应。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>请告诉我这些依赖的作用

2.使用@controller定义Bean,并定义访问路径

@Controller
public class UserController {
    @RequestMapping("save")//定义访问路径
    @ResponseBody//设置当前返回值类型,将返回值当作一个整体返回
    public String save() {
        System.out.println("user save");
        return "{'info':'springmvc'}";
    }
}

3.创建springmvc的配置文件,加载controller 对应的bean

@Configuration
@ComponentScan("com.viki.controller")
public class SpringConfig {
}

4.定义一个servlet容器启动的配置类,在里面加载spring的配置

定义一个servlet容器启动的配置类,在里面加载spring的配置
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
    @Override//加载springMVC容器配置
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
        ctx.register(SpringConfig.class);
        return (WebApplicationContext) ctx;
    }

    @Override//设置哪些请求归属springMVC处理

    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @OverrideJ//加载spring容器配置

    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

1.请求与响应

@Controller
@RequestMapping("/hello")
@ResponseBody// 类级别的请求映射
public class HelloHandler {
    @RequestMapping(value = "/index")  // 方法级别的请求映射
    public String index(String name,int age) {
        System.out.println("接受请求!"+"name:"+name+"age"+age);
        return "HelloHandler";
    }
    @RequestMapping( "/indexdifnam")
    @ResponseBody// 方法级别的请求映射
    public String indexdifnam(@RequestParam("name") String username, int age) {
        System.out.println("接受请求!"+"username:"+username+"age"+age);
        return "HelloHandler";
    }
    @RequestMapping( "/javabeanpar")
    @ResponseBody// 方法级别的请求映射
    public String javabeanpar(User user) {
        System.out.println("接受请求!"+"user===>"+user);
        return "HelloHandler";
    }
    @RequestMapping( "/set")
    @ResponseBody// 方法级别的请求映射
    public String set(@RequestParam List<String> list) {
        System.out.println("接受请求!"+"集合===>"+list.toString());
        return "HelloHandler";
    }
}

json数据

重要注释:

响应JSON数据只需要在对相应方法上@RequestBody方法,return后写上对应的String串,或者对象即可

此注解可以激活spring MVC的自动类型转换

类型转换数据依赖

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

2.REST编码风格

3.SSM整合

4.拦截器

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

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

相关文章

嵌入式开发—CAN通信协议详解与应用(下)

书接上回&#xff1a; 嵌入式开发—CAN通信协议详解与应用&#xff08;中&#xff09;-CSDN博客 注&#xff1a;本文只是说明了如何进行基础的CAN收发操作&#xff0c;复杂CAN操作可以看这篇文章 Linux 底软开发——对CAN的详细操作&#xff08;周期发送&#xff0c;异常检测…

VMware ESXi 8.0U3b 发布下载,新增功能概览

VMware ESXi 8.0U3b 发布下载&#xff0c;新增功能概览 同步发布 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士通)、NEC (日电) 定制版 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-8-u3/&#…

3分钟了解 跨网文件安全交换的最佳方案是什么

跨网文件交换的背景介绍 跨网文件安全交换是指在不同网络环境下&#xff08;如不同的组织、企业、机构或国家&#xff09;进行文件传输时&#xff0c;确保文件的安全性、完整性和保密性。随着信息技术的发展和网络的广泛应用&#xff0c;跨网文件交换变得越来越普遍&#xff0…

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期]

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期] 第五期介绍&#xff1a;频道模块之接口授权管理和发言管理 目录 QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期]第五期介绍&#xff1a;频道模块之接口授权管理和发言管理获取机器人在频道可用权限列表…

电磁场与电磁波 1.1矢量基础知识

1.标量 2.矢量 大小方向 用有方向的线段表示 在直角坐标系下 3.运算法则 (1)加法&#xff1a;平行四边形法则 (2)乘法&#xff1a;点乘&叉乘 点乘 两个向量a与b的内积为 ab |a||b|cos∠(a, b)&#xff0c;特别地&#xff0c;0a a0 0&#xff1b;若…

Kettle的安装与基本使用

什么是Kettle&#xff1f; Kettle最早是一个开源的ETL&#xff08;Extract-Transform-Load的缩写&#xff09;工具&#xff0c;全称为KDE Extraction, Transportation, Transformation and Loading Environment。是一个功能丰富的ETL工具&#xff0c;它允许用户轻松地进行数据抽…

老板电器让AI融入烹饪?老板数字厨电实力展示AI做饭!

AI技术的迅猛发展已经深刻地改变了众多行业的面貌&#xff0c;其影响力远远超出了计算机科学本身的范畴。在追求生产效率与自动化的道路上&#xff0c;AI无疑成为最强大的驱动力之一&#xff0c;正是在这样的背景下&#xff0c;老板电器发布的「食神」AI大模型也为老板数字厨电…

国外创意二维码应用案例:韩国Cheil特别制作“希望胶带”,帮助寻找失踪儿童!

每年&#xff0c;在全世界都有大量的儿童失踪案件发生。对于父母来说&#xff0c;仅凭一张照片、一张海报要在茫茫人海里找到失踪的孩子&#xff0c;何其艰难&#xff1f; 2020年5月&#xff0c;韩国广告公司Cheil与韩国国家警察局宣布&#xff1a;为寻找长期失踪儿童&#xf…

VBA编写代码导出和导入类、模块、窗体

功能描述 为了方便备份代码&#xff0c;运行一个函数&#xff0c;导出类、模块、窗体。当在其他vba工程使用时&#xff0c;可以运行另外一个函数&#xff0c;快速导入代码。 1、开发人员宏设置&#xff1a;信任对VBA工程对象模型的访问 2、引用 Microsoft Visual Basic for A…

【非常实用—Navicat重置 MySQL 的密码】

Navicat重置 MySQL 的密码 连接本地数据库&#xff0c;忘记原始密码停止 MySQL 服务以安全模式启动 MySQL打开新的命令行窗口重置密码停止 MySQL 并重启 连接本地数据库&#xff0c;忘记原始密码 停止 MySQL 服务 在命令行中使用以下命令停止服务&#xff08;Windows 下&#…

2024秋季学期期中考

密码 mmmd5 直接在网上找一个md5解密的网站现场来解就可以了。每一段都拼接起来就可以了。 但是的话&#xff0c;也可以直接用脚本&#xff0c;但是要用到MD5的字典。 它给了一个附件&#xff0c;可以借助此来解答。 那么我们主要来学习一下hash函数&#xff0c; 哈希函数&…

15.10 在k8s部署grafana-deployment并导入k8s大盘

本节重点介绍 : grafana deployment部署k8s大盘导入 准备yaml 部署工作 1. 修改yaml中的节点选择器标签 k8s-node01改为你自己的节点 2. 在节点上创建数据目录 mkdir -pv /data/grafana3. 部署grafana # 部署 kubectl apply -f deployment.yaml # 检查 [rootprome-mast…

CMU 10423 Generative AI:lec7、8、9(专题1:AE、VAE详解)

文章目录 1 AE&#xff08;自编码器&#xff09;1.1 自编码器干什么用的1.2 自编码器的架构图、输入输出、训练方法1.3 常见应用1.4 代码示例&#xff1a;图片的压缩存储和复原 2 VAE&#xff08;变分自编码器&#xff09;2.1 概述2.2 AE存在的问题&#xff1a;隐空间不平滑&am…

ad 明明已经给原理图库添加封装了,为什么还是看不到

不得不说&#xff0c;ad可能真的是比较庞大也不比较冗余&#xff0c;使用的过程中就会出现各种各样的问题&#xff0c;明明所有的操作都没问题&#xff0c;可是就是没能得到自己想要的&#xff0c;额 真的一言难尽 软件本身也很庞大了 各种东西可能一下子反应不过来&#xf…

谁的大一不迷茫?网络安全到底该怎么入门?

大一的新生&#xff0c;都在向我询问类似的问题&#xff1a; 网络安全要学的东西好杂&#xff0c;找不到方向了&#xff0c;迷茫了 同学们都在研究xxx&#xff0c;我要去学吗&#xff1f; 精力有限&#xff0c;我到底该学什么编程语言&#xff0c;好怕选错啊 最近下班比较早…

指针 (六)

OK&#xff0c;书接上回&#xff0c;咱们继续&#xff1a; 一 . 函数指针变量 &#xff08;1&#xff09;函数指针变量的创建 首先我们得明白&#xff0c;什么是函数指针变量呢&#xff1f;从我们之前学习过的整型指针&#xff0c;数组指针的相关知识当中&#xff0c;通过类…

【软件测试】什么叫测试?

生活中的测试 测试在生活中是处处可见的 例如&#xff1a;在商场购买衣服 外观测试&#xff1a;挑选符合个人审美的衣服试穿测试&#xff1a;选择尺码&#xff0c;试穿材质测试&#xff1a;考虑材质相关问题价格测试&#xff1a;价格是否符合预期 例如&#xff1a;在购物软件购…

【逐行注释】自适应观测协方差R的AUKF(自适应无迹卡尔曼滤波,MATLAB语言编写),附下载链接

文章目录 自适应R的UKF逐行注释的说明运行结果部分代码各模块解释 自适应R的UKF 自适应无迹卡尔曼滤波&#xff08;Adaptive Unscented Kalman Filter&#xff0c;AUKF&#xff09;是一种用于状态估计的滤波算法。它是基于无迹卡尔曼滤波&#xff08;Unscented Kalman Filter&…

简单题58-最后一个单词的长度(Java and Python)20240918

问题的描述&#xff1a; python代码&#xff1a; class Solution(object):def lengthOfLastWord(self, s):""":type s: str:rtype: int"""# 去掉字符串前后的空格s s.strip()# 分割字符串&#xff0c;获取单词列表words s.split(" "…

9.1 溪降技术:游泳

目录 9.1 游泳概述观看视频课程电子书&#xff1a;游泳防御性游泳姿势**身体姿势** 积极游泳姿势**身体姿势** 总结 9.1 游泳 概述 深潭游泳 对于峡谷探险者来说&#xff0c;游泳是一项核心技能。我们的游泳水平和自信心将在很大程度上决定我们的路线选择。在这一阶段&#xff…