Spring全家桶之springMVC(一)
Spring MVC简介和第一个spring MVC程序
Spring MVC是目前企业中使用较多的一个MVC框架,被很多业内人士认为是一个教科书级别的MVC表现层框架,Spring MVC是大名鼎鼎的Spring框架在3.0版本之后的新增的一个模块,可以与Spring无缝集成,在使用起来比较方便。除此之外,Spring MVC还具备极强的可配置性,提供了强大的数据验证功能,支持RESTful风格等等一系列的特性,因此掌握Spring MVC框架的知识已经成为各大软件开发公司对应聘者的一个硬性要求。
Spring MVC简介
Spring MVC有些地方也叫作Spring Web MVC,看名字就能知道这是一个表现层框架。在没有学习Spring MVC或者struts之类的框架的时候,一般会使用JavaEE中的servlet来接收和处理前台发送的请求,这种方式使用起来有一些不方便的地方,比如做一个增删改查,我们需要在servlet中编写判断逻辑来处理相应的增删改查的请求,这样代码显得冗余,而且不同的开发者可能会有不同的写法,在实际开发中当一个项目大到一定程度之后,需要将一些重复冗余的代码抽象出来,此时你就会发现,这些代码其实就是java常用的那些框架的原型。这些框架抽象了一些冗余代码,还提供了一些好用的类和方法,因此在实际开发中,通常会使用框架,而掌握这些框架技术也成为企业招聘的一些硬性要求了。
Spring MVC是大名鼎鼎的Spring框架的一部分,是Spring3.0版本之后发布的,它可以与Spring框架无缝集成,这也是Spring MVC越来越受开发者喜爱的原因之一,除此以外,它还提供了很多类和方法,我们在实际开发中直接拿来使用就行,下面来通过示例看看Spring MVC如何使用。
第一个Spring MVC程序
编写之前,请核对一下spring版本对应的jdk版本,如果使用Spring版本5.04,需要jdk8+的版本,即你的jdk版本在8以上。
第一步:
创建一个项目,这里我们来创建一个maven的项目,通过maven来帮我们管理相关的jar文件,当然你也可以创建一个web项目,不过这样的话,就需要你手动的去下载Spring MVC相关的jar包了。
第二步:
导入相关Jar包,这里使用maven来帮我们管理,下面是pom.xml文件中的内容,目前只是写了一个非常简单的Spring MVC,所以只使用maven导入了spring-webmvc相关的包即可:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>springMVC</groupId>
<artifactId>springMVC</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>01-firstSpringmvc</module>
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.4.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>01-first</finalName>
<plugins>
<!-- 编译插件,指定编译用的的jdk版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- jdk的版本号 -->
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
spring MVC的核心jar包就是spring-webmvc。以后见到spring-webmvc时需要知道它是springmvc的核心包,需要我们牢记。另外使用maven项目可以自动导入其他相关的依赖jar包。
第三步:
注册Spring MVC的中央控制器DispatcherServlet,打开web.xml文件,在里面加入下面内容(web.xml文件要改为3.1版本):
<!-- 注册spring MVC中央控制器 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<!-- spring MVC中的核心控制器 -->
<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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
第四步:
maven项目中有个src/main/resources目录,在该目录下创建Spring MVC配置文件springmvc.xml,该xml配置文件可以任意命名,需要跟第三步中的init-param中的param-value保持一致即可,springmvc会根据web.xml文件中的路径去读取spring.xml配置文件,所以路径要保持一致。
<?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:p="http://www.springframework.org/schema/p"
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"> </beans>
第五步:
创建一个类去实现org.springframework.web.servlet.mvc.Controller接口,通常我们称这样的类为Controller,它的作用有些类似之前学习的servlet,或者可以认为在Spring MVC里面,就是使用了Controller来代替了servlet,它提供了比servlet更加丰富的功能。
第六步:
在springmvc.xml配置文件中注册第五步创建的Controller,添加下面内容:
<bean id="/hello.do" class="controller.HelloSpringMVC" />
第七步:
在WEB-INF目录中创建一个目录jsp,在这个jsp目录下创建一个first.jsp的文件。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
${hello}
</body>
</html>
第八步:
启动tomcat,然后在浏览器地址栏中输入:http://localhost:8080/01-first/hello.do
如果你看到网页中显示hello first spring mvc,那就说明第一个Spring MVC程序编写成功啦。
第一个Spring MVC程序分析
上面通过编写Controller和配置一些xml文件就实现了一个Spring MVC的程序,下面来分析下这些内容都表示什么意思。
在第三步中,我们在web.xml中注册了一个中央控制器DispatcherServlet,这个其实就是相当于注册了一个servlet,关于该servlet,我们添加了如下配置:
- load-on-startup:设置为1,表示该servlet的创建优先级高,并且在web服务器(tomcat)启动的时候就创建其对象,并且调用其init方法,这样就可以保证Spring MVC的正常工作了。
- init-param:因为Spring MVC的配置文件可以任意命名,所以该内容主要告诉Spring MVC我们编写的配置文件的路径和名称,这样在中央控制器中就可以获取该配置文件中的信息了。通过源码可以看到DispatcherServlet继承了FrameworkServlet,在这个类中有个setContextConfigLocation方法,所以在param-name中将其命名为contextConfigLocation。
- url-pattern:这里配置的是*.do,即所有以.do结尾的请求都会匹配到Spring MVC的核心控制器DispatcherServlet中。当然,你可以配置为/,只不过这样写的话会有问题,后面再细说。
在第四步和第六步中我们创建和配置了springmvc.xml的文件,这个文件的命名是随意,所以需要在web.xml中的init-param标签进行配置。我们通过bean标签来注册一个Controller,即当请求的url是hello.do结尾的时候,中央控制器DispatcherServlet就会将请求分发到我们编写的HelloSpringMVC中。
在第五步中,我们编写了一个Controller,里面我们使用了ModelAndView类,分别调用了两个方法:
mv.addObject("hello", "hello first spring mvc");
表示我们向ModelAndView这个对象中添加一条数据,名字是hello,内容是hello first spring mvc,这个跟之前学习的map有些类似,实际上,addObject方法的底层就是一个map。在ModelAndView对象里面添加的数据,可以从jsp中获取,上面是直接使用EL表达式获取的数据。
mv.setViewName("/WEB-INF/jsp/first.jsp");
括号中的内容是要跳转的jsp的路径和文件名。
配置视图解析器
在controller中我们在ModelAndView中的setViewName方法里面传入要跳转的jsp的路径和名字,如果有多个controller的话,需要在每个里面都编写路径和jsp的名字,这样的话比较繁琐,这时可以通过使用Spring MVC给我们提供的一个视图解析器来解决这个问题。
打开springmvc.xml的配置文件,在里面添加一个视图解析器:
<!-- 视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
其中prefix表示前缀,即你的jsp所在的路径。
suffix表示后缀,即文件的后缀名。
之后来修改一下HelloSpringMVC中的内容,将之前的:
mv.setViewName("/WEB-INF/jsp/first.jsp");
在springmvc.xml文件中已经配置了文件路径和后缀名了,所以修改为:
mv.setViewName("first");
这样以后就不用再setViewName方法中写路径了,并且也方便日后的维护。
第一个Spring MVC执行流程
我们编写了第一个Spring MVC的程序,这里来看下它的执行流程是什么样子的,这里只是简单的从表面上看下执行流程,实际上在Spring MVC内部还有很多流程,在后面的时候,我们再详细介绍。
1.由浏览器发送请求localhost:8080/01-first/hello.do,该请求到达web服务器(tomcat)后,会在web.xml文件中查找与之匹配的servlet,我们在web.xml文件中设置的所有以.do结尾的请求都会匹配到Spring MVC的核心控制器DispatcherServlet上。
2.DispatcherServlet会去我们开发者编写的springmvc.xml配置文件中查找与hello.do请求匹配的Controller,这里配置的是com.monkey1024.controller.HelloSpringMVC。
3.DispatcherServlet会将请求转到HelloSpringMVC类上,并调用该类中的handleRequest方法来处理这个请求。
4.在handleRequest方法中执行完成后会将ModelAndView对象返回给DispatcherServlet,然后DispatcherServlet将jsp响应给浏览器,流程结束。
上面的流程只是表面的一个执行流程,实际在Spring MVC内容还有更复杂的流程,这部分流程我们在后面再详细介绍,通过这个简单的执行流程,我们可以看到大体上Spring MVC的工作方式,它的底层实际上就是一个servlet,主要依赖于其核心的中央控制器DispatcherServlet,请求和响应等一系列的工作都是由这个servlet来完成的,基于这样的原因,我们才会称DispatcherServlet为Spring MVC的中央控制器了。
Spring全家桶之springMVC(一)的更多相关文章
- Spring全家桶之springMVC(四)
路径变量PathVariable PathVariable Controller除了可以接收表单提交的数据之外,还可以获取url中携带的变量,即路径变量,此时需要使用@PathVariable ...
- Spring全家桶之SpringMVC(三)
Spring MVC单个接收表单提交的数据 单个接收表单提交的参数 在实际开发中通过会在spring MVC的Controller里面接收表单提交过来的参数,这块代码该怎么去编写呢? 示例: 编写 ...
- Spring全家桶之springMVC(二)
spring mvc中url-pattern的写法 1.设置url-pattern为*.do 之前我们在web.xml文件中配置DispatcherServlet的时候,将url-pattern配置为 ...
- 10分钟详解Spring全家桶7大知识点
Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflow等解决方案.有人亲切的称之为 ...
- Spring全家桶–SpringBoot Rest API
Spring Boot通过提供开箱即用的默认依赖或者转换来补充Spring REST支持.在Spring Boot中编写RESTful服务与SpringMVC没有什么不同.总而言之,基于Spring ...
- 一文解读Spring全家桶 (转)
Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflow等解决方案.有人亲切的称之为 ...
- 【转】Spring全家桶
Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶.它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflo ...
- Spring全家桶系列–SpringBoot之AOP详解
//本文作者:cuifuan //本文将收录到菜单栏:<Spring全家桶>专栏中 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关 ...
- Spring全家桶系列–SpringBoot渐入佳境
//本文作者:cuifuan //本文将收录到菜单栏:<Spring全家桶>专栏中 首发地址:https://www.javazhiyin.com/20913.html 萌新:小哥,我在实 ...
随机推荐
- 一行配置美化 nginx 目录 autoindex.html
demo
- 基于tcp协议的套接字通信:远程执行命令
要解决粘包问题: TCP:流式协议 特点: 1.数据流没有开头也没有结果,像水流一样 2.TCP协议有一个nagle算法, nagle算法会将数据量较小,并且时间间隔较短的数据合成一条数据发送, 这么 ...
- C#多线程(12):线程池
目录 线程池 ThreadPool 常用属性和方法 线程池说明和示例 线程池线程数 线程池线程数说明 不支持的线程池异步委托 任务取消功能 计时器 线程池 线程池全称为托管线程池,线程池受 .NET ...
- Spark RDD----pyspark第四次作业
1.pyspark交互式编程 查看群里发的“data01.txt”数据集,该数据集包含了某大学计算机系的成绩,数据格式如下所示: Tom,DataBase,80 Tom,Algorithm,50 To ...
- 算法笔记刷题4(PAT B1009)
这一题本来不应该有什么问题的,我很快写出来了,在dev c++里面运行也正常.但是放到pat以后出现了问题.更换了c/c++都不行通过编译. #include <cstdio> #incl ...
- 支持向量机SVM知识梳理和在sklearn库中的应用
SVM发展史 线性SVM=线性分类器+最大间隔 间隔(margin):边界的活动范围.The margin of a linear classifier is defined as the width ...
- 米特运输——(dfs)
米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储 存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城市由N- ...
- 几年前的今天,Google发了这几篇“大”新闻
免责声明: 因阅读本文所导致的任何时间或经济上的损失,皆由您自行承担,本小编概不负责. 估计今天我的朋友圈会被"震惊!"刷屏,来看看 Google 做过哪些令人"震惊&q ...
- VMware虚拟机中centos6.5网络配置(桥接方式)与宿主机之间通信
1.修改网络适配器 2.选择桥接所用的网卡 3.设置网络 3.1在系统终端中输入 setup ,进行图形网络配置(此命令只有redhat系列才有作用) 上下左右键选择,enter键确定 将光标移动到U ...
- Web全栈AngularJS
百度云盘下载 AngularJS是人类首个大规模使用的MVC框架,能够帮助程序员将绝大部分精力集中在核心业务逻辑上,从而大幅提高开发效率. 阶段2:Controller Controller是Angu ...