zoukankan      html  css  js  c++  java
  • Spring入门-MVC了解

    MVC是一种分层的思想,Spring已经写好了MVC的结构供使用,这里简单了解一下。

    MVC

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。--来自百度

    SpringMVC,是Spring框架里用来简化基于MVC架构的web应用程序开发的框架控制器C做两件事情,一是接受请求,根据请求调用相应模型M来处理请求,第二是依据模型M返回的结果调用视图V。为了实现控制器的上述功能,需要在xml文件中来配置完成。

    SpringMVC五大组件

    SpringMVC有五大组件,其组成了一个MVC的结构。

    (1)DispatcherServlet

    DispatcherServlet:前端控制器,接受Web端请求

    (2)HandlerMapping

    HandlerMapping:映射处理器,告诉前端控制器请求应该交给哪个处理器M来处理

    (3)Controller

    Controller:处理器,负责执行具体的任务,可调用DAO等组件,编写时需要实现Controller接口及约定方法处理器将处理结果封装成一个对象,处理成ModelAndView对象返回给前端控制器

    (4)ModelAndView

    ModelAndView:处理结果和视图名,视图名是一列字符串,会发送给前端控制器,比如视图名可能是hello.jsp,也可能是freemarker或者velocity类型,不一定是用jsp一种视图技术

    (5)ViewResolver

    ViewResolver:视图解析器,会解析前端控制器发给它的视图名字符串做出处理,可能是处理jsp,也可能是freemarker或者velocity等,解析完成后,前端控制器发送页面给浏览器

    简单来说,DispatcherServlet和HandlerMapping配合使用进行请求分发,因此对应就是C结构Controller对分发的请求进行处理,并返回一个包含数据和视图名的ModelAndView对象给前端控制器DispatcherServlet,因此其就是M结构前端控制器DispatcherServlet将ModelAndView对象交给视图解析器ViewResolver来处理,视图解析器将页面渲染后发送浏览器,其就是V结构

    SpringMVC如何使用

    按照如下步骤来,可以实现一个简单的SpringMVC结构。

    step1.导包 spring-webmvc,pom.xml中配置

    1   <dependency>
    2   <groupId>org.springframework</groupId>
    3   <artifactId>spring-webmvc</artifactId>
    4   <version>4.2.3.RELEASE</version>
    5   </dependency>

    step2.添加配置文件spring-mvc.xml,暂时为默认文件无任何添加配置信息

    step3.配置前端控制器DispatcherServlet,在web.xml中配置,由前端控制器来启动spring容器

     1  <!-- 配置DispatcherServlet -->
     2   <servlet>
     3     <servlet-name>springmvc</servlet-name>
     4     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     5     <!-- DispatcherServlet的初始化方法会启动spring容器,contextConfigLocation用来指定spring配置文件的位置 -->
     6     <!-- 初始化参数,配置spring容器启动读取配置文件的路径 -->
     7     <init-param>
     8       <param-name>contextConfigLocation</param-name>
     9       <param-value>classpath:spring-mvc.xml</param-value>
    10     </init-param>
    11     <!-- 设置tomcat启动就创建spring容器 -->
    12     <load-on-startup>1</load-on-startup>
    13   </servlet>
    14   <servlet-mapping>
    15     <servlet-name>springmvc</servlet-name>
    16     <url-pattern>*.do</url-pattern>
    17   </servlet-mapping>

    step4.写Controller

     1 package Controller;
     2 
     3 import javax.servlet.http.HttpServletRequest;
     4 import javax.servlet.http.HttpServletResponse;
     5 
     6 import org.springframework.web.servlet.ModelAndView;
     7 import org.springframework.web.servlet.mvc.Controller;
     8 
     9 /**
    10  * 处理器,需要实现Controller接口
    11  * @author yangchaolin
    12  *
    13  */
    14 public class helloController implements Controller{
    15     /**
    16      * handleRequest方法名固定,返回值类型ModelAndView也固定,后续有其他方式可以更改
    17      */
    18     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    19         System.out.println("handleRequest");
    20         /**
    21          * ModelAndView有两个常用的构造器
    22          * ModelAndView(String viewName)
    23          * ModelAndView(String viewName,Map data) 
    24          * viewName就是视图名,Map就是处理结果
    25          */
    26         return new ModelAndView("hello");//返回视图名hello
    27     }
    28 }

    step5.写jsp

    在WEB-INF下添加hello.jsp用于测试

    1 <h1>hello springmvc</h1>

    step6.配置HandlerMapping和viewResolver

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util"  
     4     xmlns:jee="http://www.springframework.org /schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
     5     xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:mvc="http://www.springframework.org/schema/mvc"
     6     xsi:schemaLocation="
     7         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     8         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
     9         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
    10         http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
    11         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    12         http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
    13         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">    
    14         
    15         <!-- 配置HandlerMapping,使用HandlerMapping接口下的实现类SimpleUrlHanderMapping -->
    16         <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    17           <property name="mappings">
    18             <props>
    19               <prop key="/hello.do">helloController</prop>
    20               <!-- 当地址为/hello.do时,会根据它的value:helloController,去寻找bean id为helloController的对象 -->
    21               <!-- Mapping中存入的是properties对象,key为url,value为控制器的id -->
    22             </props>
    23           </property>
    24         </bean>
    25         
    26         <!-- HandlerMapping会根据设置的mapping,根据url去寻找对应的bean id,然后启动对应的Controller -->
    27         <!-- 配置Controller -->
    28         <bean id="helloController" class="Controller.helloController">
    29         
    30         </bean>
    31         
    32         <!-- 配置视图解析器viewResolver -->
    33         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    34            <property name="prefix" value="/WEB-INF/" />
    35            <property name="suffix" value=".jsp" />
    36            <!-- 前缀和后缀配置,视图名hello通过上面的配置可以映射到/WEB-INF/hello.jsp -->
    37         </bean>
    38       
    39 </beans>

    配置视图解析器需要根据使用的实际情况来配置,如果是jsp,可以使用InternalResourceViewResolver如果是velocity,使用VelocityViewResolver如果是freemarker,使用FreeMarkerViewResolver

    测试访问结果

    结论

    SpringMVC的出现可以简化开发,以前写的一个项目使用Servlet+JSP,需要写一个servlet类(相当如C)来专门处理请求,在重写的service方法里写业务逻辑(相当如M)和需要返回的视图(相当如V),这样代码不够好维护,SpringMVC的出现可以解决这个问题,并且让代码具有可扩展性。

    参考博客

    (1)https://www.cnblogs.com/youngchaolin/p/10549020.html

  • 相关阅读:
    Spring + MySQL + Mybatis + Redis【二级缓存】执行流程分析
    Spring + MySQL + Mybatis + Redis【二级缓存】
    MyBatis的笔记
    Spring事务:一种编程式事务,三种声明式事务
    笔记
    mybatis-generator自定义注释生成
    做准备的笔记
    常用DOS命令和Linux命令
    数据库MongoDB查询语句--持续更新
    SpringBoot集成websocket实现后端向页面发送消息
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/11347771.html
Copyright © 2011-2022 走看看