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

什么是Spring的MVC框架?

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

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

                  MVC设计模式

例如:

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

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

 

                     

 

    

 

 

                                                                          

 JSP Mondel1

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

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

MVC处理过程 

如图所示:spring

经过上图咱们能够得知MVC处理过程:apache

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

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

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

(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,他们之间能够很方便的结合一块儿

相关文章
相关标签/搜索