SpringMVC简易教程(01):SpringMVC基础
教程汇总请查看这里:https://www.cnblogs.com/uncleyong/p/17984060
当前主流框架
SSM:SpringMVC + Spring + MyBatis
SSSP:SpringMVC + Spring + SpringData JPA
关于MVC模型
MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建 Web 应用程序表现层的模式。
Model(模型):通常指的就是我们的数据模型,用于封装数据。
View(视图):通常指的就是我们的html之类的,作用是展示数据。
Controller(控制器):是应用程序中处理用户交互的部分。作用是处理程序逻辑。
SpringMVC简介
SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow里面。SpringMVC 已经成为目前最主流的 MVC 框架之一,它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful 编程风格的请求。
SpringMVC的优势(整理自网络):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 1、清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)等 2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。 3、由于命令对象就是一个 POJO,无需继承框架特定 API,可以使用命令对象直接作为业务对象。 4、和 Spring 其他框架无缝集成,是其它 Web 框架所不具备的。 5、可适配,通过 HandlerAdapter 可以支持任意的类作为处理器。 6、可定制性,HandlerMapping、ViewResolver 等能够非常简单的定制。 7、功能强大的数据验证、格式化、绑定机制。 8、利用 Spring 提供的 Mock 对象能够非常简单的进行 Web 层单元测试。 9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。 10、强大的 JSP 标签库,使 JSP 编写更容易。 .........等等。 |
第一个SpringMVC示例
创建maven项目
选择webapp
输入项目信息
配置mvn
点击“Finish”
结构
上面有些目录没有,比如java、resources等,需要我们手工创建,创建后如下图:
添加pom依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <properties> <spring.version>4.3.14.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> |
配置核心控制器
web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!--配置SpringMVC的核心控制器--> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet- class >org.springframework.web.servlet.DispatcherServlet</servlet- class > <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 配置 servlet 的对象的创建时间点 --> <load- on -startup>1</load- on -startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> |
创建spring mvc的配置文件
创建控制层:com.qzcsbj.controller
resources目录下创建springmvc.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?xml version= "1.0" encoding= "UTF-8" ?> <beans xmlns= "http://www.springframework.org/schema/beans" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:context= "http://www.springframework.org/schema/context" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" > <!--扫描控制层的包--> <context:component-scan base -package= "com.qzcsbj.controller" /> <!--视图解析器--> <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" > <!--配置视图的前缀--> <property name= "prefix" value= "/WEB-INF/jsp/" /> <!--配置视图的后缀--> <property name= "suffix" value= ".jsp" /> </bean> </beans> |
编写控制器并使用注解配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package com.qzcsbj.controller; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class Hello { @RequestMapping( "/hello" ) // 如果只有一个值,value可以省略 // @RequestMapping(value = "/hello") public String hello() { System. out .println( "hello springmvc" ); return "success" ; } } |
测试SpringMVC
可以使用tomcat插件,参考:https://www.cnblogs.com/uncleyong/p/17063781.html
也可以使用本地tomcat,这里使用本地tomcat,本地安装tomcat,参考:https://www.cnblogs.com/uncleyong/p/10742650.html
点击“Edit Configurations...”
点击+
选择更多
选择Local
输入名称(随意输入)
点击Configure
选择tomcat的路径
选择“Deployment”,选择“Artifact...”
选择第二个
下面表示通过根路径进行访问
默认浏览器是谷歌;选择更新
部署
会自动打开:localhost:8080
内容是index.jsp的内容,其实访问的是:localhost:8080/index.jsp,省略了index.jsp
访问:http://localhost:8080/hello
执行过程
1、服务器启动,应用被加载。读取到 web.xml 中的配置创建 spring 容器并且初始化容器中的对象。
2、浏览器发送请求,被DispatherServlet 捕获,该 Servlet 并不处理请求,而是把请求转发出去。转发的路径是根据请求 URL,匹配@RequestMapping 中的内容。
3、匹配到了后,执行对应方法。该方法有一个返回值。
4、根据方法的返回值,借助 InternalResourceViewResolver 找到对应的结果视图。(跳转到了success.jsp,但是浏览器的url中路径没有变,表示是服务器内部跳转)
5、渲染结果视图,响应浏览器。
原文会持续更新,原文地址:https://www.cnblogs.com/uncleyong/p/17041435.html
__EOF__

关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-01-10 正确理解jmeter自带线程组之Ramp-Up(什么情况下可以获取到水平阶梯?)