admin管理员组文章数量:1794759
Spring MVC学习(1)—MVC的介绍以及Spring MVC的入门案例
基于最新Spring 5.x,详细介绍了MVC架构以及Spring MVC入门案例的搭建。
此前,我们已经学习过了传统Servlet编程,现在我们来学习基于Servlet的更加上层的Spring MVC编程。
Spring Web MVC是构建在原始的Servlet API 上的Web 框架,并且从一开始就包含在 Spring Framework中,是Spring的核心组件。它正式名称"Spring Web MVC"是来自Spring的源码模块(spring-webmvc,github/spring-projects/spring-framework/tree/master/spring-webmvc)的名称,但它更通常被称简称为"Spring MVC"。
也就是说,Spring MVC框架本身就是基于Servlet规范的,但是它对原始的Servlet API进行了封装,屏蔽了底层原始的Servlet方法,提供了更加高级的开发模式和注解的支持,用于方便开发者快速开发基于Servlet API并部署到Servlet容器的Web应用程序。
下面我们学习Spring MVC,和Spring的学习时一样,我们从基于XML的配置入手,逐渐过渡到基于JavaCofig的配置,从而去除XML文件,在此后我们还会学习Spring Boot,那时候使用Spring MVC就更加简单了。
想要学会Spring MVC,我们必须先学会Spring IOC以及AOP的基本使用。Spring IOC和AOP的知识我们在此前就讲过了。
Spring MVC学习 系列文章Spring MVC学习(1)—MVC的介绍以及Spring MVC的入门案例
Spring MVC学习(2)—Spring MVC中容器的层次结构以及父子容器的概念
Spring MVC学习(3)—Spring MVC中的核心组件以及请求的执行流程
Spring MVC学习(4)—ViewSolvsolver视图解析器的详细介绍与使用案例
Spring MVC学习(5)—基于注解的Controller控制器的配置全解【一万字】
Spring MVC学习(6)—Spring数据类型转换机制全解【一万字】
Spring MVC学习(7)—Validation基于注解的声明式数据校验机制全解【一万字】
Spring MVC学习(8)—HandlerInterceptor处理器拦截器机制全解
Spring MVC学习(9)—项目统一异常处理机制详解与使用案例
Spring MVC学习(10)—文件上传配置、DispatcherServlet的路径配置、请求和响应内容编码
Spring MVC学习(11)—跨域的介绍以及使用CORS解决跨域问题
文章目录- Spring MVC学习 系列文章
- 1 MVC和三层架构
- 2 Spring MVC的入门案例
- 2.1 项目搭建
- 2.2 maven依赖
- 2.3 添加Spring MVC配置文件
- 2.4 编写view视图文件
- 2.5 配置DispatcherServlet
- 2.6 编写Controller控制器
- 2.7 启动测试
- 2.8 简单的执行流程
- 2.9 基于JavaConfig的配置
Spring MVC基于MVC设计模式。在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多,属于宏观的解决方案。而MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建 Web 应用程序表现层的模式:
总的来说,MVC模式与三层架构结合使用时的关系(采用SSM框架,未实现前后端分离):
如果是基于前后端分离的项目,所有请求都是返回JSON字符串给前端,那么由于项目不再需要JSP、freemarker等技术以及前端资源,不再需要响应HTML页面,因此对应的View视图层或许也可以不需要了,或者说View的工作由前端框架来实现了。
一个具体的例子,项目中的资源以及对应的位置:
我们基于maven和XML配置来构建最简单的Spring MVC入门案例!
2.1 项目搭建首先创建一个传统的maven Java Web项目:
创建成功之后结构如下:
接下来我们开始改造为Spring MVC项目!
在main目录下新增目录:
我们要添加的就是java目录和resources目录,在高版本Idea中有智能提示:
没有提示也没关系,手动创建这两个名字的目录,然后分别选中两个目录,右键单击,将java目录设置为Sources Root,表示这是一个源码目录,用于存放Java源码,将resources目录设置为Resources Root,表示这是一个资源目录,用于存放配置文件。
对于一个完整的Web项目,应该还要有测试目录!我们选中src目录,创建目录:
在src下面就可以创建测试代码目录和测试资源目录:
完整的项目结构如下:
2.2 maven依赖接下来我们添加依赖。
我们只需要添加一个spring-webmvc依赖,即可实现最简单的Spring MVC项目的测试,spring-webmvc依赖包含了spring-web依赖以及Spring框架的核心依赖,比如spring-core、spring-context等等。
同时,我们采用maven tomcat7插件的形式直接启动项目,方便快捷!
<properties> <mavenpiler.target>1.8</mavenpiler.target> <mavenpiler.source>1.8</mavenpiler.source> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring-framework.version>5.2.8.RELEASE</spring-framework.version> </properties> <dependencies> <!-- mvnrepository/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-framework.version}</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> </plugin> </plugins> </pluginManagement> <!--打包名--> <finalName>mvc</finalName> <plugins> <!-- tomcat插件控制 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <!--端口控制--> <port>8081</port> <!--项目路径控制意味着localhost:8081/mvc--> <path>/mvc</path> <!--tomcat的url编码 达到和修改server.xml文件一样的功能--> <uriEncoding>UTF-8</uriEncoding> </configuration> </plugin> <!-- maven插件控制 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${mavenpiler.source}</source> <target>${mavenpiler.target}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> </plugins> </build> 2.3 添加Spring MVC配置文件我们在resources目录下添加一个专门Spring MVC的配置文件! 可以叫dispatcher-servlet.xml或者spring-mvc-config.xml等等(名字自取),如果一个项目的组件非常多,那么通常一个组件都有一个单独的配置文件,Spring MVC也不例外!
如下文件,我们最简单的案例仅仅需要配置一个扫描注解的包路径,并且这是属于Spring支持的最基本配置,而不是Spring MVC特有的。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="www.springframework/schema/beans" xmlns:xsi="www.w3/2001/XMLSchema-instance" xmlns:context="www.springframework/schema/context" xsi:schemaLocation="www.springframework/schema/beans www.springframework/schema/beans/spring-beans.xsd www.springframework/schema/context www.springframework/schema/context/spring-context.xsd"> <!-- 配置要扫描注解的包路径 --> <context:component-scan base-package="com.spring.mvc.controller"/> </beans> 2.4 编写view视图文件我们在webapps下新建一个success.jsp文件,简单的内容如下:
<html> <body> <h2>Hello Spring MVC!</h2> </body> </html>最终配置如下:
2.5 配置DispatcherServletDispatcherServlet是一个特殊的Servlet,是Spring MVC中非常核心的一个前端控制器,用于处理、分发所有的请求!在web.xml中配置这一个Servlet就行了。
我们需要将spring-mvc-config.xml配置到contextConfigLocation参数中用于Servlet WebApplicationContext容器加载配置,后面我们会讲Spring MVC的容器关系!
设置load-on-startup为非负数,实际上不设置或者设置为负数也没关系,但是DispatcherServlet将会在请求到达的时候才会加载各种配置信,因此如果配置有什么异常的话将不能在项目启动时被及时发现!
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "java.sun/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!-- 配置spring mvc的前端核心控制器 --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <!-- 配置初始化参数,用于读取SpringMVC的配置文件并加载 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc-config.xml</param-value> </init-param> <!-- 配置Servlet的对象的创建时间点:取值如果为非负整数,表示应用加载时创建,值越小,servlet的优先级越高,就越先被加载,如果取值为负数,表示在第一次使用时才加载 --> <load-on-startup>1</load-on-startup> </servlet> <!--配置映射路径,/表示将会处理所有的请求,并且自动分发--> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> 2.6 编写Controller控制器编写第一个控制器类com.spring.mvc.controller.HelloController。sayHello方法表示来自/hello的请求将会访问success.jsp资源!
/** 1. 第一个控制器类 2. 3. @author lx */ @Controller public class HelloController { /** * 请求路径映射到某个方法 * /hello路径映射到sayHello()方法 */ @RequestMapping(path = "/hello") public String sayHello() { System.out.println("Hello SpringMVC"); //转发到success.jsp的视图 return "success.jsp"; } } 2.7 启动测试我们启动maven tomcat 插件进行测试,有两种方法。
一种是在右侧maven栏中,找到Plugins下的tomcat7插件,双击tomcat7:run即可启动项目!
第二种是配置maven启动项!
我们选择Edit Configurations并点击
选择+,选择maven:
找到我们的项目,并配置tomcat7:run参数,点击Apply之后即可正常点击右侧的按钮运行!
启动之后将自动输出日志信,可以看到我们项目的主路径,以及dispatcherServlet被初始化的信!
我们尝试访问localhost:8081/mvc/hello,成功获取到HTML视图信,第一例到此结束!
2.8 简单的执行流程我们简单的介绍Spring MVC的执行流程,注意这里的流程非常简单,我们后面会讲解详细的流程!
基于JavaConfig的配置则可以通过Spring 提供的WebApplicationInitializer抽象类来配置。使用该配置我们必须引入Servlet的依赖,同时配置中的AppConfig类作为一个主配置类,其内部通过JavaConfig的方式(比如@Bean方法)配置各种bean!
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletCxt) { /* * 创建一个Spring web应用容器,加载AppConfig配置类 */ AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext(); ac.register(AppConfig.class); ac.refresh(); /* * 创建并注册DispatcherServlet,关联上的容器 */ DispatcherServlet servlet = new DispatcherServlet(ac); //命名并注册 ServletRegistration.Dynamic registration = servletCxt.addServlet("dispatcherServlet", servlet); registration.setLoadOnStartup(1); registration.addMapping("/"); } } @ComponentScan("com.spring.mvc") @Configuration public class AppConfig { }如果采用基于JavaConfig的配置,那么web.xml中可以不提供任何配置,其他的xml配置文件也都应该改为JavaCOnfig的形式!
最终项目图如下:
启动项目即可测试成功!如果你仍然需要基于XML文件,那么你可以换一个WebApplicationContext的实现,比如:
public class MyXmlWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletCxt) { /* * 创建Spring web应用容器,加载AppConfig配置类 */ XmlWebApplicationContext ac = new XmlWebApplicationContext(); ac.setConfigLocation("classpath:spring-mvc-config.xml"); /* * 创建并注册DispatcherServlet */ DispatcherServlet servlet = new DispatcherServlet(ac); //命名并注册 ServletRegistration.Dynamic registration = servletCxt.addServlet("dispatcherServlet", servlet); registration.setLoadOnStartup(1); registration.addMapping("/"); } }另外,还可以使用继承AbstractAnnotationConfigDispatcherServletInitializer的方式进行配置更多的配置!
相关文章:
如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!
版权声明:本文标题:Spring MVC学习(1)—MVC的介绍以及Spring MVC的入门案例 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686619261a87012.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论