• springMVC的学习_____1. 原理概述以及实现


    1.MVC三层架构:(是一种架构思想,不是设计模式)

    M(model):数据模型层:包含了数据和对数据的操作。一般又包括Dao层:直接进行数据库的访问,Service层:调用Dao。

    V(View):视图层:展示给用户的东西,前端页面;

    C(Controller):控制层:接受从View层(视图层)传递来的数据,再调用Model(数据模型层),进行数据库的操作,再向View层返回处理的结果,职责上相当于一个调度器。

    2.SpringMVC是基于Java实现的MVC的轻量级web框架。

    1.DispatcherServlet:(核心分发器)

    SpringMVC和其他的MVC框架一样,也是以请求驱动的,核心由中心Servlet进行分发处理这些请求。

    DispatcherServlet本质也是servlet,同样继承自HttpServlet。

    2.SpringMVC的原理如下图所示:

    用户发出的请求首先被前端拦截器(中心分发器)拦截,将请求委托给控制器,由具体的控制器去完成请求的内容,此过程一般包括创建模型,访问数据库来完成具体的业务,再将数据模型和视图返回中心分发器,中心分发器将视图和数据模型交给视图层进行渲染,再返回给中心分发器,再交给请求者。

    3.SpringMVC的执行原理:

     

    图为SpringMVC的一个整体的工作流程,其中实线的部分有框架提供,虚线的由程序员进行实现。

    流程分析:

    1.DispatcherServlet(前端控制器),用来接受和拦截用户的请求,在进行分发。

    url请求的解析:eg:http://localhost:8080/SpringMVC/hello

    http://localhost:8080:服务器域名;

    SpringMVC:部署在服务器上的web站点;

    hello:表示一个具体的控制器。

    2.HandlerMapping:根据url找到控制器;

    3.HandlerExecution:表示具体的Handler,作用是根据url找到具体的控制器;

    4.HandlerAdapter:表示处理器适配器,它按照特定的规格来执行Handler,完成控制器的执行;

    5.Controller:具体的控制器;

    6.Handler让具体的Controller执行;

    7.Controller将执行的结果model view返回给diapatcherservlet;

    8.分发给视图层进行渲染;

    9.将渲染的结果返回给用户;

     代码实现:

    1.springmvc 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_3_0.xsd"
             id="WebApp_ID" version="3.0">
    
    <!--1.注册 dispatcherServlet-->
    <servlet>
      <!--servlet的name-->
      <servlet-name>springmvc</servlet-name>
      <!--对应的类 由Spring提供-->
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
      <!--配置Spring的配置文件-->
      <!--配置文件的命名有讲究-->
      <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc-servlet.xml</param-value>
      </init-param>
    
      <!--启动参数-->
      <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <!-- /* 匹配所有的请求,包括.jsp -->
      <!-- /  匹配所有的请求,不包括.jsp -->
      <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    </web-app>

    2.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--HandlerMapping 处理器映射器-->
        <!--根据url找到相应的控制器-->
        <!--Spring容器中bean的注册-->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    
    
        <!--HandlerAdapter 处理器适配器-->
        <!--执行具体的控制器-->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
    
        <!--视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    
        <!--Controller bean的注册-->
        <!-- controller bean的id就是访问的发起点 -->
        <bean id="/hello" class="com.xbf.controller.HelloController"/>
    
    
    </beans>

    3.controller层的编写:

    package com.xbf.controller;
    
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HelloController implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            ModelAndView mv = new ModelAndView();
            mv.addObject("msg","hello,springmvc");
            mv.setViewName("hello");
            return mv;
        }
    }

    4,前端页面的编写:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    ${msg}
    
    </body>
    </html>

    总结:

    实现流程:
    1.web.xml:
    注册dispatcherServlet -》servlet名字,servlet对应的类,Springmvc配置文件,启动级别,请求过滤的范围
    2.springmvc-servlet.xml:
    处理器映射器 HandlerMapping:根据url获得到具体的处理器 bean
    处理器适配器 HandlerAdapter:执行处理器 bean
    视图解析器 前缀,后缀
    3.Controller:
    作用:model&view,传递
    实现Controller接口,实现handleRequest方法;
    并在spring容器中注册bean
    4.编写前端页面:

    访问:
    先被拦截在dispatcherServlet;
    最终是要用处理器进行访问的发起: 访问ID
    <!--Controller bean的注册-->
    <bean id="/hello" class="com.xbf.controller.HelloController"/>


    总结:用户不能直接访问web-inf下面的页面,会报404错误!
  • 相关阅读:
    PPT入门学习笔记1:待修改
    单片机入门学习笔记8:STM32单片机使用
    springboot中redis做缓存时的配置
    LocalDateTime与mysql日期类型的交互(基于mybatis)
    LocalDateTime在spring boot中的格式化配置
    Spring Cloud学习笔记【十】配置中心(消息驱动刷新配置)
    Spring Cloud学习笔记【九】配置中心Spring Cloud Config
    Spring Cloud分布式Session共享实践
    Spring Cloud学习笔记【八】服务网关 Zuul(过滤器)
    Spring Cloud学习笔记【七】服务网关 Zuul(路由)
  • 原文地址:https://www.cnblogs.com/xbfchder/p/11297196.html
Copyright © 2020-2023  润新知