您的位置:首页 > 编程语言 > Java开发

SSM框架--springMVC浅析《一》之开发流程及组件介绍

2017-11-27 18:19 417 查看
一、概述

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web
应用程序的全功能 MVC 模块。

使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,

如Struts1,Struts2等。Spring
MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。

spring
web MVC 和struts2都是表现层框架,

·springMVC是spring的一部分,所以我们可以从spring的整体结构中看出。



二、springmvc简易处理流程



三、springMVC开发步骤

1、创建web项目

2、导入开发jar包

3、在构建路径顶端创建springmvc.xml配置文件

<!-- 配置controller扫描包,多个包之间可以用“,”隔开 -->
<context:component-scan base-package="com.springmvc.controller"></context:component-scan>


4、配置前端控制器(DispatcherServlet)

<!-- 配置前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springmvc配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>


注:加载springmvc配置文件时,默认路径为为:/WEB-INF/[servlet的名字]-servlet.xml

拦截规则:/* :拦截所有,包括(.jsp .js .png .css等) 不建议使用

*.action :拦截以action结尾的动作 肯定能用到

/ :拦截所有,但是不包括.jsp,包括(.js .png .css等) 建议使用

此处要和struts2的拦截规则区分

5、controller层

@Controller
public class ItemsController {

@RequestMapping(value="/items/itemsList.action")
public ModelAndView getItemsList(){
List<Items> itemList = new ArrayList<Items>();
itemList.add(new Items(1, "oppo", 2399F, new Date(), "质量好!1"));
itemList.add(new Items(2, "apple", 2399F, new Date(), "质量好!2"));
itemList.add(new Items(3, "honor", 2399F, new Date(), "质量好!3"));
itemList.add(new Items(4, "meizu", 2399F, new Date(), "质量好!4"));
itemList.add(new Items(5, "xiaomi", 2399F, new Date(), "质量好!5"));
itemList.add(new Items(6, "vivo", 2399F, new Date(), "质量好!6"));
ModelAndView mav = new ModelAndView();
mav.addObject("itemList", itemList);
mav.setViewName("/items/itemList");
return mav;
}
}


注:@Contorller注解是有springMVC配置文件中注解扫描解析

@RequestrianMapping(value="/items/itemsList.action")此注解的含义为访问items/itemsList.action动作时将触发此方法,
具体的后边说到springmvc具体执行流程时会细说。
ModelAndView是springmvc提供的一个对象,看源码可得

/** View instance or view name String */
private Object view;

/** Model Map */
private ModelMap model;


model:用来表示模型(封装数据)

view:指定数据显示的视图
6、部分jsp代码

<c:forEach items="${itemList }" var="item">
<tr>
<td>${item.name }</td>
<td>${item.price }</td>
<td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td>${item.detail }</td>
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
</tr>
</c:forEach>


四、springMVC架构

1、架构图



2、架构流程

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响应用户
3、组件说明
一个中心(DispatcherServlet)
三个基本点(HandlerMapping、HandlerAdapter、ViewReslover)
Handler(处理器)
View(视图)
DispatcherServlet:前端控制器
用户请求到达前端控制器,DispatcherServlet就相当于MVC中的C,它是整个流程控制的中心,
由它调用各个组件处理用户请求,很好的降耦合。
HandlerMapping:处理器映射器
负责根据用户请求的URL找到相应的handler(处理器),springmvc提供了不同的映射器实现不同的映射方法,
例如:配置文件,实现接口,注解
HandlerAdapter:处理器适配器

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
       Handler:处理器
后端控制器,对具体用户的请求进行处理
View:视图

springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。
4、组件详解
在【3、组件说明】中标红色的组件为框架提供不用我们编写,只需先配置后使用;标绿色的需要开发者编写
但是为什么我们只在web.xml中配置了前端控制器(DispatcherServlet),
而(HandlerMapping【处理器映射器】、HandlerAdapter【处理器适配器】、ViewResolver【视图解析器】)
三大组件我们没有配置,是因为我们使用的是默认的,而默认的组件就在DispatcherServlet.properties文件内容(标记的就是默认的三大组件)
但是springMVC提供的默认的HandlerMapping和HandlerAdapter已经被废弃了,源码如下(只看一个其他类似)

但是同时也给出了可用的org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
因此我们需要在springmvc.xml配置文件中手动配置可用的HandlerMapping和HandlerAdapter

<!-- 配置处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- 配置处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>


注:由于配置处理器映射器和处理器适配器比较麻烦,所以可以采取注解驱动的方式

springmvc可以根据注解驱动,自动加载requestMappingHandlerMapping和requestMappingHandlerAdapter

<mvc:annotation-driven/>


视图解析器没有被废弃,可以正常使用,我们还可以添加一些属性配置来简化我们的开发的

<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp"/>
<property name="suffix" value=".jsp"/>
</bean>


那么controller层的代码就要更改了

原始的:mav.setViewName("/WEB-INF/JSP/items/itemList.jsp");
修改后:mav.setViewName("/items/itemList");

===================================================================================

尽人事,听天命。我相信只有那些疯狂到自以为能改变世界的人才会真正改变世界。

坚持别人不能坚持的坚持,终将收获别人不能收获的收获。这就是我,一个纯粹想靠技术改变命运的人。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐