Spring MVC入門
前言
在現如今"MVC思想"滿街跑的時代,基于MVC思想的MVC框架也越來越多。現在主流的框架除了Struts這個主力之外,其次就是Spring MVC了,而且相較于Struts,Spring MVC學習更加簡單,更加容易擴展。更為重要的是Spring MVC在性能上是優于struts的(關于兩者的優缺點現不提及了)。基于上述原因,對于中小型項目來說選擇Spring MVC框架進行開發是一個非常令人愉快的決定(SSH太煩了)!
作為一名Java Web程序員,了解和掌握Spring MVC框架也應該提上日程了。
Spring Web MVC是什么
作為學習的開篇,首先我們得先了解下Spring MVC到底是什么。
Spring Web MVC是一種基于Java實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行解耦,基于請求-響應模型幫助我們簡化日常web系統的開發。
Spring Web MVC框架就是一種MVC框架。其前端控制器是DispatcherServlet主要用于控制流程;應用控制器為Handler Mapping-處理器映射器進行處理器管理和View Resolver-視圖解析器進行視圖的解析;頁面控制器/動作跳轉處理器為Controller接口;支持本地化解析、文件上傳等;提供了十分靈活的數據校驗、格式化和數據綁定機制;采用約定優于配置的契約式編程方式。
Spring Web MVC特點
- 容易設計清爽干凈的web層。
- 與Spring框架集成(IOC容器、AOP等)。
- 提供約定優于配置的契約式編程支持。
- 更加快捷、簡單的單元測試。
- 靈活的URL到控制器的映射。
- 支持Rest風格。
- ............................
Spring Web MVC框架
Spring Web MVC框架也是一個基于驅動的MVC框架,通過實現Model-View-Controller模式很好的將數據、業務、展現進行分離。Spring Web MVC的設計是圍繞前端控制器DispatcherServlet來展開的,DispatcherSerlvet負責將請求根據映射規則分發給相應控制器 (Controller),根據可配置的Handler mappings處理請求并轉到相應的視圖。Spring Web MVC的整體處理流程如下:

上圖只是Spring MVC比較粗淺的執行過程,詳細的執行過程在后續學習中進行討論。由上圖可知,Spring MVC大致的執行流程如下:
1、首先瀏覽器發送請求給前端控制器DispatcherServlet,DispatcherSerlvet根據請求信息,基于一定的原則選擇合適的控制器進行處理并把 請求委托給它。
2、頁面控制器接收到請求之后進行功能處理,首先需要收集、綁定請求參數到一個對象(命令對象),并進行驗證,然后將該對象委托給業務對象進行處理(service層);業務對象處理之后控制器將返回一個ModelAndView(模型數據和邏輯視圖名);
3、DispatcherServlet根據返回的邏輯視圖名,選擇合適的視圖進行渲染(界面展示、資源加載),并把模型數據傳入以便視圖渲染。
4、前端控制器將響應返回個客戶端瀏覽器。
到此我們對于Spring Web MVC的概念,以及其粗略的工作流程有了一個大致的了解。接下來搭建一個具體的實例來作為學習Spring Web MVC框架的開端吧。
Spring MVC實例入門
Spring MVC環境搭建(Spring 3.2+Hibernate3)
JAR包引入
1、Spring框架jar包引入
將下載下來的spring-framwork.../dist/下的所有jar包拷貝到項目的web-inf/lib目錄下:
2、Spring框架依賴jar包
Apache commons logging日志:commons.logging.jar包;jstl標簽庫支持的jar,jstl1.1.2.JAR、standard-1.1.2.jar
配置文件
1、web.xml配置
2、spring-mvc.xml配置
3、spring-common.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.lcore.ctp.mng.dao.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="userServiceBase" class="com.lcore.ctp.mng.service.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<!-- 此處為代理 -->
<bean name="userService" parent="transactionProxy">
<property name="target" ref="userServiceBase"></property>
</bean>
</beans>
PO類
package com.lcore.ctp.mng.domain; import java.io.Serializable; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; @Entity @Table(name = "user") @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class User implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String id; private String name; private String password; @Id @GeneratedValue(generator = "systemUUid") @GenericGenerator(name = "systemUUid", strategy = "uuid") public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
Controller編寫
package com.lcore.ctp.mng.controller.login; import java.io.IOException; import java.io.PrintWriter; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.lcore.ctp.mng.controller.BaseController; import com.lcore.ctp.mng.domain.User; import com.lcore.ctp.mng.service.UserService; @Controller public class UserController extends BaseController{ @Resource(name="userService") private UserService userService; @RequestMapping("/login")//Controller訪問url public String login(User user,HttpServletRequest request) { user.setPassword(request.getParameter("password")); user.setName(request.getParameter("username")); System.out.println(user.getName()+user.getPassword()); if(userService.login(user)){ request.getSession().setAttribute("user", user); return "redirect:index"; } else return "/login";//登錄失敗則返回login.jsp界面 } @RequestMapping("/loginOut") public String loginOut(User user,HttpServletRequest request) { return "login"; } }
編寫完Controller,前端如何訪問呢?需要將form表單的action屬性置為如下形式:
action="<%=request.getContextPath()%>/login"
OK,了解完Spring MVC大致的工作流程,能夠自己搭建一個簡單的基于Spring MVC的例子,知道配置文件中的相關配置項的作用。,對于Spring MVC框架的學習也算是能夠進行下去了吧!
來自:http://blog.csdn.net/lcore/article/details/23133579
來自:http://blog.csdn.net/lcore/article/details/23133579
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!