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,他們之間能夠很方便的結合一塊兒

相關文章
相關標籤/搜索