(注意:對原始帖子進行了少量編輯以提高可讀性)
Spring MVC使用基于模型視圖控制器體系結構(MVC)模式的框架,可以輕松進行Web應用程序開發。 MVC架構模式要求將用戶界面(視圖),正在處理的數據(模型)和管理視圖與模型之間的交互的控制器分開。
Spring MVC的核心是Servlet,即DispatcherServlet ,它處理每個請求。 DispatcherServlet將HTTP請求路由到應用程序開發人員創建的Controller類。 控制器類處理請求,并確定應將哪個視圖作為響應的一部分顯示給用戶。
讓我們開發一個簡單的Web應用程序,該應用程序接收請求并將一些數據發送回用戶。 在繼續進行任何操作之前,建議您從此處下載源代碼。
對于本教程,您還需要:
1.像Tomcat這樣的servlet容器
2. Spring3.0
3. Eclipse是可選的。 我使用eclipse作為我的IDE。 Eclipse使您可以導出可以部署到Tomcat的戰爭。 但是您也可以使用其他IDE或命令行工具。 4.需要對JSP和Servlet有一定的了解。
步驟1:如果要在J2EE中開發Web應用程序,通常可以通過開發打包在.war文件中的servlet和/或JSP來實現。 還需要包含配置元數據的部署描述符web.xml。 這場戰爭被部署到了像Tomcat這樣的應用服務器上。
使用Spring,首先要做的是通過將org.springframework.web.servlet.DispatcherServlet定義為該應用程序的Servlet類,將Spring連接到此J2EE Web基礎結構。 您還需要將org.springframework.web.context.ContextLoaderListener定義為偵聽器。 ContextLoaderListener負責加載具有Spring元數據的特定于Spring的應用程序上下文。
web.xml設置確保servlet引擎將對應用程序的每個請求都路由到DipatcherServlet 。 更新為web.xml如下所示:
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.htm</url-pattern>
</servlet-mapping>
步驟2:此Web應用程序中的繁重工作由控制器類完成。 這是擴展org.springframework.web.servlet.mvc.AbstractController的普通Java類或bean。 我們重寫handleRequestInternal方法。 在這種方法中,您將做一些處理請求的必要工作,其中可能包括例如從數據庫中讀取數據。
該方法返回一個org.springframework.web.servlet.ModelAndView對象,該對象封裝了視圖的名稱以及該視圖需要顯示的任何數據(模型)。 ModelAndView將數據作為名稱值對保存。此數據稍后可用于視圖。 如果視圖是jsp,則可以使用jstl技術或直接查詢Request對象來訪問數據。 我們的控制器的代碼如下所示:
public class SpringMVCController extends AbstractController {protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) {ModelAndView mview = new ModelAndView("springmvc") ;mview.addObject("greeting", "Greetings from SpringMVC") ;mview.addObject("member1", new Member("Jonh","Doe", "1234 Main St","Pleasanton","94588","kh@gmail.com","1234")) ;return mview ;}
}
視圖springmvc的名稱將傳遞到ModelAndView的構造函數中。 addObject方法調用將添加2個模型對象,即“ greeting”和“ member1”。 稍后,您將看到視圖如何檢索對象并顯示它們。
步驟3:每個Spring應用程序都需要元數據來定義Bean及其依賴項。 對于此應用程序,我們創建一個springmvc-servlet.xml。 我們通過在web.xml中指定其位置來幫助spring找到它。
<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</context-param>
在springmvc-servlet.xml中,控制器bean定義為:
<bean name="/*.htm" class="com.mj.spring.mvc.SpringMVCController"/>
步驟4: DispatcherServlet如何知道哪個控制器應該處理請求?
Spring使用處理程序映射將控制器與請求相關聯。 2個常用的處理程序映射是BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping 。
在BeanNameUrlHandlerMapping中 ,當請求URL與bean的名稱匹配時,bean定義中的類就是將處理請求的控制器。
在我們的示例中,我們使用BeanNameUrlHandlerMapping,如下所示。 每個以.htm結尾的請求url由SpringMVCController處理。
<bean name="/*.htm" class="com.mj.spring.mvc.SpringMVCController"/>
在SimpleUrlHandlerMapping中,映射更加明確。 您可以指定許多URL,并且每個URL都可以與控制器明確關聯。
步驟5: DispatcherServlet如何知道作為響應返回什么?
如前所述,控制器的handleRequestInternal方法返回ModelAndView對象。
在上面顯示的控制器代碼中,視圖“ springmvc”的名稱在ModelAndView的構造函數中傳遞。 至此,我們剛剛給出了視圖的名稱。 我們沒有說什么文件,類或工件有助于產生html,也沒有說使用的視圖技術是JSP還是速度模板還是XSLT。 為此,您需要一個ViewResolver ,它提供視圖名稱和具體視圖之間的映射。 Spring使您可以使用許多不同的技術來生成具體視圖,但是對于本示例,我們將使用JSP。
Spring提供了一個支持JSP的InternalResourceViewResolver類,并且springmvc-servlet.xml中的以下聲明告訴spring我們正在使用此解析器。 在視圖名稱中添加了前綴和后綴,以生成呈現視圖的jsp文件的路徑。
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"></property><property name="suffix" value=".jsp"></property>
</bean>
步驟6:在此示例中,視圖解析為springmvc.jsp,該視圖使用JSTL獲取并顯示數據。 Spring使JSP可以將模型對象“ greeting”和“ member1”用作請求范圍對象。 出于教育目的,下面的代碼也直接從請求中獲取對象。
// Using JSTL to get the model data
${greeting}
${member1.lastname// Using java to get the model directly from the request
Map props = request.getParameterMap() ;
System.out.println("PARAMS =" + props) ;
Enumeration em = request.getAttributeNames() ;
while (em.hasMoreElements()) {String name = (String) em.nextElement() ;System.out.println("name = "+name) ;
}
System.out.println("Attrs are "+request.getAttributeNames()) ;
System.out.println("greeting is "+ request.getAttribute("greeting")) ;
Member m = (Member)request.getAttribute("member1") ;
System.out.println("member is "+m.toString()) ;
步驟7:到目前為止,我們開發的所有文件都應打包到war文件中,就像在任何Web應用程序中一樣。 通過復制到tomcat_install \ webapps,可以將戰爭部署到tomcat。 我發動了一場戰爭,您可以在這里下載。
步驟8:將您的Web瀏覽器指向http:// localhost:8080 / springmvc / test.htm以運行該應用程序。 瀏覽器應顯示數據。
總而言之,Spring通過提供可以輕松組裝的構建塊來簡化Web應用程序的開發。 我們使用Spring MVC構建了一個Web應用程序。 Spring提供了一種簡單的方法來將我們的模型,控制器SpringMVCController和視圖springmvc.jsp連接在一起。 我們不必顯式地編寫任何請求/響應處理邏輯。 通過更改springmvc-servlet.xml中的元數據,您可以切換到其他控制器或其他視圖技術。
沒錯 ,我們的JCG合作伙伴 Manoj Khangaonkar 提供了使用Spring開發Web應用程序的簡單指南。 您可以在此處找到為本教程創建的源代碼。 別忘了分享!
相關文章:
- JBoss 4.2.x Spring 3 JPA Hibernate教程
- 使用Spring將POJO公開為JMX MBean
- Spring3 RESTful Web服務
- 帶有Spring和Maven教程的JAX–WS
- 使用Spring Security保護GWT應用程序
- 使用Spring AspectJ和Maven進行面向方面的編程
- Spring MVC攔截器示例
- 在Spring容器中聲明bean
- 使用Spring發送電子郵件
翻譯自: https://www.javacodegeeks.com/2011/02/spring-mvc-development-tutorial.html