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错误!
原文地址:https://www.cnblogs.com/xbfchder/p/11297196.html