1、SpringMVC架构
1、SpringMVC架构
1.1 Spring web mvc 介绍
spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:
这里写图片描述
1.2 Web MVC
mvc设计模式在b/s系统下应用:
这里写图片描述
1、 用户发起request请求至控制器(Controller)
控制接收用户请求的数据,委托给模型进行处理
2、 控制器通过模型(Model)处理数据并得到处理结果
模型通常是指业务逻辑
3、 模型处理结果返回给控制器
4、 控制器将模型数据在视图(View)中展示
web中模型无法将数据直接在视图上显示,需要通过控制器完成。如果在C/S应用中模型是可以将数据在视图中展示的。
5、 控制器将视图response响应给用户
通过视图展示给用户要的数据或处理结果。
1.3 Spring web mvc 架构
这里写图片描述
架构流程 :
1、 用户发送请求至前端控制器DispatcherServlet
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5、 执行处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、 ViewReslover解析后返回具体View
10、 DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户
组件说明:
以下组件通常使用框架提供实现:
DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
Handler:处理器
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
View Resolver:视图解析器
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
2、SpringMVC入门
2.1 需求
实现商品查询列表功能。
2.2 新建web工程
新建动态web工程,在设置时可将 Default output folder 设置为 WebRoot\WEB-INF\classes ,Content directory 设置为WebRoot , 可与myeclipse兼容
Java环境:jdk1.7.0_72
导入spring3.2.0和必要的jar包:
这里写图片描述
2.3 前端控制器配置
在WEB-INF\web.xml中配置前端控制器:
<!-- springmvc前端控制器 -->
<!-- 实际就是springmvc包提供的一个servlet类 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextConfigLocation配置springmvc加载的配置文件(用来配置处理器映射器、适配器等)
如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml)
-->
<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>springmvc</servlet-name>
<!--
第一种:*.action,访问以.action 结尾时由此servlet进行解析
第二种:/,所有访问的地址都由此servlet进行解析,如果是静态文件(jpg,js,css)需要配置不让DispatcherServlet进行解析,使用此种方法可以实现RESTful风格的url
第三种:/*,此设置方法错误,因为请求到Action,当action转到jsp时再次被拦截,提示不能根据jsp路径mapping成功
-->
<url-pattern>*.action<www.22yigouyule.cn/ /url-pattern>
</servlet-mapping>
2.4 配置处理器适配器
在classpath下的springmvc.xml文件配置如下:
<beans xmlns="http://www.senta77.com/
xmlns:xsi="http://www.yiqianou.cn/ XMLSchema-instance"
xmlns:context="hhttp://027yeshenghuowang.com/ /schema/context"
xmlns:aop="http://www.xuancayule.com /schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.yyizx.cn/ /schema/beans
http://http://www.aboguanwang.com/ /beans/spring-beans-3.2.xsd
http://www.dinghuiyuLe55.cn /schema/mvc
http://www.anli2088.cn /schema/mvc/spring-mvc-3.2.xsd
http://www.lafeiyl.cn /schema/context
http://www.xuancai88c.cn /schema/context/spring-context-3.2.xsd
http://www.aboyule.org /schema/aop
http://www.mingchengyLe11.cn /schema/aop/spring-aop-3.2.xsd
http://www.feilcheng88.cn /schema/tx
http://www.120xh.cn /schema/tx/spring-tx-3.2.xsd ">
<!-- 处理器适配器 -->
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SimpleControllerHandlerAdapter:即简单控制器处理适配器,使用实现了org.springframework.web.servlet.mvc.Controller 接口的Handler作为
Springmvc的后端控制器。
2.5 Handler开发
需要实现 controller接口,才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter适配器执行。
ModelAndView:包含了模型数据及逻辑视图名
public class ItemsController1 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
//调用service查找数据库,查询商品列表,这里使用静态数据模拟
List<Items> itemsList=new ArrayList<Items>();
Items items_1 = new Items();
items_1.setName("联想笔记本");
items_1.setPrice(6000f);
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 modelAndView=new ModelAndView();
//相当于request的setAttribut,在jsp页面中通过itemsList取数据
modelAndView.addObject("itemsList",itemsList);
//指定视图
modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
return modelAndView;
最新文章
- 分布式一致性算法--Raft
- 定时器setInterval 开始、暂停、继续!
- JDK7学习笔记之基础类型
- nodejs入门
- ubuntu查看内存占用和查看cpu使用情况的简单方法(ubuntu内存管理)
- UML建模
- sql server的两个类型转换函数
- Linux下Apache PHP Mysql默认安装路径
- debian root 可以远程登陆
- BZOJ4870: [Shoi2017]组合数问题
- iOS中 static变量与全局、局部变量的区别 !
- Java 保留两位小数填坑
- Eclipse 00: 安装教程 + 汉化 + 简单创建java项目
- Docker 介绍及安装
- 洗礼灵魂,修炼python(32)--面向对象编程(2)—进一步认识类
- BootstrapTable使用实例
- 【做题】arc070_f-HonestOrUnkind——交互+巧妙思维
- 【CTF REVERSE】WHCTF2017-CRACKME
- 404 Note Found 队-Alpha9
- MYSQL表中向SET类型的字段插入值时值之间不能有空格
热门文章
- Struts2 - 运行流程分析
- freeMarker(一)——freeMarker简介
- Gym - 101196G :That&#39;s One Hanoi-ed Teacher (递推)
- CodeForces - 605C 凸包+直线与凸包判交
- OI省选算法汇总( 转发黄学长博客 )
- python中文件打开的各个标识含义
- Wireshark抓包常见问题解析
- RS485波特率问题
- 启动新内核出现:No filesystem could mount root, tried: ext3 ext2 cramfs vfa
- 实现oracle分页---3种方法--