javascript
SpringMVC 理论与实用技术(一) 简单、实用、易懂的几个实例
SpringMVC先來看一下百度百科中的定義;
???????? Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring 框架提供了構(gòu)建 Web 應用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構(gòu),可以選擇是使用內(nèi)置的 Spring Web 框架還可以是 Struts 這樣的 Web 框架。通過策略接口,Spring 框架是高度可配置的,而且包含多種視圖技術(shù),例如 JavaServer Pages(JSP)技術(shù)、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的視圖,所以不會強迫您只使用 JSP 技術(shù)。Spring MVC 分離了控制器、模型對象、分派器以及處理程序?qū)ο蟮慕巧?#xff0c;這種分離讓它們更容易進行定制。
說一下我對上面定義的理解
????? Spring Web是一個大的框架,Spring Web Flow屬于Spring Web但是它脫離了Spring Web 屬于一個頁面流程管理模塊,在它的內(nèi)部實現(xiàn)了頁面流程控制功能即Springmvc,這樣的框架還有Struts等如果你不想使用內(nèi)置的框架,就可以使用外置的讓spring與其集成,Spring在與別的框架集成這方面做的很不錯,比如同hibernate、ibatis等等都有很好的集成實現(xiàn),在多種視圖上Spring使用策略模式實現(xiàn),上面大家了解的視圖技術(shù)主要是jsp,對于后面幾個不是很了解,
再說一下Velocity它是模板引擎,現(xiàn)在做的這個項目中使用了模板,使用的地方不是很多,在分頁的時候使用了這個技術(shù),分頁有關(guān)的上一頁、下一頁、總頁數(shù)、等這些按鈕都是在一個一個的模板里面,在模板里面又引用了Pagemodel這個類,編輯模板的時候就會用著模板引擎語法,有關(guān)這個模板代碼類似于${} JSTL表達式,有關(guān)模板實例請看這個分頁博客數(shù)據(jù)分頁模塊封裝。
HelloWorld的一個方法對應于一個Action,
????????? 首先,需要引入spring mvc 以及相關(guān)jar包,這不可以歸為一個框架必有步驟,用到哪個框架都需要引入它用到的jar包或者庫文件等,如下:
????????? 然后,建立一個HelloWorldController類并實現(xiàn)Controller接口,一般來說呢框架是越輕量級越好,如果新建一個類還需要去實現(xiàn)別的接口或者繼承別的類,會使得該類耦合很大,
package com.tgb.web.controller;import java.util.HashMap; import java.util.Map;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller;public class HelloWorldController implements Controller{@Overridepublic ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1)throws Exception {System.out.println("nihao shijie");String str="lilongsheng nihao!";Map<String, Object> map=new HashMap<String, Object>();map.put("nihao1", "nihao1");map.put("nihao2", "nihao2");map.put("nihao3", "nihao3");return new ModelAndView("/welcome","map",map);}}?????????? 除此之外還需要常用的配置文件web.xml全局文件,和springmvc-servlet.xml框架相關(guān)文件,別的框架也會有自己的配置文件
<servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:config/spring-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping>? <!-- 視圖解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"></property><property name="suffix" value=".jsp"></property></bean>???????? 效果如下
多方法對應于一個Action的配置(兩種方法繼承和注解)
?????????? 假如一個方法對應于一個Action的話是不現(xiàn)實的,開發(fā)中方法往往會特別多一個,倘若一個方法對應一個Action那需要寫很多Actin,項目會變得很輪,常常是一個一個Action里面寫很多個方法這種開發(fā)更適合,我們開發(fā)是越簡單越高效越好。
繼承方式,即是讓action類繼承一個父類,代碼如下
?????????? 另外還需要配置一個類,該類的作用是解析URL中的參數(shù),確保可以找到每個方法對應的action,看下面配置
<bean name="/test2/mutil" class="com.tgb.web.controller.MutilController"><property name="methodNameResolver"><ref bean="paramMethodResolver"></ref></property></bean><bean id="paramMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"><property name="paramName" value="action"></property></bean>?????????? 其它的配置同上面的一樣,這樣就可以完成多方法的訪問。采用注解方式
???????? 采用注解減少了action類與其它的類耦合、寫起來也覺得快了、不用像struts1/2中的每個action寫一個標簽、可見以后編程還是朝著注解方面發(fā)展,現(xiàn)在很多框架都提供了注解功能,目前我接觸過的如EJB、Web Service、JPA、Transaction、hibernate的ORM等,在提供配置文件實現(xiàn)的同時都提供了注解方式實現(xiàn),相比配置文件注解看起來就簡單多了,越來越多的注解也有一個疑問?它是怎么樣利用一個小小的注解來封裝實現(xiàn)各種功能?也就是說注解是實現(xiàn)的原理是什么?
說了這么多來看一下注解是怎么實現(xiàn)的吧。
@Controller public class UserController {@RequestMapping(value="/user/addUser",method=RequestMethod.GET)public ModelAndView addUser(){String str="this is addUser-----";return new ModelAndView("/annotation","result",str);}@RequestMapping(value="/user/delUser",method=RequestMethod.GET)public ModelAndView delUser(){String str="this is delUser-----";return new ModelAndView("/annotation","result",str);}??????????? 在action類的上面增加了一個@controller,控制器標簽,在方法上寫了一個@requestMapping()映射,這個是在URL中請求的地址,是那個servlet分發(fā)地址。??????????? 在注解配置文件里面只需要,如下三個標簽即可完成。
<!-- 注解掃描包 --><context:component-scan base-package="com.tgb.web.controller.annotation"></context:component-scan><!-- 開啟注解 --><mvc:annotation-driven/><!-- 根據(jù)掃描的包找某個類下面的方法 --><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean><!-- 根據(jù)掃描的包找下面的類 --><bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>?????????? 它的思路理解者很容易,1.注解掃描包是確定哪些包是利用注解方式訪問
???????????????????????????????????????? 2.根據(jù)包找下面的哪些類使用注解
???????????????????????????????????????? 3.根據(jù)某個類,確定里面哪些方法使用注解
??????????? 對于它的視圖解析器、注釋等很多概念原理在一邊實現(xiàn)一邊理解,同時與struts1、struts2等框架比較,容易理解,覺得她們有很多相似之后,又略有不同,他們的優(yōu)缺點還需要慢慢體會,只有在不斷實踐和開發(fā)中才會得到真正積累,對于編程這類東西,需要多動手、多思考才能進步很快。
轉(zhuǎn)載于:https://www.cnblogs.com/lilongsheng1125/p/4978526.html
總結(jié)
以上是生活随笔為你收集整理的SpringMVC 理论与实用技术(一) 简单、实用、易懂的几个实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL转换函数to_char/to_da
- 下一篇: JQeury form插件的ajaxFo