Spring MVC開發–快速教程

這是我們的JCG合作伙伴之一,來自Manoj的有關使用Spring開發Web應用程序的簡短教程, 網址為“ The Khangaonkar Report ”。

(注意:對原始帖子進行了少量編輯以提高可讀性)

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374691.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374691.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374691.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring mvc controller間跳轉 重定向 傳參

url&#xff1a;http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景 需求&#xff1a;spring MVC框架controller間跳轉&#xff0c;需重定向。有幾種情況&#xff1a;不帶參數跳轉&#xff0c;帶參數拼接url形式跳轉&#xff0c;帶參數不拼接參…

尋找數組的中心索引

給你一個整數數組 nums &#xff0c;請計算數組的 中心下標 。 數組 中心下標 是數組的一個下標&#xff0c;其左側所有元素相加的和等于右側所有元素相加的和。 如果中心下標位于數組最左端&#xff0c;那么左側數之和視為 0 &#xff0c;因為在下標的左側不存在元素。這一點…

STL sector 應用

1 #include <iostream>2 #include <string>3 #include <vector>4 #include <cstdio>5 using namespace std;6 int n;7 vector<int> pile[30];8 9 //找到a所在pile和height&#xff0c;以應用的形式返回調用者&#xff0c; 10 void find_block(in…

將Jersey與Spring整合

Spring提供了很多好處&#xff0c;并通過其依賴項注入機制&#xff0c;應用程序生命周期管理和Hibernate支持&#xff08;僅舉幾例&#xff09;促進了最佳實踐。 另外&#xff0c;當您想擁有干凈的類似于REST的服務器端JSON Api時&#xff0c;我發現Jersey非常方便。 本文簡要介…

JAVAWEB 生成excel文字在一格顯示兩位不變成#號

在用java生成excel的時候會發現這種問題&#xff0c; 如果是人家給的模板還好&#xff0c;如果不是模板&#xff0c;而是通過代碼生成的話&#xff0c; 就需要進行處理了&#xff0c; 一個小單元格&#xff0c;如果是一位的話&#xff0c;如1-9顯示沒有問題&#xff0c;一旦是兩…

力扣面試題 01.07. 旋轉矩陣

給你一幅由 N N 矩陣表示的圖像&#xff0c;其中每個像素的大小為 4 字節。請你設計一種算法&#xff0c;將圖像旋轉 90 度。 不占用額外內存空間能否做到&#xff1f; 代碼一 思路&#xff1a;對于矩陣中第 ii 行的第 jj 個元素&#xff0c;在旋轉后&#xff0c;它出現在倒數…

依賴注入–手動方式

依賴注入是一種將行為與依賴解決方案分開的技術。 用簡單的話來說&#xff0c;它允許開發人員定義具有特定功能的類&#xff0c;這些功能取決于各種協作者&#xff0c;而不必定義如何獲取對這些協作者的引用。 以此方式&#xff0c;實現了各個組件之間的解耦&#xff0c;并且通…

一個疏忽引發的思考!(strerror)

前幾天寫代碼因為自己的疏忽導致一遍又一遍的Segmentation fault (core dumped)。該問題是因為strerror&#xff08;errno&#xff09;返回的指針指向非法的內存導致程序打印錯誤時崩潰。 嘗試數次無果&#xff0c;為了進度。簡單粗暴的換成了perror(str)。今天忙里偷閑&#x…

力扣面試題 01.08. 零矩陣

編寫一種算法&#xff0c;若M N矩陣中某個元素為0&#xff0c;則將其所在的行與列清零 代碼一思路&#xff1a; 第一次遍歷時記錄&#xff0c;用兩個布爾類型數組標記行和列中是否有0元素&#xff1b; 第二次遍歷時置零 class Solution {public void setZeroes(int[][] matr…

Java最佳實踐–字符串性能和精確字符串匹配

在使用Java編程語言時&#xff0c;我們將繼續討論與建議的實踐有關的系列文章&#xff0c;我們將討論String性能調優。 我們將專注于如何有效地處理字符串創建&#xff0c; 字符串更改和字符串匹配操作。 此外&#xff0c;我們將提供我們自己的用于精確字符串匹配的最常用算法的…

mac下開發環境常用操作與命令

【1】 修改hosts文件 vim /private/etc/hosts轉載于:https://www.cnblogs.com/zsmynl/p/4714492.html

keil里面填數據

編譯后寄存器和堆棧的內存數據可以直接寫進去的。 寄存器&#xff0c;雙擊就可以&#xff0c;注意里面是十六進制 堆棧&#xff0c;也是十六進制&#xff0c;八位的 00 00 00 00 &#xff0c;但這個是從右到左的&#xff0c;比如0x00000006 應該填 06 00 00 00 把數據取出來 取…

力扣498. 對角線遍歷

給你一個大小為 m x n 的矩陣 mat &#xff0c;請以對角線遍歷的順序&#xff0c;用一個數組返回這個矩陣中的所有元素。 代碼思路&#xff1a;以第一行和右邊最后一列作為每輪的開始元素&#xff0c;先用temp存儲&#xff0c;全部按 從左上到右下 的順序遍歷&#xff0c;但是…

調試生產服務器– Eclipse和JBoss展示

您是否編寫有錯誤的代碼&#xff1f; 不&#xff0c;當然不。 對于我們其余的確實會編寫帶有錯誤的代碼的凡人&#xff0c;我想解決一個非常敏感的問題&#xff1a;調試在生產服務器上運行的應用程序。 因此&#xff0c;您的應用程序已準備好進行部署。 單元測試全部成功&…

ubuntu server獲取并自動設置最快鏡像的方法

一&#xff0c;安裝方法1 add-apt-repository ppa:ossug-hychen/getfastmirrorapt-get install getfastmirror 如果添加了臨時源&#xff0c;這樣移除add-apt-repository --remove ppa:ossug-hychen/getfastmirror 二&#xff0c;安裝方法2 wget -O getfastmirror-master.zip h…

linux之x86裁剪移植---ffmpeg的H264解碼顯示(420、422)

在虛擬機上yuv420可以正常顯示 &#xff0c;而945&#xff08;D525&#xff09;模塊上卻無法顯示 &#xff0c;后來驗證了directdraw的yuv420也無法顯示 &#xff0c;由此懷疑顯卡不支持 &#xff0c;后把420轉換為422顯示。420顯示如下&#xff1a;/* 編譯命令&#xff1a;arm…

Spring依賴注入技術的發展

回顧Spring框架的歷史&#xff0c;您會發現實現依賴注入的方式在每個發行版中都在增加。 如果您使用該框架已經超過一個月&#xff0c;那么在這篇回顧性文章中可能不會發現任何有趣的東西。 除了Scala中的最后一個示例&#xff0c;沒有其他希望&#xff0c;這種語言在Spring中意…

JS encode decode

網上查到的全都是escape&#xff0c;和需要的編碼不是一回事&#xff0c;好不容易找到的結果 保存下來以備以后使用js對文字進行編碼涉及3個函數&#xff1a;escape,encodeURI,encodeURIComponent&#xff0c;相應3個解碼函數&#xff1a;unescape,decodeURI,decodeURIComponen…

流媒體服務器 筆記

1.sip服務器回SBC Port Unreachable 說明轉碼器接收RTCP的端口沒有打開 轉載于:https://www.cnblogs.com/luoyinjie/p/7219359.html

力扣151. 翻轉字符串里的單詞

給你一個字符串 s &#xff0c;逐個翻轉字符串中的所有 單詞 。 單詞 是由非空格字符組成的字符串。s 中使用至少一個空格將字符串中的 單詞 分隔開。 請你返回一個翻轉 s 中單詞順序并用單個空格相連的字符串。 沒思路&#xff0c;看到的官方給的&#xff0c;簡潔明了&…