English
联系我们
网站地图
邮箱
旧版回顾



放弃高薪卖螃蟹_【Java】关于Spring MVC框架的总结

SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发。

MVC

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

视图

视图是用户看到并与之交互的界面。对老式的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,它们之间可以很方便地结合一起。

?

工作流程

?

(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?? -- 前置控制器

?

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

HandlerMapping接口的实现类:

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

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

?

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

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

?

Controller接口 -- 控制器

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

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

?

?

?

HandlerInterceptor 接口--拦截器

HandlerInterceptor jie kou lan jie qi

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

?

?

ViewResolver接口的实现类

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

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

?

View接口

JstlView类

?

LocalResolver接口

?

HandlerExceptionResolver接口 --异常处理

SimpleMappingExceptionResolver实现类

?

?

ModelAndView类

无图。

?

使用Spring MVC

?

?

配置DispatcherServlet

?

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

?

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

web.xml:

 1   <servlet>
 2       <servlet-name>DispatcherServletservlet-name>
 3       <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
 4       <init-param>
 5           <param-name>contextConfigLocationparam-name>
 6           <param-value>classpath:springmvc-servlet.xmlparam-value>
 7       init-param>
 8   servlet>
 9   <servlet-mapping>
10       <servlet-name>DispatcherServletservlet-name>
11       <url-pattern>/url-pattern>
12   servlet-mapping>

这里主要有点需要注意:

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

(2)<url-pattern>/url-pattern>表示所有请求都会被过滤。

?

springmvc-servlet.xml:

 1 xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 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/beans
 7            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 8            http://www.springframework.org/schema/context
 9            http://www.springframework.org/schema/context/spring-context-2.5.xsd
10            http://www.springframework.org/schema/aop 
11            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
12            http://www.springframework.org/schema/tx 
13            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
14               http://www.springframework.org/schema/mvc
15            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
16 
17       
18     <mvc:annotation-driven />
19     
20     
21     <mvc:resources location="/statics/" mapping="/statics/**" />
22     
23     
24     <context:component-scan base-package="cn.xxxx.controller"/>
25     
26     
27     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
28         <property name="prefix" value="/WEB-INF/jsp/"/>
29         <property name="suffix" value=".jsp"/>
30     bean>
31     
32     
33     <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
34         <property name="exceptionMappings">
35             <props>
36                 <prop key="cn.xxxx.exception.LoginException">errorprop>
37             props>
38         property>    
39     bean>
40 beans> 

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

@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)。

本文部分取自网络:http://elf8848.iteye.com/blog/875830

当前文章:http://www.gramsiam.com/ere/244798-630848-81478.html

发布时间:12:54:40

香港最快开奖结果2018??牛魔王论坛??0449香港杀庄网永久免费??www.2227788.com??香港马会挂牌彩图??王中王论坛www74123com??55766品特轩??刘伯温论坛??六合宝典??香港本港台开奖结果??

专题推荐

相关新闻


? 1996 - 蜘蛛支付宝红包免费领 版权所有?? 联系我们

地址:北京市三里河路52号 邮编:100864