基於XML配置的Spring MVC 簡單的HelloWorld實例應用

 

 

1.1 問題

使用Spring Web MVC構建helloworld Web應用案例。html

1.2 方案

解決本案例的方案以下:前端

1. 建立Web工程,導入Spring Web MVC相關開發包。java

  • Spring API、web、webmvc等開發包。

2. 在src下添加Spring Web MVC的XML配置文件。web

  • 名稱能夠自定義,例如spring-mvc.xml。

3. 在web.xml中配置DispatcherServlet前端控制器組件。spring

  • DispatcherServlet組件在spring mvc中已提供,只須要配置便可。
  • 配置DispatcherServlet時,同時指定XML配置文件。

 

    <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:spring-mvc.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>

 

4. 配置HandlerMapping組件, 經過HandlerMapping組件,DispatcherServlet控制器能夠將客戶HTTP請求映射到Controller組件上。 使用以下配置能夠實現 當客戶發出hello.form請求時,會調用HelloController組件進行處理。瀏覽器

 

    <bean   class="org.springframework.web.servlet.handler.
       SimpleUrlHandlerMapping">
             <property name="mappings">
                  <props>
                       <prop key="/hello.form「>helloController</prop>
                  </props>
             </property>
     </bean>

 

5.編寫Controller組件,它負責執行具體的業務處理,可調用DAO等組件,編寫時須要實現Controller接口及約定方法,代碼以下:spring-mvc

    public class HelloController implements Controller {
        public ModelAndView handleRequest(
                HttpServletRequest request,
                HttpServletResponse response) throws Exception {
            System.out.println("接受到請求");
            return new ModelAndView("hello");
        }
    }

 

Controller組件約定的handleRequest方法執行後返回一個ModelAndView對象,該對象可封裝模型數據和視圖名響應信息。而且將HelloController配置到spring-mvc.xml, 代碼以下:服務器

 <bean id="helloController" class="com.souvc.web.HelloController"/>

 

6. 配置視圖解析器ViewResolver。全部Controller組件都返回一個ModelAndView實例,封裝了視圖名。 Spring中的視圖以名字爲標識,視圖解析器ViewResolver經過名字來解析視圖。 InternalResourceViewResolver使用示例代碼以下:mvc

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.
    InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/> 
        <property name="suffix" value=".jsp"/> 
    </bean> 

 

 

1.3 步驟

步驟一: 新建web工程,並配置Spring-MVC ,並導入相關jar包。app

 

http://yunpan.cn/cQwC6VXRtPjG7  訪問密碼 11a6

 

2. 在src下添加Spring Web MVC的XML配置文件,文件名爲spring-mvc.xml。

代碼以下所示:

<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jdbc="http://www.springframework.org/schema/jdbc"
        xmlns:jee="http://www.springframework.org/schema/jee"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
        xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
            http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd" >

</beans>

 

3. 在web.xml中配置DispatcherServlet前端控制器組件

代碼以下所示:

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <!-- 指定Spring的配置文件 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

 

4. 部署項目到Tomcat中, 而且啓動Tomcat,控制檯輸出:

舒適提示,xml 文件須要頂格,否則會報錯。

 

將 <?xml version="1.0" encoding="UTF-8"?> 頭部的空格刪除掉,那麼從新啓動。

輸出結果分析:輸出結果中包含Spring MVC 初始化信息以及加載配置文件spring-mvc.xml的信息。這個結果說明Spring MVC配置正確成功。若是有異常輸出就要檢查配置文件是否正確。

 

步驟二:配置Spring HandlerMapping 組件

1. Spring HandlerMapping用於分發Web請求到Controller的映射,這個類來自Spring MVC API, 只須要配置到Spring中便可。修改spring-mvc.xml添加HandlerMapping配置。配置代碼以下:

    <!-- 定義請求處理映射HandlerMapping -->
    <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <!-- 指定請求和Controller對應關係 -->
        <property name="mappings" ref="urlMappings" />
    </bean>
    
    <!-- 定義請求映射表 map -->
    <util:properties id="urlMappings">
        <prop key="/hello.form">helloController</prop>
    </util:properties>

 

其中HandlerMapping實現類是Spring提供的SimpleUrlHandlerMapping。SimpleUrlHandlerMapping的mappings屬性引用了id爲urlMappings的Properties集合。

2. 爲當前項目增長JUnit4 API,而且在項目中添加測試案例類TestCase。在TestCase類中添加測試方法testHandlerMapping(), 測試HandlerMapping配置結果, 測試代碼以下所示:

package com.souvc.test;
import java.util.Properties;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.servlet.HandlerMapping;
public class TestCase {
    
    /** HandlerMapping 映射測試 */
    @Test
    public void testHandlerMapping(){
        String cfg = "spring-mvc.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(cfg);
        HandlerMapping obj = ac.getBean("handlerMapping", HandlerMapping.class);
        Properties map = ac.getBean("urlMappings", Properties.class);
        System.out.println(obj); 
        System.out.println(map); 
    }
}

 

測試結果以下:

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping@62402af3
{/hello.form=helloController}

 

 

步驟三:新建控制器處理類HelloController,而且配置

1. 控制用於處理Web URL請求,負責執行具體的業務處理,控制器須要實現Controller接口,而且實現業務處理方法。控制器要返回ModelAndView對象,這個 對象表示控制處理結果選擇了那個View(JSP頁面做爲View)用於顯示。控制器實現代碼以下所示:

package com.souvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest req,
            HttpServletResponse res) throws Exception {
        System.out.println("處理hello.form請求");
        ModelAndView mv = new ModelAndView("hello");
        return mv;// 調用hello.jsp
    }
}

 

2. 修改spring-mvc.xml文件,將控制器HelloController配置爲一個bean。這裏要注意bean的ID要與urlMappings中的映射名字對應,以下:

 

<!-- 定義請求處理映射HandlerMapping -->
    <bean id="handlerMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <!-- 指定請求和Controller對應關係 -->
        <property name="mappings" ref="urlMappings" />
    </bean>
    
    <!-- 定義url請求映射表 map -->
    <util:properties id="urlMappings">
        <prop key="/hello.form">helloController</prop>
    </util:properties>
    
    <!-- 控制器bean配置 -->
    <bean id="helloController"
        class="com.souvc.controller.HelloController" />

 

3. 在TestCase類中添加測試方法testHelloController() 方法測試配置bean結果,測試方法代碼以下所示:

/** 控制器測試 */
    @Test
    public void testHelloController(){
        String cfg = "spring-mvc.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(cfg);
        Controller obj = ac.getBean("helloController", Controller.class);
        System.out.println(obj); 
    }

 

4. 執行測試方法,執行結果

信息: Loading XML bean definitions from class path resource [spring-mvc.xml]
2015-8-29 15:12:24 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@e4865ce: defining beans [handlerMapping,urlMappings,helloController,viewResolver]; root of factory hierarchy
2015-8-29 15:12:24 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
信息: Mapped URL path [/hello.form] onto handler 'helloController'
com.souvc.controller.HelloController@44908881

 

若是配置正確,將在控制檯輸出helloController對象。

步驟四:添加ViewResolver組件配置

1. 在spring-mvc.xml文件中增長ViewResolver組件的配置,ViewResolver用於視圖的顯示結果處理。代碼以下所示:

<!-- 定義視圖解析器ViewResolver -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

 

2. 在TestCase類中增長testViewResolver()方法,用於測試ViewReolver的配置結果, 測試方法代碼以下所示:

 /** 測試ViewResolver配置 */
    @Test
    public void testViewResolver(){
        String cfg = "spring-mvc.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(cfg);
        ViewResolver obj = ac.getBean("viewResolver", ViewResolver.class);
        System.out.println("OK"+obj);
    }

測試結果以下:OKorg.springframework.web.servlet.view.InternalResourceViewResolver@39697b67

 

若是配置正確,將在控制檯輸出viewResolver對象。

步驟五:新建視圖組件hello.jsp

在viewResolver聲明的前綴文件夾/WEB-INF/jsp中, 建立hello.jsp頁面。JSP代碼以下:

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<!DOCTYPE html>
<html>
    <head>
        <title>Spring Hello World!</title>
    </head>
    <body>
        歡迎進入Spring Web MVC世界!
    </body>
</html>

 

步驟六:測試Spring MVC流程

部署SpringMVC項目到Tomcat6中,在瀏覽器地址欄中輸入URL 「http://localhost:8080/工程名/hello.form」發起請求,會獲得結果如圖-7所示:

提示:發現仍是會報404錯誤。能夠查看一下是不是 是 /WEB-INF/jsp/ 目錄不對,而且文件名字大小寫要正確。

 

小結:

1. 瀏覽器向Tomcat6服務器發起Web請求「hello.form」。

2. Tomcat6 會根據web.xml的配置將 「hello.form」請求交給Spring核心控制器DispatcherServlet處理。

3. DispatcherServlet根據HandlerMapping中的urlMappings將"/hello.form"請求轉給helloController處理。

4. helloController執行handlerRequest()方法,處理請求,而且返回ModelAndView對象表明處理結果, ModelAndView對象中包含了目標視圖「hello」。

5. Spring核心控制器收到ModelAndView中包含的視圖「hello」。

6. Spring核心控制器利用ViewResolver中的先後綴應用「hello」到/WEB-INF/jsp/hello.jsp文件。

7. 執行hello.jsp 做爲響應結果發送到瀏覽器。

8. 瀏覽器收到hello.jsp的執行結果: 歡迎進入Spring Web MVC世界!

相關文章
相關標籤/搜索