SpringMVC 环境搭建入门

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中。

SpringMVC 已经成为目前最主流的MVC框架之一,并且随着Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持 RESTful 编程风格的请求。

三层架构

在这里插入图片描述

快速入门

结合JavaWEB的Servlet一起看

  1. 导入SpringMVC相关坐标
<!--Spring坐标-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.5.RELEASE</version>
</dependency><!--SpringMVC坐标-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.0.5.RELEASE</version>
</dependency><!--Servlet坐标-->
<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version>
</dependency><!--Jsp坐标-->
<dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version>
</dependency>
  1. 配置SpringMVC核心控制器DispathcerServlet
<servlet><!-- servlet的别名 --><servlet-name>DispatcherServlet</servlet-name><!--servlet对应的类--><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--servlet初始化--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><!-- servlet的创建时机,可写可不写 --><load-on-startup>1</load-on-startup>
</servlet><!-- 映射,将servlet与url绑定 -->
<servlet-mapping><!-- servlet的名称,要和上面的名称一致--><servlet-name>DispatcherServlet</servlet-name><!-- servlet的访问路径--><url-pattern>/</url-pattern>
</servlet-mapping>

也可以使用配置类替换web.xml

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {/*** 加载springmvc配置类*/@Overrideprotected WebApplicationContext createServletApplicationContext() {//初始化WebApplicationContext对象AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();//加载指定配置类ctx.register(SpringMvcConfig.class);return ctx;}/*** 设置由springmvc控制器处理的请求映射路径*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}/*** 加载spring配置类*/@Overrideprotected WebApplicationContext createRootApplicationContext() {return null;// 上面是因为之加入了MVC的依赖,如果项目中还有Spring的配置文件,则需要加入下面的代码:// AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();// ctx.register(SpringConfig.class);// return ctx;}
}

上述的配置方式,Spring还提供了一种更简单的配置方式,可以不用再去创建AnnotationConfigWebApplicationContext对象,不用手动register对应的配置类:

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {protected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}protected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}protected String[] getServletMappings() {return new String[]{"/"};}
}
  1. 创建Controller类和视图页面
  2. 使用注解配置Controller类中业务方法的映射地址

如果方法直接返回字符串,springmvc会把字符串当成页面的名称在项目中进行查找返回,因为不存在对应返回值名称的页面,所以会报404错误,找不到资源。设置返回数据为json格式(加**@ResponseBody****注解)。**

@Controller
public class UserController {@ResponseBody@RequestMapping("/save")public String save(){System.out.println("user save ...");return "{'info':'springmvc'}";}
}
  1. 配置SpringMVC核心文件 spring-mvc.xml
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--配置注解扫描--><context:component-scan base-package="com.qaomuu"/>
</beans>

也可以创建配置类,指定要扫描的包

@Configuration
@ComponentScan("com.qaomuu")
public class SpringMvcConfig {
}
  1. 客户端发起请求测试,部署到Tomact中,并启动,访问http://localhost:8080/save

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

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

相关文章

C++面试:hash算法基础

目录 基础概念 示例&#xff1a; 示例哈希函数 哈希规则 示例代码 面试中可能遇到的问题 解释哈希冲突及其解决方法 不同哈希算法的比较 MD5&#xff08;Message-Digest Algorithm 5&#xff09; SHA-1&#xff08;Secure Hash Algorithm 1&#xff09; SHA-256&…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第六天-Linux下的boa(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1VUc8cGI7bTtXuGepZZY3Ng?pwd1688 提取码&#xff1a;1688 一、 1. www.boa.org下载boa-0.94.13.tar.gz 2. 解压 tar zxvf boa-0.94.13.tar.gz 3、cd src/ 4、./configure 5、 修改src/boa.c 注释掉下面语句: if (setuid(0) !…

什么是 React的refs?为什么它们很重要

Refs是React中的一个特殊属性&#xff0c;用于访问在组件中创建的DOM元素或组件实例。 Refs的重要性在于它们提供了一种直接访问DOM元素或组件实例的方式&#xff0c;使得我们可以在需要时操作它们。在某些情况下&#xff0c;例如在处理表单输入、媒体播放或触发动画等场景下&…

WPF自定义控件,聚合器模式传递消息

背景&#xff1a;自定义控件的消息传递和方法的调用可以使用聚合器来进行 定义聚合器&#xff1a; public class EventAggregator {public static ConcurrentDictionary<Type, List<Action<object>>> _handles new ConcurrentDictionary<Type, List<…

02 Redis之配置文件

3. Redis配置文件 3.1 网络部分 首先明确&#xff0c;tcp-backlogestablished Linux 内核 2.2 版本之后&#xff08;现在大部分都是3.x了&#xff09; TCP 系统中维护了两个队列, 用来存放TCP连接 a. SYN_RECEIVED 队列中存放未完成三次握手的连接 b. ESTABLISHED队列中存放已…

Java面试题之序列化和反序列化

Java面试题之序列化和反序列化 文章目录 Java面试题之序列化和反序列化序列化和反序列化什么是序列化?什么是反序列化?如果有些字段不想进行序列化怎么办&#xff1f;常见序列化协议有哪些&#xff1f;为什么不推荐使用 JDK 自带的序列化&#xff1f; 文章来自Java Guide 用于…

windows c++qt获取本机网卡信息

利用qt自带的QNetworkInterface接口以及cIphlpapi库&#xff0c;获取当前windows电脑下的网卡型号、物理地址、ip地址、子网掩码、网关等信息。 #include <QtNetwork/QNetworkInterface>#include <iostream> #include <Windows.h> #include <iphlpapi.h&…

腾讯云4核16G服务器价格,用于幻兽帕鲁Palworld专用

腾讯云幻兽帕鲁服务器4核16G、8核32G和16核64G配置可选&#xff0c;4核16G14M带宽66元一个月、277元3个月&#xff0c;8核32G22M配置115元1个月、345元3个月&#xff0c;16核64G35M配置580元年1个月、1740元3个月、6960元一年&#xff0c;腾讯云百科txybk.com分享腾讯云幻兽帕鲁…

wsl装ubuntu的home目录在哪,如何更改home?

wsl安装的ubuntu目录默认情况是在&#xff0c;C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState\rootfs目录中。 上面注意需要勾选显示隐藏文件复选框。 默认情况下&#xff0c;Ubuntu 安装到 WSL 子系统中的根目录中。这…

腾讯云幻兽帕鲁专有服务器配置价格表,4核16G、8核32G

幻兽帕鲁服务器配置CPU内存多大合适&#xff1f;如何选择&#xff1f;最低4核8G起步&#xff0c;4核16G是官方推荐配置&#xff0c;最好是4核32G配置。阿腾云atengyun.com分享幻兽帕鲁Palworld服务器CPU内存配置及租用费用&#xff0c;如下图&#xff0c;Palworld官方推荐服务器…

特征点匹配 harris

算法的核心是利用局部窗口在图像上进行移动&#xff0c;判断灰度是否发生较大的变化。如果窗口内的灰度值&#xff08;在梯度图上&#xff09;都有较大的变化&#xff0c;那么这个窗口所在区域就存在角点。 这样就可以将 Harris 角点检测算法分为以下三步&#xff1a; 当窗口…

【Java面试】Mysql

目录 sql的执行顺序索引的优点和缺点怎么避免索引失效(也属于sql优化的一种)一条sql查询非常慢&#xff0c;我们怎么去排查和优化&#xff1f;存储引擎 MylSAM和InnoDB、Memory的区别事务的四大特性(ACID)脏读、不可重复读、幻读事务的隔离级别&#xff1f;怎么优化数据库SQL优…

第十六章 : Spring Cloud集成 Spring Boot Admin的监控告警

第十六章 : Spring Cloud集成 Spring Boot Admin的监控告警 本章知识点:本章将系统全面地介绍Spring Boot Admin组件与Nacos组件集成,重点介绍Admin监控背景、应用场景案例以及监控服务内容;监控服务内容包括服务信息、健康状态、元数据、进程、线程、垃圾回收情况、堆内存…

云计算中的弹性是什么?

云弹性是指当客户需求增加或减少时&#xff0c;自动从数据中心配置和取消配置资源。这使得云资源(包括计算、存储和内存资源)能够根据需求变化快速重新分配。CPU/处理、内存、输入/输出带宽和存储容量等计算资源可以根据需要增加或减少&#xff0c;而不会影响系统性能。 它旨在…

算法学习系列(二十九):裴蜀定理、扩展欧几里得算法

目录 引言一、裴蜀定理二、扩展欧几里得算法模板三、公式推导四、例题1.扩展欧几里得算法模板题2.线性同余方程 引言 这个扩展欧几里得算法用的还是比较多的&#xff0c;而且也很实用&#xff0c;话不多说直接开始吧。 一、裴蜀定理 裴蜀定理&#xff1a;对于任意正整数 a 和…

Android保存图片到系统图库并通知系统相册刷新

1.场景 在android开发中保存应用的图片并插入到系统图库同时通知相册刷新的功能&#xff0c;做完后发现在部分手机上出现虽然图片保存成功了&#xff0c;但是相册却找不到图片的问题&#xff0c;查找文件夹图片也已经存在&#xff0c;可就是在相册里刷新不出来。 2.思路 2.1.…

应急消防应用步入“繁花”时代,卓翼智能消防无人机顺势而行大有可为

近日&#xff0c;北京卓翼智能科技有限公司&#xff08;以下简称“卓翼智能”&#xff09;宣布完成超亿元B轮融资&#xff0c;融资金额高达2.5亿元。这个“智能无人系统”黑马品牌&#xff0c;凭什么出圈&#xff1f;重点发力在哪些领域呢&#xff1f;今天&#xff0c;带你走进…

2726. 使用方法链的计算器

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 设计一个类 Calculator 。该类应提供加法、减法、乘法、除法和乘方等数学运算功能。同时&am…

设计模式-生成器设计模式

什么是生成器设计模式 众所周知我们设计代码的时候要将代码设计出模块化的&#xff0c;一个功能是一个模块&#xff0c;那么生成器设计模式&#xff0c;是将一个类再度进行了一个拆分&#xff0c;让一个类的内部进行了单一职责化&#xff0c;其实我们在平时开发的时候就会不经…

分布式id-Leaf算法

一、介绍 由美团开发&#xff0c;开源项目链接&#xff1a;https://github.com/Meituan-Dianping/Leaf Leaf同时支持号段模式和snowflake算法模式&#xff0c;可以切换使用。ID号码是趋势递增的8byte的64位数字&#xff0c;满足上述数据库存储的主键要求。 Leaf的snowflake模…