1. 程式人生 > >使用Intellij Idea建立第一個SpringMVC工程

使用Intellij Idea建立第一個SpringMVC工程

    研究生入學跟老師做專案,之前沒有接觸過Spring,在看了近一個月的教學視訊後,發現也就那麼點東西,在這裡總結回顧一下,算是對Spring進行一下鞏固。順便推薦一下使用IDEA進行開發,我之前都是用Eclipse,可是轉到IDEA上之後簡直對它愛不釋手,我反正以後寫Java 都不會再用Eclipse和MyEclipse了

一、Spring MVC 架構

Spring Web MVC和Struts一樣都是表現層的框架,它是Spring的框架的一部分,可以視其為Spring的一個模組。Spring Web MVC的架構如下圖所示:

這裡寫圖片描述

對上圖中元件的說明:

  • DispatcherServlet(前端控制器):DispatcherServlet是整個流程控制的中心,由它呼叫其它元件處理使用者的請求,DispatcherServlet的存在降低了元件之間的耦合性。
  • HandlerMapping(處理器對映器):HandlerMapping負責根據使用者請求找到Handler即處理器,springmvc提供了不同的對映器實現不同的對映方式,例如:配置檔案方式,實現介面方式,註解方式等,推薦使用註解開發。
  • Handler(處理器):Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的使用者請求進行處理。由於Handler涉及到具體的使用者業務請求,所以一般情況需要程式設計師根據業務需求開發Handler。
  • HandlAdapter(處理器介面卡):通過HandlerAdapter對處理器進行執行,這是介面卡模式的應用,通過擴充套件介面卡可以對更多型別的處理器進行執行。
  • ViewResolver(檢視解析器):View Resolver負責將處理結果生成View檢視,View Resolver首先根據邏輯檢視名解析成物理檢視名即具體的頁面地址,再生成View檢視物件,最後對View進行渲染將處理結果通過頁面展示給使用者。

Spring MVC Demo

根據對Spring MVC的架構分析,如果我們想要完成一個應用Spring MVC的專案,就必須要在配置檔案中進行配置,只要完成了配置,開發就相對容易了。
這次要實現的一個Demo只是一個Hello World級別的SpringMVC入門程式,實現表單提交使用者姓名,然後再轉向另一個JSP。

工程目錄結構:

這裡寫圖片描述

Spring元件的配置:

1.在web.xml中配置前端控制器:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!--
       載入Spring容器,不建議直接使用applicationContext.xml,而應根據分類另外建立配置檔案
    -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!--
    配置前端控制器
        這裡配置的前端控制器的名字叫dispatcher,SpringMVC預設會載入同目錄下的dispatcher-servlet.xml
    這裡為了便於分層管理,不使用dispatcher-servlet.xml,而是自己寫一個springmvc.xml,用contextConfigLocation
    指定SpringMVC的載入位置。
    要求:spring資料夾的上一層資料夾必須mark為“Resources Root”,同時注意如果一個資料夾一旦配置為“Resources Root”
    其下的配置資料夾都是可以直接寫在路徑中的,具體檢測方式看能否直接開啟
    springmvc.xml中配置了
        1、處理器對映器和處理器介面卡
        2、處理器
        3、檢視解析器
    使用RESTful格式的話,將<url-pattern>標籤中的“*.action”變為“/”
    -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

    <!--配置編碼-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

2.Spring預設是在”前端控制器name-servlet.xml”中進行配置,但這裡為了後期便於擴充套件,將其放到springmvc.xml中配置,在該配置檔案中我們會配置對映器,介面卡,處理器和檢視解析器。其中處理器採用註解方式。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!--
    配置處理器對映器和處理器介面卡
    使用<mvc:annotation-drvier/>配置註解對映器和註解介面卡
    -->
    <mvc:annotation-driven/>

    <!--
    配置處理器
      使用<context:component-sacn/>元件掃描器自動掃描包中標記為@Controller的註解類,
      注意:多個包中間使用半形逗號分隔
      要求:base-package對應的包中應該是controller包
    -->
    <context:component-scan base-package="cn.michael.controller"/>

    <!--
    配置檢視解析器
        要求:
        1、配置解析JSP的檢視解析器,預設使用JSTL,因此classpath下需要有JSTL的包
        2、根據字首和字尾,在WEB-INF目錄下要有pages目錄,其中存放jsp檔案
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

3.檢視及Controller的編寫
經過在web.xml和springmvc.xml中的配置,我們已經完成了Spring元件的配置。下面編寫檢視及必要的控制器,因為是入門程式,只有一個控制器(FirstController),兩個JSP:index.jsp和showName.jsp,其資料流動是:index.jsp—> FirstController —> showName.jsp。

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>SpringMVC_Demo</title>
  </head>
  <body>
      <form action="${pageContext.request.contextPath}/views/showName.action" method="post" >
          <input name="username" type="text">
          <input type="submit" value="提交">
      </form>
  </body>

</html>

FirstController:

package cn.michael.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/views")
public class FirstController {
    @RequestMapping("/showName")
    public ModelAndView showName(String username){
        System.out.println (username);
        ModelAndView modelAndView = new ModelAndView ();
        modelAndView.addObject ("username", username);
        modelAndView.setViewName ("showName");
        return modelAndView;
    }
}

showName.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>使用者姓名</title>
</head>
<body>

    <c:choose>
        <c:when test="${username != null}">
            使用者姓名是:${username}
        </c:when>
        <c:otherwise>
            沒有接收到使用者姓名
        </c:otherwise>
    </c:choose>
</body>
</html>

## 三、工程原始碼下載及注意 ##
工程原始碼下載:SpringMVCDemo

  1. 任何一個框架,入門的難點在於配置檔案的配置。
  2. 多多實踐,一定要學會如何去Debug,會用搜索引擎!!!
  3. 千萬不要忽視每一個細節。

ps:在學習過程中借鑑了別人的一些學習感悟,僅供參考,望多多指教