title: Spring MVC快速入门
tags: Spring MVC
categories: Spring MVC
若图片无法显示,请前往我的博客查看,相应文章链接:http://codingxiaxw.cn/2016/11/13/42-springmvc%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/
1.Spring MVC框架
1.1Spring MVC介绍
SpringMVC和Struts2都属于表现层的框架,它是Spring框架的一个模块,提供web层解决方案,我们可以从Spring的整体结构中看得出来:
[图片上传失败...(image-4b2c9b-1526380649832)]
1.2MVC在b/s系统的应用
mvc是一个设计模式,在b/s系统的应用如图:[图片上传失败...(image-fc69ef-1526380649832)]
解释如下:
- 1.用户发起request请求至控制器(Controller),控制接收用户请求的数据,委托给模型进行处理。
- 2.控制器通过模型(Model)处理数据并得到处理结果,模型通常是指业务逻辑(jsp、dao、service)。
- 3.模型处理结果返回给控制器。
- 4.控制器将模型数据在视图(View)中展示,web中模型无法将数据直接在视图上显示,需要通过控制器完成。如果在C/S应用中模型是可以将数据在视图中展示的。
- 5.控制器将视图response响应给用户,通过视图展示给用户要的数据或处理结果。
1.3Spring mvc架构
1.3.1架构图
[图片上传失败...(image-33dfb8-1526380649832)]
1.3.2架构流程
- 1.用户发送请求至前端控制器DispatcherServlet
- 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。
- 3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
- 4.DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
- 5.执行处理器(Controller,也叫后端控制器)。
- 6.Controller执行完成返回ModelAndView
- 7.HandlerAdapter将controller执行结果ModelAndView返回
- 8.DispatcherServlet
DispatcherServlet将ModelAndView传给ViewReslover视图解析器 - 9.ViewReslover解析后返回具体View
- 10.DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
- 11.DispatcherServlet响应用户
1.3.3架构中涉及的组件说明
- 1.DispatcherServlet:前端控制器。用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。由框架实现
- 2.HandlerMapping:处理器映射器。HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。由框架实现
- 3.Handler:处理器。Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
- 4.HandlAdapter:处理器适配器。通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。由框架实现。
- 5.ViewResolver:视图解析器。ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
2.入门程序
2.1需求
实现商品列表的查询并在页面中显示。这里由于Spring mvc不涉及对数据库的操作,所以我们在程序中的数据就用静态数据生成。
工程结构为下:[图片上传失败...(image-55a094-1526380649832)]
2.2需要的jar包
这里我使用的是spring3.x(带spring webmvc的模块)。[图片上传失败...(image-a30262-1526380649832)]
2.3第一步:前端控制器的配置
在WEB-INF/web.xml
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
springmvc.xml
springmvc
*.action
2.4第二步:Spring MVC配置文件
在web目录下创建Spring MVC的配置文件springmvc.xml,以后需要在里面配置Spring MVC架构三大组件(处理器映射器、适配器、视图解析器),里面根标签的内容同Spring的配置文件:
2.5第三步:配置处理器映射器
因为对于用户发起的request请求,前端控制器首先会请求HandlerMapping处理器映射器来查找Handler,所以我们首先配置它,在springmvc.xml中加入如下内容:
BeanNameUrlHandlerMapping
:表示将定义的Bean名字作为请求的url,需要将编写的controller在spring容器中进行配置,且指定bean的name为请求的url,且必须以.action结尾。
2.6第四步:配置处理器适配器
处理器映射器将查找到的Handler返回给DispatcherServlet后,DispatcherServlet会调用适配器执行Handler,通过适配器去扩展对不同Handler的执行。所以我们再配置它,在springmvc.xml中国年添加如下内容:
SimpleControllerHandlerAdapter
:即简单控制器处理适配器,所有实现了org.springframework.web.servlet.mvc.Controller
接口的Bean作为Springmvc的后端控制器。
2.7第五步:后端控制器的编写
DispatcherServlet通过处理器适配器找到后端控制器Handler,所以我们需要进行Handler的编写,在src包下新建ItemController.java,内容如下:
package controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import po.Items;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Created by codingBoy on 16/11/13.
*/
public class ItemController1 implements Controller
{
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws Exception {
//使用静态的数据将商品信息显示在jsp页面
List itemsList = new ArrayList<>();
Items items_1 = new Items();
items_1.setName("联想笔记本");
items_1.setPrice(6000f);
items_1.setCreatetime(new Date());
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone6苹果手机!");
itemsList.add(items_1);
itemsList.add(items_2);
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("itemsList",itemsList);
modelAndView.setViewName("/WEB-INF/jsp/itemsList.jsp");//指定用户访问的jsp页面地址
return modelAndView;
}
}
数据我们采用静态数据的输入,当然我们还需要创建Items.java这个pojo对象,就是上一篇文章中我们用到的.java文件。
2.8第六步:后端控制器的配置
在springmvc.xml中配置Handler由spring来管理Handler,在springmvc.xml文件中添加如下内容:
name="/itemsList.action"
:前边配置的处理器映射器为BeanNameUrlHandlerMapping
,如果请求的URL为“上下文/itemsList.action”将会成功映射到ItemController1控制器。
2.9配置视图解析器
Handler执行完成后给处理器适配器返回一个ModelAndView对象,它是Spring MVC的一个对象,用于对Model和View进行封装。然后处理器适配器又将这个对象返回给DispatcherServlet,DispatcherServlet调用视图解析器进行视图解析,所以这里我们要配置视图解析器,在springmvc.xml中添加如下内容:
然后部署服务器,在浏览器中输入http://localhost:8080/SpringMvc/itemList.action
后便可以看到如下页面:[图片上传失败...(image-226e41-1526380649832)]
通过上面的讲解我们便完成了对Spring MVC开发框架的入门,更多的处理器映射器和处理器适配器的介绍见我的spring mvc第二篇文章Spring MVC之注解与非注解映射器和适配器。
扩展:对于前端控制器DispatcherServlet,我有必要多说几句,在spring-webmvc.jar包中有一个DispatcherServlet.properties文件,内容如下:
[图片上传失败...(image-f1e742-1526380649832)]
里面包含一些默认的组件例如处理器映射器、处理器适配器等,当程序启动时,DispatcherServlet会自动加载DispatcherServlet.properties配置文件,从而默认加载各个组件,所以如果我们在springmvc.xml中配置了处理器映射器和处理器适配器,那程序就以springmvc.xml中的配置信息为主。
2018.3.19更
欢迎加入我的Java交流1群:659957958。群里目前已有1800人,每天都非常活跃,但为了筛选掉那些不怀好意的朋友进来搞破坏,所以目前入群方式已改成了付费方式,你只需要支付9块钱,即可获取到群文件中的所有干货以及群里面各位前辈们的疑惑解答;为了鼓励良好风气的发展,让每个新人提出的问题都得到解决,所以我将得到的入群收费收入都以红包的形式发放到那些主动给新手们解决疑惑的朋友手中。在这里,我们除了谈技术,还谈生活、谈理想;在这里,我们为你的学习方向指明方向,为你以后的求职道路提供指路明灯;在这里,我们把所有好用的干货都与你分享。还在等什么,快加入我们吧!
2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626 。群2作为群1的附属群,除了日常的技术交流、资料分享、学习方向指明外,还会在每年互联网的秋春招时节在群内发布大量的互联网内推方式,话不多说,快上车吧!
3.联系
If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.
Blog@codingXiaxw's blog
Weibo@codingXiaxw
Zhihu@codingXiaxw
Github@codingXiaxw