springmvc學習筆記(1)-框架原理和入門配置

springmvc學習筆記(1)-框架原理和入門配置

標籤: springmvchtml


[TOC]前端


本文主要介紹springmvc的框架原理,並經過一個入門程序展現環境搭建,配置以及部署調試。java

springmvc是spring框架的一個模塊,springmvc和spring無需經過中間整合層進行整合。git

springmvc框架原理

給個官網示意圖程序員

The request processing workflow in Spring Web MVC

組件及其做用github

  • 前端控制器(DispatcherServlet):接收請求,響應結果,至關於轉發器,中央處理器。減小了其餘組件之間的耦合度
  • 處理器映射器(HandlerMapping):根據請求的url查找Handler
  • Handler處理器:按照HandlerAdapter的要求編寫
  • 處理器適配器(HandlerAdapter):按照特定規則(HandlerAdapter要求的規則)執行Handler。
  • 視圖解析器(ViewResolver):進行視圖解析,根據邏輯視圖解析成真正的視圖(View)
  • 視圖(View):View是一個接口實現類試吃不一樣的View類型(jsp,pdf等等)

注:其中加粗的爲須要程序員開發的,沒加粗的爲不須要程序員開發的web

文末參考連接中《跟開濤學SpringMVC》裏面有張圖挺好的,感受很詳細.spring

springmvc_核心架構圖

步驟:架構

  • 1.發起請求到前端控制器(DispatcherServlet)
  • 2.前端控制器請求處理器映射器(HandlerMapping)查找Handler(可根據xml配置、註解進行查找)
  • 3.處理器映射器(HandlerMapping)向前端控制器返回Handler
  • 4.前端控制器調用處理器適配器(HandlerAdapter)執行Handler
  • 5.處理器適配器(HandlerAdapter)去執行Handler
  • 6.Handler執行完,給適配器返回ModelAndView(Springmvc框架的一個底層對象)
  • 7.處理器適配器(HandlerAdapter)向前端控制器返回ModelAndView
  • 8.前端控制器(DispatcherServlet)請求視圖解析器(ViewResolver)進行視圖解析,根據邏輯視圖名解析成真正的視圖(jsp)
  • 9.視圖解析器(ViewResolver)向前端控制器(DispatcherServlet)返回View
  • 10.前端控制器進行視圖渲染,即將模型數據(在ModelAndView對象中)填充到request域
  • 11.前端控制器向用戶響應結果

springmvc入門程序

一個展現商品列表的小頁面mvc

環境搭建

intellij IDEA 15.0.2

  • A方法(有待商榷)

new->project->maven->勾選create from archetype->選中webapp

src/main下新建java文件夾,標記爲Sources Root

這樣建出來的工程感受有問題,點開一些xml文件一片紅,內心不是很踏實,因此放棄這個方法了

  • B方法

new->project->maven,建一個裸的maven工程,手動建webapp的目錄

src/main下新建文件夾webapp

pom.xml文件

添加依賴

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.2.4.RELEASE</version>
</dependency>

加上下面的標籤會生成Artifacts

<packaging>war</packaging>

build標籤的finalName要和Artifacts的output directory一致

<build>
    <finalName>springmvc-2nd-1.0-SNAPSHOT</finalName>
</build>

配置文件

  • 配置前端控制器

web.xml

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- contextConfigLocation配置springmvc加載的配置文件(配置處理器映射器、適配器等等)
      若不配置,默認加載WEB-INF/servlet名稱-servlet(springmvc-servlet.xml)
    -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--
    第一種:*.action,訪問以.action結尾,由DispatcherServlet進行解析
    第二種:/,全部訪問的地址由DispatcherServlet進行解析,對靜態文件的解析須要配置不讓DispatcherServlet進行解析,
            使用此種方式和實現RESTful風格的url
    第三種:/*,這樣配置不對,使用這種配置,最終要轉發到一個jsp頁面時,仍然會由DispatcherServlet解析jsp地址,
            不能根據jsp頁面找到handler,會報錯
    -->
    <url-pattern>*.action</url-pattern>
</servlet-mapping>
  • 配置Handler

將編寫Handler在spring容器加載

<!-- 配置Handler -->
<bean name="/queryItems.action" class="com.iot.ssm.controller.ItemsController"/>
  • 配置處理器映射器

在classpath下的springmvc.xml中配置處理器映射器

<!-- 處理器映射器
    將bean的name做爲url進行查找,須要在配置Handler時指定beanname(就是url)
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
  • 配置處理器適配器

全部處理器適配器都實現了HandlerAdapter接口

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">

源碼

public boolean supports(Object handler) {
        return handler instanceof Controller;
}

此適配器能執行實現Controller接口的Handler

  • 配置視圖解析器

須要配置解析jsp的視圖解析器

<!-- 視圖解析器
    解析jsp,默認使用jstl,classpath下要有jstl的包
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

在springmvc.xml中視圖解析器配置前綴和後綴:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 配置jsp路徑的前綴 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 配置jsp路徑的後綴 -->
        <property name="suffix" value=".jsp"/>
</bean>

程序中不用指定前綴和後綴:

//指定視圖
//下邊的路徑,若是在視圖解析器中配置jsp的路徑前綴和後綴,修改成items/itemsList
//modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

//下邊的路徑配置就能夠不在程序中指定jsp路徑的前綴和後綴
modelAndView.setViewName("items/itemsList");

部署調試

HTTP Status 404 - 處理器映射器根據url找不到Handler,說明url錯誤

HTTP Status 404 -/springmvc/WEB-INF/jsp/items/itemsLists.jsp 處理器映射器根據url找到了Handler,轉發的jsp頁面找不到

參考連接


做者@brianway更多文章:我的網站 | CSDN | oschina

相關文章
相關標籤/搜索