• springMVC注解驱动


    今天又详细学习一下springMVC

    springMVC简介

    大部分java应用都是web应用,展现层是web应用最为重要的部分。Spring为展现层提供了一个优秀的web框架——Spring MVC。和众多其他web框架一样,它基于MVC的设计理念,此外,它采用了松散耦合可插拔组件结构,比其他MVC框架更具扩展性和灵活性。

    SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,无需实现任何接口,同时,SpringMVC还支持REST风格的URL请求。

    此外,SpringMVC在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。

    它在框架设计、扩展性、灵活性等方面全面超越了Struts、WebWork等MVC框架,从原来的追赶者一跃成为MVC的领跑者。

    SpringMVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet是SpringMVC框架的总导演、总策划,它负责截获请求并将其分派给相应的处理器处理。

    springMVC的整体架构

    如图所示:

    1、 用户发起请求到前端控制器(DispatcherServlet),前端控制器没有能力处理业务逻辑;

    2、 通过HandlerMapping查找模型(ControllerHandler

    3、 返回执行链,执行链包含了2部分内容,Handler对象以及拦截器(组);

    4、 通过HandlerAdapter执行模型(Handler

    5、 适配器调用Handler对象处理业务逻辑;

    6、 模型处理完业务逻辑,返回ModelAndView对象,view不是真正的视图对象,而是视图名称;

    7、 将ModelAndView对象返回给前端控制器;

    8、 前端控制器通过视图名称经过视图解析器查找视图对象;

    9、 返回视图对象;

    10、前端控制器渲染视图;

    11、返回给前端控制器;

    12、前端控制器将视图(htmljson、xml、Excel返回给用户;

    本文重点

    这里主要想说的是mvc的注解驱动

    web.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="MyWebApp" version="2.5">
        <display-name>springmvc</display-name>
    
        <!-- springmvc 入口 -->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 启动顺序 -->
            <load-on-startup>1</load-on-startup>
            <!-- 默认查找配置文件规则  /WEB-INF/servletName-servlet.xml -->
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <!-- 所有请求以*.do会进入MVC框架 -->
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    
    
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    
    </web-app>

    下面是springmvc的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!-- 注册HandlerMapping -->
        <!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> -->
        
        <!-- 注册简单适配器 -->
        <!-- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> -->
        
        <!-- 推荐使用的注解的HandlerMapping -->
        <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> -->
        
        <!-- 推荐使用的注解适配器 -->
        <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->
    
        <!-- mvc的注解驱动 -->
        <mvc:annotation-driven/>
        <!-- 扫描包,使@Controller生效 -->
        <context:component-scan base-package="cn.vincce.springmvc.controller"/>
        
        <!-- 自定义Handler -->
        <!-- <bean name="/hello.do" class="cn.vincce.springmvc.controller.HelloController"/> -->
        
        <!-- prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" -> "/WEB-INF/jsp/test.jsp"  -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 前缀 -->
            <property name="prefix" value="/WEB-INF/views/"/>
            <!-- 后缀 -->
            <property name="suffix" value=".jsp"/>
        </bean>
    
    </beans>

    根据上面springmvc的整体架构,做上面的相关配置,这一块儿的配置根据源码

       <!-- 推荐使用的注解的HandlerMapping -->
        <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> -->
        
        <!-- 推荐使用的注解适配器 -->
        <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->

    可以用

    <!-- mvc的注解驱动 -->
    
    <mvc:annotation-driven/>

    代替,项目启动时打印的日志信息:红色标记

    2016-01-12 16:57:09,250 [localhost-startStop-1] [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]-[DEBUG] Looking for request mappings in application context: WebApplicationContext for namespace 'springmvc-servlet': startup date [Tue Jan 12 16:57:08 CST 2016]; root of context hierarchy
    2016-01-12 16:57:09,277 [localhost-startStop-1] [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]-[INFO] Mapped "{[/test/mv],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.vincce.study.controller.TestController.page()

    为什么mvc的注解驱动可以替代HandleMapping和HandleAdapter这两个的配置?

    查看源码:

    有点豁然开朗。

  • 相关阅读:
    Sampling Distribution of the Sample Mean|Central Limit Theorem
    OS L2-3: Process Creation and Operations
    c++函数重载、内联函数、类、友元
    命名空间及异常处理
    C++继承与多态,代码复用之泛型和模板
    ORB_GMS图像对齐
    ORB对齐
    [转]OpenCV中ORB特征点检测和匹配简单用法
    [转]OpenCV学习笔记】之鼠标的调用
    [转]OpenCV—Mat类
  • 原文地址:https://www.cnblogs.com/yangh965/p/5124965.html
Copyright © 2020-2023  润新知