zoukankan      html  css  js  c++  java
  • Spring MVC的配置与DispatcherServlet的分析

      Spring MVC是一款Web MVC框架,是目前主流的Web MVC框架之一。

      Spring MVC工作原理简单来看如下图所示:

      

      接下来进行Spring MVC的配置

      首先我们配置Spring MVC先要引进相关的jar包

              

      我们需要有一个处理器,即Controller层,并将它配置到ioc中,当用户访问一个路径是,前端控制器拦截后会产生一个handler映射到ioc容器中,如果有匹配的RequestMapping就会访问这个方法,否则产生404异常。

      

    @Controller
    public class helloworld {
    
        @RequestMapping("hello1.action")
        public ModelAndView hello(){
            ModelAndView mav = new ModelAndView();
            mav.addObject("data", "你好");
            mav.setViewName("hello");
            return mav;
        }
    }

      并将它扫描到ioc容器中

    <context:component-scan base-package="package com.xt.crud"></context:component-scan>
    <mvc:default-servlet-handler/>
        
    <mvc:annotation-driven ></mvc:annotation-driven>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/views/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    <mvc:default-servlet-handler/>表示将没有匹配到Controller的静态资源的处理交给web容器,例如css,js等
    但是当我们把静态资源的处理交给web容器时,你会发现我们写的RequestMapping中的路径无法访问,这是因为当我们没有添加这个标签时,框架默认注册有
    AnnotationMethodHandlerAdapter这个类,他会对spring MVC中的注解进行处理,匹配RequestMapping中的路径,但是当我们加了<mvc:default-servlet-handler/>
    前端控制器拦截后会将拦截路径和资源型请求交给默认的处理器处理,而这个处理器无法处理Controller中的路径,而<mvc:annotation-driven >会注册一个RequestMappingHandlerAdapter,
    并在默认处理器处理完静态资源后处理RequestMapping中的路径。

      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/views/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>

    可以简化我们返回视图层的路径,比如我们要返回view/success.jsp,配置了以上内容后,我们只需要写success就可以了。

       接下来配置前端控制器(DispatcherServlet),打开web.xml

      找到spring-webmvc包下的Dispatcher.class并把它配置到servlet标签

            

      

    <servlet>
            <servlet-name>Dispatchar</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring/crud.xml</param-value>
            </init-param>
    </servlet>

    在配置前端控制器时,我们需要初始化org.springframework.web.servlet.DispatcherServlet中的contextConfigLocation属性,将他赋值为我们刚才写的ioc容器的路径,

    这样他才能将我们的请求与ioc中Controller中的RequestMapping作对比。在servlet标签中还有一个<load-on-startup></load-on-startup>标签,它是用来设置多个servlet

    拦截的优先级的,数字越小优先级越高,例如<load-on-startup>0</load-on-startup>的servlet会比<load-on-startup>1</load-on-startup>的优先执行。

    接下来配置前端控制器的拦截路径

    <servlet-mapping>
            <servlet-name>Dispatchar</servlet-name>
            <url-pattern>/</url-pattern>
    </servlet-mapping>

    /表示拦截所有路径,包括静态资源

    以上就是前端控制器(DispatcherServlet)的配置过程,下一周会分享spring MVC中的Restful,自动装箱和重定向

      

  • 相关阅读:
    洛谷 1339 最短路
    洛谷 1330 封锁阳光大学 图论 二分图染色
    洛谷 1262 间谍网络 Tarjan 图论
    洛谷 1373 dp 小a和uim之大逃离 良心题解
    洛谷 1972 莫队
    洛谷 2158 数论 打表 欧拉函数
    洛谷 1414 数论 分解因数 水题
    蒟蒻的省选复习(不如说是noip普及组复习)————连载中
    关于筛法
    关于整数划分的几类问题
  • 原文地址:https://www.cnblogs.com/Shevo/p/7819558.html
Copyright © 2011-2022 走看看