Spring MVC簡介

Spring MVC簡介html

Spring MVC框架是有一個MVC框架,經過實現Model-View-Controller模式來很好地將數據、業務與展示進行分離。從這樣一個角度來講,Spring MVC和Struts、Struts2很是相似。Spring MVC的設計是圍繞DispatcherServlet展開的,DispatcherServlet負責將請求派發到特定的handler。經過可配置的handler mappings、view resolution、locale以及theme resolution來處理請求而且轉到對應的視圖。Spring MVC請求處理的總體流程如圖:java

mvc

Spring3.x中定義一個控制器類,必須以@Controller註解標記。當控制器類接收到一個請求時,它會在本身內部尋找一個合適的處理方法來處理請求。使用@RequestMapping註解將方法映射到一些請求上,以便讓該方法處理那些請求。這種方法就像通常的類中的方法,方法名參數列表和返回值並不像Struts2之類的框架有很強的限制。方法參數列表具體以及返回值具體都有哪些,這裏先不細說。這篇博客的目的在於簡單介紹如何快速上手使用Spring MVC框架。web

控制器在選擇好適合處理請求的方法時,傳入收到的請求(根據方法參數類型,可能以不一樣的類型傳入),而且調用該方法中的邏輯來進行處理(也能夠是調用Service來真正處理)。方法邏輯可能也會在參數中添加或者刪除數據。處理方法處理完以後,會委派給一個視圖,由該視圖來處理方法的返回值。處理程序的返回值並不表明視圖的具體實現,能夠只是String類型,表明視圖名,甚至是void(這時候Spring MVC能夠根據方法名或者控制器名找默認視圖)。也不須要擔憂返回值只是視圖名稱的話,視圖拿不到要顯示的數據。由於方法參數對於視圖來講也是能夠拿到的。好比說,若是處理方法以Map爲參數,那麼這個Map對於視圖也是能夠拿到的。spring

返回的視圖名稱會返回給DispatcherServlet,它會根據一個視圖解析器將視圖名稱解析爲一個具體的視圖實現。這裏說到的視圖解析器是一個實現了ViewResolver藉口的Bean,它的任務就是返回一個視圖的具體實現(HTML、JSP、PDF等等).spring-mvc

2.Spring MVC版本的helloworldmvc

接下來咱們用Spring MVC開發一個最最簡單的Web應用。首先建立一個Dynamic Web Project。爲了方便起見,咱們將Spring dist目錄下的全部jar包放到WEB-INF/lib目錄下。這裏我是用的是Spring3.1.x版本。此外還須要添加commons-logging包。app

接下來在web.xml文件中配置DispatcherServlet,在web.xml文件中添加以下片斷:框架

1
2
3
4
5
6
7
8
9
10
11
< servlet >
     < servlet-name >hello</ servlet-name >
     < servlet-class >
         org.springframework.web.servlet.DispatcherServlet
     </ servlet-class >
     < load-on-startup >1</ load-on-startup >
</ servlet >
< servlet-mapping >
     < servlet-name >hello</ servlet-name >
     < url-pattern >/</ url-pattern >
</ servlet-mapping >

這裏咱們將DispatcherServlet命名爲hello,而且讓它在web項目一啓動就加載。接下來咱們須要在WEB-INF目錄下建立一個hello-servlet.xml的Spring配置文件。Spring官方文檔上推薦的默認的文件名是[servlet-name]-servlet.xml文件,這裏servlet-name叫hello,所以,這個文件也就是叫hello-servlet.xml。在這個文件中能夠定義各類各樣的Spring MVC須要使用的Bean。須要說明的是,對於整個Web項目中的Spring配置文件中定義的Bean在這個配置文件中是能夠繼承的,反過來不成立。上面咱們將全部的請求都交給DispatcherServlet。jsp

如今咱們定義一個控制器類HelloController:post

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package  springmvc.controller;
 
import  org.springframework.stereotype.Controller;
import  org.springframework.ui.Model;
import  org.springframework.web.bind.annotation.RequestMapping;
import  org.springframework.web.bind.annotation.RequestMethod;
 
@Controller
public  class HelloController {
     
     @RequestMapping (value= "/hello" ,method=RequestMethod.GET)
     public  String sayHello(Model model) {
         model.addAttribute( "msg" , "Hello, World!" );
         return  "hello";
     }
}

首先經過@Controller註解標示這個類是一個控制器,接下來經過@RequestMapping註解爲制定方法sayHello處理哪些請求,在這個例子中,sayHello方法僅僅處理GET類型的/hello請求。

sayHello方法接收一個org.springframework.ui.Model類型的參數model,SpringMVC會自動將請求參數封裝進model中,咱們能夠簡單的把model理解爲一個Map。咱們在方法中從model中取出參數person的值而且打印出來,接下來往model中添加一個屬性msg,值爲"Hello,World!",而後返回視圖名稱hello。

接下來咱們須要在Spring MVC配置文件中配置一個視圖解析器,咱們看看hello-servlet.xml的內容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<? xml  version="1.0" encoding="UTF-8"?>
     xsi:schemaLocation="
 
     <!-- 默認的註解映射的支持 -->
     < mvc:annotation-driven  />
     <!--啓用自動掃描  -->
     < context:component-scan  base-package="springmvc.controller" />
     < bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         < property  name="prefix" value="/WEB-INF/jsp/" />
         < property  name="suffix" value=".jsp" />
     </ bean >
</ beans >

前面沒什麼好說的,可是注意添加了mvc名稱空間,接下來啓用了spring的自動掃描,而且設置了默認的註解映射支持。這裏須要重點解釋的是配置文件中的那個bean。它的類型是是Spring MVC中最經常使用的一種視圖解析器,固然還有不少其餘的類型,因爲這篇博客的重點在於簡單的介紹Spring MVC,所以不重點介紹,後續博文會補充。prefix屬性是指視圖前綴,suffix是視圖後綴,這裏配置的是.jsp,咱們在控制器的方法sayHello中返回的是hello,再結合這裏的配置,對應的完整的視圖是:/WEB-INF/jsp/hello.jsp。接下來咱們完成這個視圖,咱們只是簡單的取出咱們放的信息msg:

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
<! 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=UTF-8">
< title >hello.jsp</ title >
</ head >
< body >
     ${msg}
</ body >
</ html >

接下來部署應用,咱們訪問http://localhost:8080/springmvc/hello ,會顯示視圖的內容,而且取出了msg的內容:

image

就這樣一個簡單的Spring MVC的Web應用就ok了。

author:wawlian save me from myself
相關文章
相關標籤/搜索