天天看點

SpringMVC(一)——流程架構總體介紹

          SpringMVC屬于SpringFrameWork的後續産品,已經融合在Spring Web Flow裡面。Spring 架構提供了建構 Web 應用程式的全功能MVC 子產品,其功能和Strtus2,Struts1是類似的,隻不過是實作的原理不同而已。其中Struts2是通過過濾器來實作路勁和action的映射等控制流轉功能,而Struts1和SpringMVC則是通過最傳統的servlet來實作對其代碼封裝的。但是都是非常相似的MVC流程架構。簡單看一下SpringMVC架構中的知識點,這裡是從資料的流轉前後順序進行分的:

SpringMVC(一)——流程架構總體介紹

            一,SpringMVC是一個MVC的流程架構,同樣适用在我們的表現層到action子產品中,是MVC架構模式中真正的Controller。SpringMVC在流程處理方面更加靈活,可以很容易的進行擴充,可以和Spring架構進行無縫內建,畢竟是一家公司生産的,就是為了解決web開發問題,增加競争性。但是SpringMVC有侵入性,action需要繼承架構指定的類,或者實作指定的接口。

          二,看一個它實作的原理圖吧:

SpringMVC(一)——流程架構總體介紹

         和Struts2還是很相似的,有一個核心過濾器Dispatcher,和核心配置檔案springMVC-servlet.xml,通過過濾做一些固定的任務,到達指定的action進行相關業務的操作。看網上一篇文章吧,寫的挺詳細的:spring MVC原理

三,初步使用:

           1,由于SpringMVC是繼Spring後續開發的,它利用了Spring的jar包,這裡看一下需要導入的jar包:

commons-logging.jar(日志輸出)

spring-webmvc.jar(SpringMVC核心包)

spring.jar        (Spring核心包)

           2,編寫springMVC-servlet.xml檔案,存放到/WEB-INF/目錄下,基本編寫如下:

<?xml version="1.0" encoding="UTF-8" ?>
				<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
				
				<beans>
					<!-- VIEW DEFINITIONS ,視圖解析器,架構提供了好多解析器,這裡舉例其中的一種-->
					<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
						<property name="prefix" value="/WEB-INF/jsp/spring/"/>
						<property name="suffix" value=".jsp"/>
					</bean>
				
					<!-- DEFINITIONS OF PUBLIC CONTROLLERS ,映射解析器-->
					<bean id="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
				</beans>
				<!-- 控制器類,name表示通路的URI路徑,class表示對應的action類 -->
				<bean name="/hello.html" class="com.ljh.springmvc.controller.HelloWorldController"></bean>
           

            3 ,在web.xml中增加對springMVC架構的支援,其實就是增加SpringMVC架構核心過濾器的servlet的配置:

<!-- SpringMVC的核心控制器(前端控制器) -->
		<servlet>
			<servlet-name>springMVC</servlet-name>
			<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
			<init-param>
			<!-- 指定配置檔案的全名,如果不指定,則為這裡的servlet-name的屬性SpringMVC+"-servlet.xml" -->
				<param-name>contextConfigLocation</param-name>
				<param-value>/WEB-INF/springMVC-servlet.xml</param-value>
			</init-param>		
			<!-- 啟動伺服器時建立此serlvet核心對象 -->
			<load-on-startup>1</load-on-startup>
		</servlet>
		<servlet-mapping>
			<servlet-name>springMVC</servlet-name>
			<url-pattern>*.html</url-pattern>
		</servlet-mapping>
           

           4 ,此種對應的action是有侵入性的,需要實作Contronller接口,當然也可以繼承實作此接口的父類,後邊介紹到:

public class HelloWorldController implements Controller {
	
		/**
		 * 類似于Servlet的doGet(),doPost()方法
		 */
		public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
			//接收資料,這裡有request,response等,對于資料處理友善了很多
			
			//調用服務層。
			
			//判斷傳回結果
			
			//ModelAndView用于表示視圖:給予視圖層檔案的名稱。(根據架構的視圖解析器,增加字首,和字尾,查找配置資源。)
			//ModelAndView也可以表示模型對象,将資料傳遞給視圖層。(預設情況下是采用轉發方式進行跳轉。)
			return new ModelAndView("success","username","zhangsan");  //   /WEB-INF/jsp/spring/ +  success  + .jsp
		}
	
	}
           

        這樣基本架構實作就算完成了,很多架構的搭建都是這些步驟,隻不過需要我們注意其中的細節,配置檔案的編寫等等。

        SpringMVC的總體認識就是這些,後邊會總結其中的一些知識點,這裡不再贅述!通過和Struts2對比着學習,來尋找一些異同,通過實踐來使自己了解的更加深刻。