• 【SpringMVC】02 流程分析


    首先是web.xml配置SpringMVC最核心的东西,DispatcherServlet

    也称为【请求分发器】【前端控制器】【分发Servlet】

     <!--1.注册DispatcherServlet-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:SpringMVC-Servlet.xml</param-value>
            </init-param>
            <!--启动级别-1-->
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <!--/ 匹配所有的请求;(不包括.jsp)-->
        <!--/* 匹配所有的请求;(包括.jsp) 不要写这个,所有都访问不了-->
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

    这个Servlet必须是第一个加载出来的,因为这个DispatcherServlet是一个统一的调配分发中心

    所以才要设置启动级别为最高级 

    <!--启动级别-1-->
            <load-on-startup>1</load-on-startup>

    映射配置不要写/*是因为,我们在Bean容器配置了一个视图解析器【ViewResolver】

    写/只会匹配请求,不会触发视图解析处理

    写上/*将会把所有的请求都会触发视图解析器处理

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

    服务启动的同时需要加载Spring容器文件

    参数名称必须是容器配置坐标

    【classpath:】表示工程内当前路径

    这个路径指向了我们的容器位置,因为Maven是直接放在resources的

    生成工程目录直接在当前目录下,

    所以这里就能直接写容器文件的名称即可

    <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:SpringMVC-Servlet.xml</param-value>
            </init-param>

    这个容器里面注册了我们的

    【视图解析器】【BeanID处理器映射】【简易控制层适配器】

    和我们自己编写的【控制器实现类】

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
        <!--视图解析器:DispatcherServlet给他的ModelAndView-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
            <!--前缀-->
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <!--后缀-->
            <property name="suffix" value=".jsp"/>
        </bean>
    
        <!--Handler-->
        <bean id="/hello" class="cn.dai.controller.HelloController"/>
    </beans>

    然后我们就像写Servlet一样去编写Controller

    起初我们需要继承httpServlet重写GET&POST方法

    现在我们只需实现Controller重写handleRequest方法

    ModelAndView对象同时处理数据携带和转发视图

    addObject() 添加数据

    setViewName设置要转发的视图名,

    然后视图解析器来处理视图名,拼接URL并转发

    package cn.dai.controller;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author ArkD42
     * @file SpringMVC
     * @create 2020 - 05 - 06 - 18:13
     */
    public class HelloController implements Controller {
    
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            //ModelAndView 模型和视图
            ModelAndView mv = new ModelAndView();
    
            //封装对象,放在ModelAndView中。Model
            mv.addObject("msg","HelloSpringMVC!");
            //封装要跳转的视图,放在ModelAndView中
            mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
            return mv;
        }
    }

    最后在容器中注册这个Controller,要注意的一点是

    这个BeanID直接就是我们这个访问路径的设置

    <!--Handler-->
        <bean id="/hello" class="cn.dai.controller.HelloController"/>

  • 相关阅读:
    Nginx创建密码保护目录
    Android:Field can be converted to a local varible.
    创建用户故事地图(User Story Mapping)的8个步骤
    用户故事地图(User Story Mapping)之初体验
    Android必知必会--GreenDao缓存
    Windows下多线程数据同步互斥的有关知识
    OpenCV3.0 3.1版本的改进
    利用OpenCV的人脸检测给头像带上圣诞帽
    一些关于并行计算的科研思路
    Java中httpClient中三种超时设置
  • 原文地址:https://www.cnblogs.com/mindzone/p/12838713.html
Copyright © 2020-2023  润新知