javascript
Spring MVC概述
Spring MVC框架是一個(gè)開源的Java平臺(tái),為開發(fā)強(qiáng)大的基于Java的Web應(yīng)用程序提供全面的基礎(chǔ)架構(gòu)支持非常容易和非常快速。
Spring框架最初由Rod Johnson撰寫,并于2003年6月根據(jù)Apache 2.0許可證首次發(fā)布。
本教程是基于2015年3月發(fā)布的Spring Framework版本4.1.6編寫的。
Spring web MVC框架提供了MVC(模型 - 視圖 - 控制器)架構(gòu)和用于開發(fā)靈活和松散耦合的Web應(yīng)用程序的組件。?MVC模式導(dǎo)致應(yīng)用程序的不同方面(輸入邏輯,業(yè)務(wù)邏輯和UI邏輯)分離,同時(shí)提供這些元素之間的松散耦合。
- 模型(Model)封裝了應(yīng)用程序數(shù)據(jù),通常它們將由POJO類組成。
- 視圖(View)負(fù)責(zé)渲染模型數(shù)據(jù),一般來說它生成客戶端瀏覽器可以解釋HTML輸出。
- 控制器(Controller)負(fù)責(zé)處理用戶請(qǐng)求并構(gòu)建適當(dāng)?shù)哪P?#xff0c;并將其傳遞給視圖進(jìn)行渲染。
DispatcherServlet組件類
Spring Web模型 - 視圖 - 控制器(MVC)框架是圍繞DispatcherServlet設(shè)計(jì)的,它處理所有的HTTP請(qǐng)求和響應(yīng)。?Spring Web MVC DispatcherServlet的請(qǐng)求處理工作流如下圖所示:
以下是對(duì)應(yīng)于到DispatcherServlet的傳入HTTP請(qǐng)求的事件順序:
- 在接收到HTTP請(qǐng)求后,DispatcherServlet會(huì)查詢HandlerMapping以調(diào)用相應(yīng)的Controller。
- Controller接受請(qǐng)求并根據(jù)使用的GET或POST方法調(diào)用相應(yīng)的服務(wù)方法。 服務(wù)方法將基于定義的業(yè)務(wù)邏輯設(shè)置模型數(shù)據(jù),并將視圖名稱返回給DispatcherServlet。
- DispatcherServlet將從ViewResolver獲取請(qǐng)求的定義視圖。
- 當(dāng)視圖完成,DispatcherServlet將模型數(shù)據(jù)傳遞到最終的視圖,并在瀏覽器上呈現(xiàn)。
所有上述組件,即:?HandlerMapping,Controller和ViewResolver是WebApplicationContext的一部分,它是普通ApplicationContext的擴(kuò)展,帶有Web應(yīng)用程序所需的一些額外功能。
必需的配置
需要通過使用web.xml文件中的URL映射來映射希望DispatcherServlet處理的請(qǐng)求。 下面是一個(gè)示例來顯示HelloWeb DispatcherServlet示例的聲明和映射:
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Application</display-name> <servlet> <servlet-name>HelloWeb</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloWeb</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping> </web-app> XMLweb.xml文件將保存Web應(yīng)用程序的WebContent/WEB-INF目錄。在HelloWeb DispatcherServlet初始化時(shí),框架將嘗試從位于應(yīng)用程序的WebContent/WEB-INF目錄中的名為[servlet-name]-servlet.xml的文件加載應(yīng)用程序上下文。在這個(gè)示例中,使用的文件將是HelloWeb-servlet.xml。
接下來,<servlet-mapping>標(biāo)記指示哪些URL將由DispatcherServlet處理。 這里所有以.jsp結(jié)尾的HTTP請(qǐng)求都將由HelloWeb DispatcherServlet處理。
如果不想使用默認(rèn)文件名為[servlet-name]-servlet.xml和默認(rèn)位置為WebContent/WEB-INF,可以通過在web.xml文件中添加servlet偵聽器ContextLoaderListener來自定義此文件名和位置 如下:
<web-app...> <!-------- DispatcherServlet definition goes here-----> .... <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/HelloWeb-servlet.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app> Java現(xiàn)在來看看HelloWeb-servlet.xml文件的必需配置,放在Web應(yīng)用程序的WebContent/WEB-INF目錄中:
<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" xsi:schemaLocation=" 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"> <context:component-scan base-package="com.yiibai" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans> Java以下是有關(guān)HelloWeb-servlet.xml文件的重點(diǎn)說明:
-
[servlet-name]-servlet.xml文件將用于創(chuàng)建定義的bean,它會(huì)覆蓋在全局范圍中使用相同名稱定義的任何bean的定義。
-
<context:component-scan ...>標(biāo)簽將用于激活Spring MVC注釋掃描功能,允許使用@Controller和@RequestMapping等注釋。
-
InternalResourceViewResolver將定義用于解析視圖名稱的規(guī)則。根據(jù)上面定義的規(guī)則,hello的邏輯視圖將委托給位于/WEB-INF/jsp/hello.jsp這個(gè)視圖來實(shí)現(xiàn)。
下一節(jié)將演示如何創(chuàng)建實(shí)際組件。即:控制器,模型和視圖。
定義控制器
DispatcherServlet將請(qǐng)求委派給控制器以執(zhí)行特定于其的功能。?@Controller注釋指示特定類充當(dāng)控制器的角色。@RequestMapping注釋用于將URL映射到整個(gè)類或特定處理程序方法。
@Controller @RequestMapping("/hello") public class HelloController{ @RequestMapping(method = RequestMethod.GET) public String printHello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; } } Java@Controller注釋將類定義為Spring MVC控制器。這里@RequestMapping的第一個(gè)用法表示此控制器上的所有處理方法都與/hello路徑相關(guān)。 下一個(gè)注釋@RequestMapping(method = RequestMethod.GET)用于聲明printHello()方法作為控制器的默認(rèn)服務(wù)方法來處理HTTP GET請(qǐng)求。可以定義另一個(gè)方法來處理同一URL的任何POST請(qǐng)求。
可以以另一種形式在上面的控制器中編寫,在@RequestMapping中添加其他屬性,如下所示:
@Controller public class HelloController{ @RequestMapping(value = "/hello", method = RequestMethod.GET) public String printHello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; } } Javavalue屬性指示處理程序方法映射到的URL,method屬性定義處理HTTP GET請(qǐng)求的服務(wù)方法。關(guān)于以上定義的控制器,需要注意以下幾點(diǎn):
- 在服務(wù)方法中定義所需的業(yè)務(wù)邏輯。可以根據(jù)需要在此方法內(nèi)調(diào)用其他方法。
- 基于定義的業(yè)務(wù)邏輯,將在此方法中創(chuàng)建一個(gè)模型。可以設(shè)置不同的模型屬性,這些屬性將被視圖訪問以呈現(xiàn)最終結(jié)果。此示例創(chuàng)建且有屬性“message”的模型。
- 定義的服務(wù)方法可以返回一個(gè)String,它包含要用于渲染模型的視圖的名稱。此示例將“hello”返回為邏輯視圖名稱。
創(chuàng)建JSP視圖
Spring MVC支持許多類型的視圖用于不同的表示技術(shù)。包括 - JSP,HTML,PDF,Excel工作表,XML,Velocity模板,XSLT,JSON,Atom 和 RSS 源,JasperReports等。但最常見的是使用JSPL編寫的JSP模板,這里使用的是JSP模板,并在/WEB-INF/hello/hello.jsp中寫一個(gè)簡(jiǎn)單的hello視圖:
<html><head><title>Hello Spring MVC</title> </head> <body> <h2>${message}</h2> </body> </html> Java這里${message}是在Controller中設(shè)置的屬性。可以在視圖中顯示多個(gè)屬性。
總結(jié)
以上是生活随笔為你收集整理的Spring MVC概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是创业投资 一种私募股权投资
- 下一篇: 王子新材是干什么的