java中spring MVC模式_【Java】关于Spring MVC框架的总结

889345e43792fdae8aac6fac313318f3.png

视图

视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和像XHTML,XML/XSL,WML等一些标识语言和

MVC好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

模型

模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用像EJBs和ColdFusion Components这样的构件对象来处理数据库,被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

控制器

控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

Spring MVC

特点

(1)清晰地角色划分。Spring MVC在Model、View和Controller方面提供了一个非常清晰的角色划分。

(2)灵活的配置功能。因为Spring的核心是IoC,同样在实现MVC上,也可以把各种类当作Bean来通过XML进行配置。

(3)提供了大量的控制器接口和实现类。开发者可以使用Spring提供的控制器实现类,也可以自己实现控制器接口。

(4)真正做到了与View层的无关。它不会强制开发者使用JSP,也可以根据项目需求使用Velocity、XSLT等技术、使用起来更加灵活。

(5)国际化支持。

(6)面向接口编程。

(7)Spring提供了Web应用开发的一整套流程、不仅仅是MVC,它们之间可以很方便地结合一起。

工作流程

7edcb403cb5fce4accb9f63304c47c1d.png

(1)首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

(2)DispatcherServlet——>HandlerMapping,映射处理器将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;

(3)DispatcherServlet——>HandlerAdapter,处理器适配器将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

(4)HandlerAdapter——>调用处理器相应功能处理方法,并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

(5)ModelAndView对象(Model部分是业务对象返回的模型数据,View部分为逻辑视图名)——> ViewResolver, 视图解析器将把逻辑视图名解析为具体的View;

(6)View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构;

(7)返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

核心类与接口:

DispatcherServlet   -- 前置控制器

c14aed23d21fe7fb2bb816e5bbab30e9.png

HandlerMapping接口 -- 处理请求的映射

HandlerMapping接口的实现类:

SimpleUrlHandlerMapping  通过配置文件,把一个URL映射到Controller

DefaultAnnotationHandlerMapping  通过注解,把一个URL映射到Controller类上

dd11c6e5b83971c05a0b0c87c13476cd.png

HandlerAdapter接口 -- 处理请求的映射

AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上

20c951791fdd68a063bc727a0540767c.png

Controller接口 -- 控制器

由于我们使用了@Controller注解,添加了@Controller注解注解的类就可以担任控制器(Action)的职责,

所以我们并没有用到这个接口。

57bdd7b2a8411fa6f2d7be19bd4860c7.png

HandlerInterceptor 接口--拦截器

无图,我们自己实现这个接口,来完成拦截的器的工作。

ViewResolver接口的实现类

UrlBasedViewResolver类 通过配置文件,把一个视图名交给到一个View来处理

InternalResourceViewResolver类,比上面的类,加入了JSTL的支持

9b816b191fd1d36ce867d642d86e6ab2.png

View接口

JstlView类

896cd5ce609ffa146f9aecf608981047.png

LocalResolver接口

12e24563cfadb33ef494463b34e429ce.png

HandlerExceptionResolver接口 --异常处理

SimpleMappingExceptionResolver实现类

0fb9a2ad19f81260f48b8049d94e9216.png

ModelAndView类

无图。

使用Spring MVC

配置DispatcherServlet

DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet。

DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。

web.xml:

1

2 DispatcherServlet

3 org.springframework.web.servlet.DispatcherServlet

4

5 contextConfigLocation

6 classpath:springmvc-servlet.xml

7

8

9

10 DispatcherServlet

11 /

12

这里主要有点需要注意:

(1)classpath:springmvc-servlet.xml 用于加载类路径下的springmvc配置文件,文件名可以自定义。如果不定义标签则默认加载配置文件的路径是WEB-INF下。

(2)/表示所有请求都会被过滤。

springmvc-servlet.xml:

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"

4 xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"

5 xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p"

6 xsi:schemaLocation="http://www.springframework.org/schema/beans7 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd8 http://www.springframework.org/schema/context9 http://www.springframework.org/schema/context/spring-context-2.5.xsd10 http://www.springframework.org/schema/aop11 http://www.springframework.org/schema/aop/spring-aop-2.5.xsd12 http://www.springframework.org/schema/tx13 http://www.springframework.org/schema/tx/spring-tx-2.5.xsd14 http://www.springframework.org/schema/mvc15 http://www.springframework.org/schema/mvc/spring-mvc.xsd">

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36 error

37

38

39

40

扫描指定的包中的类上的注解,常用的注解有:

@Controller 声明Action组件

@Service    声明Service组件    @Service("myMovieLister")

@Repository 声明Dao组件

@Component   泛指组件, 当不好归类时.

@RequestMapping("/menu")  请求映射

@Resource  用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName")

@Autowired 用于注入,(srping提供的) 默认按类型装配

@Transactional( rollbackFor={Exception.class}) 事务管理

@ResponseBody

@Scope("prototype")   设定bean的作用域

是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。

并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值