javascript
SpringMVC 理论与实用技术(一) 简单、实用、易懂的几个实例
SpringMVC先來看一下百度百科中的定義;
???????? Spring MVC屬于SpringFrameWork的后續產品,已經融合在Spring Web Flow里面。Spring 框架提供了構建 Web 應用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構,可以選擇是使用內置的 Spring Web 框架還可以是 Struts 這樣的 Web 框架。通過策略接口,Spring 框架是高度可配置的,而且包含多種視圖技術,例如 JavaServer Pages(JSP)技術、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的視圖,所以不會強迫您只使用 JSP 技術。Spring MVC 分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定制。
說一下我對上面定義的理解
????? Spring Web是一個大的框架,Spring Web Flow屬于Spring Web但是它脫離了Spring Web 屬于一個頁面流程管理模塊,在它的內部實現了頁面流程控制功能即Springmvc,這樣的框架還有Struts等如果你不想使用內置的框架,就可以使用外置的讓spring與其集成,Spring在與別的框架集成這方面做的很不錯,比如同hibernate、ibatis等等都有很好的集成實現,在多種視圖上Spring使用策略模式實現,上面大家了解的視圖技術主要是jsp,對于后面幾個不是很了解,
再說一下Velocity它是模板引擎,現在做的這個項目中使用了模板,使用的地方不是很多,在分頁的時候使用了這個技術,分頁有關的上一頁、下一頁、總頁數、等這些按鈕都是在一個一個的模板里面,在模板里面又引用了Pagemodel這個類,編輯模板的時候就會用著模板引擎語法,有關這個模板代碼類似于${} JSTL表達式,有關模板實例請看這個分頁博客數據分頁模塊封裝。
HelloWorld的一個方法對應于一個Action,
????????? 首先,需要引入spring mvc 以及相關jar包,這不可以歸為一個框架必有步驟,用到哪個框架都需要引入它用到的jar包或者庫文件等,如下:
????????? 然后,建立一個HelloWorldController類并實現Controller接口,一般來說呢框架是越輕量級越好,如果新建一個類還需要去實現別的接口或者繼承別的類,會使得該類耦合很大,
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框架相關文件,別的框架也會有自己的配置文件
<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的話是不現實的,開發中方法往往會特別多一個,倘若一個方法對應一個Action那需要寫很多Actin,項目會變得很輪,常常是一個一個Action里面寫很多個方法這種開發更適合,我們開發是越簡單越高效越好。
繼承方式,即是讓action類繼承一個父類,代碼如下
?????????? 另外還需要配置一個類,該類的作用是解析URL中的參數,確保可以找到每個方法對應的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寫一個標簽、可見以后編程還是朝著注解方面發展,現在很多框架都提供了注解功能,目前我接觸過的如EJB、Web Service、JPA、Transaction、hibernate的ORM等,在提供配置文件實現的同時都提供了注解方式實現,相比配置文件注解看起來就簡單多了,越來越多的注解也有一個疑問?它是怎么樣利用一個小小的注解來封裝實現各種功能?也就是說注解是實現的原理是什么?
說了這么多來看一下注解是怎么實現的吧。
@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分發地址。??????????? 在注解配置文件里面只需要,如下三個標簽即可完成。
<!-- 注解掃描包 --><context:component-scan base-package="com.tgb.web.controller.annotation"></context:component-scan><!-- 開啟注解 --><mvc:annotation-driven/><!-- 根據掃描的包找某個類下面的方法 --><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean><!-- 根據掃描的包找下面的類 --><bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>?????????? 它的思路理解者很容易,1.注解掃描包是確定哪些包是利用注解方式訪問
???????????????????????????????????????? 2.根據包找下面的哪些類使用注解
???????????????????????????????????????? 3.根據某個類,確定里面哪些方法使用注解
??????????? 對于它的視圖解析器、注釋等很多概念原理在一邊實現一邊理解,同時與struts1、struts2等框架比較,容易理解,覺得她們有很多相似之后,又略有不同,他們的優缺點還需要慢慢體會,只有在不斷實踐和開發中才會得到真正積累,對于編程這類東西,需要多動手、多思考才能進步很快。
轉載于:https://www.cnblogs.com/lilongsheng1125/p/4978526.html
總結
以上是生活随笔為你收集整理的SpringMVC 理论与实用技术(一) 简单、实用、易懂的几个实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL转换函数to_char/to_da
- 下一篇: Spring下@ResponseBody