zoukankan      html  css  js  c++  java
  • 【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和像XHTMLXML/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 接口--拦截器

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

    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>DispatcherServlet</servlet-name>
     3       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     4       <init-param>
     5           <param-name>contextConfigLocation</param-name>
     6           <param-value>classpath:springmvc-servlet.xml</param-value>
     7       </init-param>
     8   </servlet>
     9   <servlet-mapping>
    10       <servlet-name>DispatcherServlet</servlet-name>
    11       <url-pattern>/</url-pattern>
    12   </servlet-mapping>

    这里主要有点需要注意:

    (1)classpath:springmvc-servlet.xml 用于加载类路径下的springmvc配置文件,文件名可以自定义。如果不定义<init-param>标签则默认加载配置文件的路径是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">error</prop>
    37             </props>
    38         </property>    
    39     </bean>
    40 </beans> 

    <context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有:

    @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的作用域

     

    <mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。
    并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。

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

  • 相关阅读:
    n皇后问题
    hdu 4911 Inversion and poj2299 [树状数组+离散化]
    离散化
    汉诺塔
    hdu 4027 Can you answer these queries?[线段树]
    开根号
    hdu 1069 Monkey and Banana 【动态规划】
    Linux系统下安装rz/sz命令及使用说明
    PHP获得指定日期所在月的第一天和最后一天
    PHP获得指定日期所在星期的第一天和最后一天
  • 原文地址:https://www.cnblogs.com/xiaotie666/p/9347372.html
Copyright © 2011-2022 走看看