• Spring体系结构和请求控制器入门


    什么是Spring的MVC框架?

    Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。

    spring mvc是一个基于mvc的web框架。spring mvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。

                      MVC设计模式

    例如:

    数据访问接口:DAO层。   处理业务Service层。  数据实体:POJO   负责前端请求的接受并处理:Servlet   赋值前端页面展示:JSP

    这种结构模式就是MVC设计模式,它是软件工程中的一种软件架构模式。它强制性的使软件系统的输入、处理和输出分开、把软件系统分为三个基本部分:模型(Model)、视图(View)、控制器(Controller)

                         

        

                                                                              

     JSP Mondel1

    当业务流程简单的时候,可以把控制器的功能交给视图实现,这种模式称为JsPMondel1  如下图:

    相比于JSP Mondel1,当业务流程复杂的时候就需要把业务流程控制交给控制器来实现,jsp专注与视图的展示即可  如下图:

    MVC处理过程 

    如图所示:

    通过上图我们可以得知MVC处理过程:

    (1)搜先视图提供系统与用户交互的界面,并发送用户输入给控制器

    (2)控制器接受用户的请求,并决定应该调用那个魔心来进行处理

    (3)模型根据用户请求进行相应的雨雾逻辑处理,并返回处理结果

    (4)控制器根据返回的处理结果,调用相应的视图格式化模型返回的数据,并通过视图呈现给用户结果

    MVC 优点

    多视图共享一个模型,大大提高代码的可重用性
    MVC三个模块相互独立,松耦合架构
    控制器提高了应用程序的灵活性和可配置性
    有利于软件工程化管理

    MVC 缺点

    原理复杂
    增加了系统结构和实现的复杂性
    视图对模型数据的低效率访问


                Spring MVC 架构

    Spring MVC框架搭建步骤

    (1)下载jar文件并导入工程
    spring-web-3.2.13.RELEASE.jar
    spring-webmvc-3.2.13.RELEASE.jar


    2.配置文件
    在web.xml中配置Servlet

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
               version="3.0">
    <!--配置Spring MVC的核心控制器DispatcherServlet-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <!--初始化参数-->
            <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>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

    3.创建Spring MVC的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <context:component-scan base-package="cn.smbms.controller"/>
        <mvc:annotation-driven/>
        <!--完成视图的对应-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    </beans>

    4.创建Controller-处理请求的控制器

    package cn.smbms.controller;
    
    import cn.smbms.pojo.User;
    import org.apache.log4j.Logger;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.AbstractController;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Map;
    
    public class IndexController extends AbstractController {
        @Override
        protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            System.out.println("hello,SpringMVC");  //在控制台输出日志信息
            return new ModelAndView("index");
        }

    5.创建View-JSP(此处使用jsp作为视图了)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>hello,SpringMVC!</h1>
    </body>
    </html>

    部署运行

    查看后台日志:控制台也输出了hello,Spring MVC

    补存知识:

    基于注解的处理器

    @Controller:标注一个普通的JavaBean成为可以处理请求的控制器

    @RequestMapping:通过请求URL进行映射


    一键式配置,通过注解的方式进行Spring MVC开发
    DefaultAnnotationHandlerMapping
    AnnotationMethodHandlerAdapter

    Spring MVC 请求过程

    DispatcherServlet(前端控制器)
    Spring MVC最核心的类
    web.xml中配置
    Handler(处理器):对应MVC中C(Controller层)
    类型:Object
    作用:实际处理请求
    标注了@RequestMapping的所有方法都可以看作是一个Handler
    ModelAndView
    逻辑视图名
    模型对象

    核心组件
    HandlerMapping(处理器映射)
    BeanNameUrlHandlerMapping(默认)
    将请求URL映射到同名的控制器Bean上
    DefaultAnnotationHandlerMapping
    将请求映射到标注@RequestMapping注解的控制器和处理方法上
    RequestMappingHandlerMapping
    HandlerAdapter(适配器)
    AnnotationMethodHandlerAdapter
    RequestMappingHandlerAdapter
    ViewResolver(视图解析器)
    InternalResourceView

    总结:

    Spring框架特点

    清晰地角色划分
    灵活的配置功能
    提供了大量的控制器接口和实现类
    真正做到与View层的实现无关(JSP、Velocity、Xslt等)
    国际化支持
    面向接口编程
    Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起

  • 相关阅读:
    OpenJudge 2738 浮点数加法
    OpenJudge 2809 计算2的N次方
    OpenJudge / Poj 1003 Hangover
    OpenJudge 2706 麦森数
    模板:大整数除法
    OpenJudge 2737 大整数除法
    模板:大整数减法
    ES Field Collapsing 字段折叠使用详解
    ES aggregation详解
    一个一站式流式处理云平台解决方案
  • 原文地址:https://www.cnblogs.com/Djkang/p/9627615.html
Copyright © 2020-2023  润新知