Spring MVC 入門程式

wit_stan發表於2018-08-19

一個展示商品列表的小頁面

環境搭建

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頁面找不到

相關文章