第一個SpringMVC

一、SpringMVC概述與基本原理

    Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發,Spring Web MVC也是要簡化我們日常Web開發的。

另外還有一種基於組件的、事件驅動的Web框架在此就不介紹了,如Tapestry、JSF等。

      Spring Web MVC也是服務到工作者模式的實現,但進行可優化。前端控制器是DispatcherServlet;應用控制器其實拆爲處理器映射器(Handler Mapping)進行處理器管理和視圖解析器(View Resolver)進行視圖管理;頁面控制器/動作/處理器爲Controller接口(僅包含ModelAndView handleRequest(request, response) 方法)的實現(也可以是任何的POJO類);支持本地化(Locale)解析、主題(Theme)解析及文件上傳等;提供了非常靈活的數據驗證、格式化和數據綁定機制;提供了強大的約定大於配置(慣例優先原則)的契約式編程支持。

    在Spring的Web MVC框架提供了模型 - 視圖 - 控制器架構以及可用於開發靈活,鬆散耦合的Web應用程序準備的組件。 MVC模式會導致分離的應用程序(輸入邏輯,業務邏輯和UI邏輯)的不同方面,同時提供這些元素之間的鬆耦合。

模型(Model )封裝了應用程序的數據和一般他們會組成的POJO。

視圖(View)是負責呈現模型數據和一般它生成的HTML輸出,客戶端的瀏覽器能夠解釋。

控制器(Controller )負責處理用戶的請求,並建立適當的模型,並把它傳遞給視圖渲染。

1.1、DispatcherServlet

Spring的web模型 - 視圖 - 控制器(MVC)框架是圍繞着處理所有的HTTP請求和響應的DispatcherServlet的設計。 Spring的Web MVC框架的DispatcherServlet的請求處理流程說明如下圖:
這裏寫圖片描述
下面是對應於傳入的HTTP請求到DispatcherServlet的事件序列:
1、接收HTTP請求後,DispatcherServlet 諮詢 HandlerMapping 來調用相應的控制器。
2、該控制器接受請求並調用基於使用GET或POST方法相應的服務方法。服務方法將基於定義的業務邏輯設置模型數據,並返回視圖名到DispatcherServlet。
3、DispatcherServlet將需要幫助的ViewResolver從拾取到該請求所定義的視圖。
4、一旦視圖被敲定,DispatcherServlet會傳遞模型數據是在瀏覽器上最終呈現的視圖。
所有上述部件,即HandlerMapping,控制器和視圖解析器WebApplicationContext 部分是純的 ApplicationContext 必要的 Web應用程序的一些額外的功能擴展。
1.2、所需配置

你需要映射所需的DispatcherServlet處理,通過在web.xml文件中使用URL映射請求。下面是一個例子,說明聲明和映射 HelloWeb DispatcherServlet 的例子:

    <?xml version="1.0" encoding="UTF-8"?>  
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
        id="WebApp_ID" version="3.0">  
        <!-- SpringMVC的前端控制器 -->  
        <servlet>  
            <servlet-name>Hello</servlet-name>  
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
            <load-on-startup>1</load-on-startup>  
        </servlet>  
        <!-- Spring MVC配置文件結束 -->  

        <!-- 攔截設置 -->  
        <servlet-mapping>  
            <servlet-name>Hello</servlet-name>  
            <!-- 由SpringMVC攔截所有請求 -->  
            <url-pattern>/</url-pattern>  
        </servlet-mapping>  

    </web-app>  

web.xml 文件將被保存在您的Web應用程序的 WebContent/ WEB-INF 目錄。 在 DispatcherServlet 的 HelloWeb 初始化,該框架將嘗試從一個名爲 [servlet-name]-servlet.xml位於應用程序 WebContent/WEB-INF 目錄文件加載應用程序上下文。在這種情況下我們的文件將是HelloWeb-servlet.xml。

接下來,標記指示URL會被DispatcherServlet處理。這裏全部用。jsp結束HTTP請求將由DispatcherServlet的HelloWeb處理。如果不想用默認文件名爲[servlet-name]-servlet.xml和默認位置的WebContent/WEB-INF。 在 web.xml 文件中定義該文件的名稱和位置如下:

    <?xml version="1.0" encoding="UTF-8"?>  
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
        id="WebApp_ID" version="3.0">  
        <!-- SpringMVC的前端控制器 -->  
        <servlet>  
            <servlet-name>Hello</servlet-name>  
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
            <!-- 設置自己定義的控制器xml文件 -->  
            <init-param>  
                <param-name>contextConfigLocation</param-name>  
                <param-value>/WEB-INF/Hello-servlet.xml</param-value>  
            </init-param>  
            <load-on-startup>1</load-on-startup>  
        </servlet>  
        <!-- Spring MVC配置文件結束 -->  

        <!-- 攔截設置 -->  
        <servlet-mapping>  
            <servlet-name>Hello</servlet-name>  
            <!-- 由SpringMVC攔截所有請求 -->  
            <url-pattern>/</url-pattern>  
        </servlet-mapping>  
    </web-app>  

現在,讓我們檢查所需配置的HelloWeb-servlet.xml文件,放置在 Web應用程序的WebContent/WEB-INF目錄:
下面是有關 Hello-servlet.xml 文件的要點:

    <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:context="http://www.springframework.org/schema/context"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
        xsi:schemaLocation="    
            http://www.springframework.org/schema/mvc   
            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
            http://www.springframework.org/schema/beans         
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
            http://www.springframework.org/schema/context     
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
        <!-- 把標記了@Controller註解的類轉換爲bean -->  
        <context:component-scan base-package="com.mucfc" />  
        <!-- 啓動Spring MVC的註解功能,完成請求和註解POJO的映射 -->  
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />  
        <!-- 對模型視圖名稱的解析,即在模型視圖名稱添加前後綴 -->  
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"  
            p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>  

    </beans> 

1、[servlet-name]-servlet.xml 文件將被用於創建定義的Bean,會覆蓋在全局範圍里名字相同的Bean的定義。
2、

    package com.mucfc;  
    import org.springframework.stereotype.Controller;    
    import org.springframework.ui.ModelMap;    
    import org.springframework.web.bind.annotation.RequestMapping;    
    import org.springframework.web.bind.annotation.RequestMethod;    
    @Controller    
    public class HelloWorldController {    
        @RequestMapping(value="/hello")    
        public String printWelcome(ModelMap model) {    
            model.addAttribute("message", "Spring 3 MVC Hello World");    
            return "hello";    
        }    
    }  

value屬性指示該處理方法所映射到的URL和method屬性定義了服務的方法來處理HTTP GET請求。有以下重要點要注意關於上述定義的控制器:
1、將定義所需的業務邏輯內部的服務方法。可以調用此方法在另一個方法按要求。
2、 基於定義的業務邏輯,將在此方法中創建一個模型。您可以設定器不同的模型的屬性和這些屬性將被視圖訪問提出的最終結果。此示例創建一個具有自己的屬性“message”的模型。
3、定義的服務方法可以返回一個字符串,其中包含要用於渲染模型視圖的名稱。這個例子返回“hello”作爲邏輯視圖名。

1.4、創建JSP視圖
Spring MVC支持多種類型的視圖不同的演示技術。這些措施包括:JSP,HTML,PDF,Excel,XML,Velocity,XSLT,JSON,Atom和RSS訂閱,JasperReports等,但最常用JSTL JSP模板。因此,我們編寫一個/WEB-INF/hello/hello.jsp簡單的hello 視圖:
在這裏, ${message}是我們已經建立了控制器內部的屬性。你可以在視圖中顯示多個屬性。

    <%@ page language="java" contentType="text/html; charset=gb2312"  
        pageEncoding="gb2312"%>  
    <!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=gb2312">  
    <title>Insert title here</title>  
    </head>  
    <body>  
    Message:${message}  
    </body>  
    </html>  

**

二、第一個SpringMVC程序

**
1、在ecliose中新建立一個web工程,首先將需要的包導入到\WebContent\WEB-INF\lib
這裏寫圖片描述

2、先配置web.xml

    <?xml version="1.0" encoding="UTF-8"?>  
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
        id="WebApp_ID" version="3.0">  
        <!-- SpringMVC的前端控制器 -->  
        <servlet>  
            <servlet-name>Hello</servlet-name>  
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
            <!-- 設置自己定義的控制器xml文件 -->  
            <init-param>  
                <param-name>contextConfigLocation</param-name>  
                <param-value>/WEB-INF/Hello-servlet.xml</param-value>  
            </init-param>  
            <load-on-startup>1</load-on-startup>  
        </servlet>  
        <!-- Spring MVC配置文件結束 -->  

        <!-- 攔截設置 -->  
        <servlet-mapping>  
            <servlet-name>Hello</servlet-name>  
            <!-- 由SpringMVC攔截所有請求 -->  
            <url-pattern>/</url-pattern>  
        </servlet-mapping>  

    </web-app>  

3、配置Hello-servlet.xml:

beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="    
        http://www.springframework.org/schema/mvc   
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
        http://www.springframework.org/schema/beans         
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
        http://www.springframework.org/schema/context     
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
    <!-- 把標記了@Controller註解的類轉換爲bean -->  
    <context:component-scan base-package="com.mucfc" />  
    <!-- 啓動Spring MVC的註解功能,完成請求和註解POJO的映射 -->  
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />  
    <!-- 對模型視圖名稱的解析,即在模型視圖名稱添加前後綴 -->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"  
        p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>  

</beans>  

4、配置控制器:

    package com.mucfc;  

    import org.springframework.stereotype.Controller;    
    import org.springframework.ui.ModelMap;    
    import org.springframework.web.bind.annotation.RequestMapping;    
    import org.springframework.web.bind.annotation.RequestMethod;    
    @Controller    
    public class HelloWorldController {    
        @RequestMapping(value="/hello",method=RequestMethod.GET,params="userid")    
        public String printWelcome(ModelMap model,String userid) {    
            model.addAttribute("message", "Spring 3 MVC Hello World");    
            return "hello";    
        }    
    }  

5、WEB-INF下新建一個views文件夾,然後再新建一個hello.jsp

    <%@ page language="java" contentType="text/html; charset=gb2312"  
        pageEncoding="gb2312"%>  
    <!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=gb2312">  
    <title>Insert title here</title>  
    </head>  
    <body>  
    Message:${message}  
    </body>  
    </html>  

6、整個工程目錄如下:
這裏寫圖片描述
7、直接運行,瀏覽器中輸入 http://localhost:8080/SpringMVCLearningChapter1/hello
結果如下:
這裏寫圖片描述

轉自http://blog.csdn.net/evankaka

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章