SpringMVC 框架入門
一、SpringMVC介紹
1、SpringMVC是什么?
SpringMVC和Struts2都屬于表現層的框架,它是Spring框架的一部分,我們可以從Spring的整體結構中看得出來:
2、為什么要使用SpringMVC?
很多應用程序的問題在于處理業務數據的對象和顯示業務數據的視圖之間存在緊密耦合,通常,更新業務對象的命令都是從視圖本身發起的,使視圖對任何業務對象更改都有高度敏感性。而且,當多個視圖依賴于同一個業務對象時是沒有靈活性的。
SpringMVC是一種基于Java,實現了Web MVC設計模式,請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將Web層進行職責解耦。基于請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發,SpringMVC也是要簡化我們日常Web開發。
3、SpringMVC處理流程
SpringMVC的核心架構:
具體流程:
(1)首先用戶發送請求——>DispatcherServlet,前端控制器收到請求后自己不進行處理,而是委托給其他的解析器進行處理,作為統一訪問點,進行全局的流程控制;
(2)DispatcherServlet——>HandlerMapping,映射處理器將會把請求映射為HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象、多個HandlerInterceptor攔截器)對象;
(3)DispatcherServlet——>HandlerAdapter,處理器適配器將會把處理器包裝為適配器,從而支持多種類型的處理器,即適配器設計模式的應用,從而很容易支持很多類型的處理器;
(4)HandlerAdapter——>調用處理器相應功能處理方法,并返回一個ModelAndView對象(包含模型數據、邏輯視圖名);
(5)ModelAndView對象(Model部分是業務對象返回的模型數據,View部分為邏輯視圖名)——> ViewResolver, 視圖解析器將把邏輯視圖名解析為具體的View;
(6)View——>渲染,View會根據傳進來的Model模型數據進行渲染,此處的Model實際是一個Map數據結構;
(7)返回控制權給DispatcherServlet,由DispatcherServlet返回響應給用戶,到此一個流程結束。
4、SpringMVC接口解釋
(1)DispatcherServlet接口:
Spring提供的前端控制器,所有的請求都有經過它來統一分發。在DispatcherServlet將請求分發給Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具體的Controller。
(2)HandlerMapping接口:
能夠完成客戶請求到Controller映射。
(3)Controller接口:
需要為并發用戶處理上述請求,因此實現Controller接口時,必須保證線程安全并且可重用。
Controller將處理用戶請求,這和Struts Action扮演的角色是一致的。一旦Controller處理完用戶請求,則返回ModelAndView對象給DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和視圖(View)。
從宏觀角度考慮,DispatcherServlet是整個Web應用的控制器;從微觀考慮,Controller是單個Http請求處理過程中的控制器,而ModelAndView是Http請求過程中返回的模型(Model)和視圖(View)。
(4)ViewResolver接口:
Spring提供的視圖解析器(ViewResolver)在Web應用中查找View對象,從而將相應結果渲染給客戶。
5、DispatcherServlet:
是整個Spring MVC的核心。它負責接收HTTP請求組織協調Spring MVC的各個組成部分。其主要工作有以下三項:
(1)截獲符合特定格式的URL請求。
(2)初始化DispatcherServlet上下文對應WebApplicationContext,并將其與業務層、持久化層的WebApplicationContext建立關聯。
(3)初始化Spring MVC的各個組成組件,并裝配到DispatcherServlet中。
二、SpringMVC入門程序
本系列教程使用的是SpringMVC4.1.3這個版本。下面我就來教大家如何入門SpringMVC這個框架。
現有這樣一個需求:使用SpringMVC這個框架實現商品列表的展示。這是我對這個需求的分析:我這里假設請求的url為/itemList.action,由于我想要展示商品列表,所以是并不需要傳遞參數的,再次是這里僅僅是一個SpringMVC的一個入門小程序,并不會與MyBatis進行整合,也就不會從數據庫表里面查詢商品列表信息,故查詢商品列表數據也僅僅只是一些靜態數據。下面正式開始SpringMVC的入門小程序。
SpringMVC入門程序的開發步驟
【第一步】,創建一個javaweb工程,例如springmvc-first。
【第二步】,導入SpringMVC獨立運行的jar包,如下:
【第三步】,創建一個jsp頁面——itemList.jsp,內容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查詢商品列表</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/item/queryitem.action" method="post">
查詢條件:
<table width="100%" border=1>
<tr>
<td><input type="submit" value="查詢"/></td>
</tr>
</table>
商品列表:
<table width="100%" border=1>
<tr>
<td>商品名稱</td>
<td>商品價格</td>
<td>生產日期</td>
<td>商品描述</td>
<td>操作</td>
</tr>
<c:forEach items="${itemList }" var="item">
<tr>
<td>${item.name }</td>
<td>${item.price }</td>
<td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td>${item.detail }</td>
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
</tr>
</c:forEach>
</table>
</form>
</body>
</html>
并把該jsp頁面復制到工程的/WEB-INF/jsp目錄下。
【第四步】,創建一個Item類,用于描述商品信息,其內容如下:
public class Items {
private int id;
private String name;
private double price;
private Date createtime;
private String detail;
public Items(int id, String name, double price, Date createtime, String detail) {
super();
this.id = id;
this.name = name;
this.price = price;
this.createtime = createtime;
this.detail = detail;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
}
并將該類復制到工程src目錄下的com.itheima.springmvc.pojo包中。
【第五步】,創建ItemController,ItemController是一個普通的java類,有點類似于Struts2中的Action,且不需要實現任何接口,只需要在類上添加@Controller注解即可。@RequestMapping注解指定請求的url,其中“.action”可以加也可以不加。在ModelAndView對象中,將視圖設置為“/WEB-INF/jsp/itemList.jsp”。
@Controller
public class ItemController {
// .action可以省略 (請求的url地址)
@RequestMapping("/itemList.action")
public ModelAndView itemList() {
// 查詢商品列表,使用靜態數據生成一個商品列表
List<Items> itemList = new ArrayList<Items>();
itemList.add(new Items(1, "imac", 20000, new Date(), "蘋果本很貴"));
itemList.add(new Items(2, "imac1", 20000, new Date(), "蘋果本很貴"));
itemList.add(new Items(3, "imac2", 20000, new Date(), "蘋果本很貴"));
itemList.add(new Items(4, "imac3", 20000, new Date(), "蘋果本很貴"));
itemList.add(new Items(5, "imac4", 20000, new Date(), "臥槽,蘋果本很貴啦!"));
// 把商品列表傳遞給jsp
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemList", itemList);
// 設置展示數據的視圖,即jsp
modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");
// 返回結果
return modelAndView;
}
}
最后將ItemController類復制到工程src目錄下的com.itheima.springmvc.controller包中。
【第六步】,創建springmvc.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:p="http://www.springframework.org/schema/p"
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-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="com.itheima.springmvc.controller"/>
</beans>
上面配置了掃描包(Controller類所在的包),那么它就會掃描這個包下所有帶@Controller注解的類,并創建對象放到springmvc容器中。
【第七步】,配置前端控制器。在web.xml中添加DispatcherServlet的配置,即在web.xml文件中添加如下配置:
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 指定springmvc配置文件的路徑。如果不指定,默認為:/WEB-INF/${servlet-name}-servlet.xml -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
【第八步】,入門程序測試。在瀏覽器地址欄中輸入url地址——http://localhost:8080/springmvc-first/itemList.action,回車,就能看到如下效果:
智能推薦
SpringMVC框架入門看這一篇就夠了
Spring MVC體系結構與處理請求控制器 一、基本認識 我們常說的SSM項目,第一個“S”,就是我今天要給大家說的SpringMVC,第二個“S”是什么呢?是Spring,最后一個“M”就是Mybatis持久層框架,它封裝了JDBC操作,讓我們在對數據庫進行操作的時候可以更加便捷。 SpringMVC它主要是來干嘛的呢?就...
maven管理springMVC框架入門案例,通俗易懂,包會!!!
首先了解一下什么是springMVC Spring MVC有些地方也叫作Spring Web MVC,看名字就能知道這是一個表現層框架。什么是表現層呢,一個項目中分為三層架構表現層,業務層,持久層。那咱們這個springMVC就屬于是表現層了,表現層是負責和瀏覽器交互的。Spring MVC是大名鼎鼎的Spring框架的一部分,是Spring3.0版本之后發布的,它可以與Spring框架無縫集成,...
springmvc框架快速入門
springmvc快速入門 springmvc的action是單例模式的,springmvc配置文件頭放在附件中。 首先要在web.xml中配置springmvc核心控制器 在springmvc.xml中...
springmvc入門---框架搭建
springmvc是spring的一個模塊,搭建起來相對容易。 1 導入對應的jar包 2 配置web.xml對應的springmvc的內容 3 配置springmvc.xml 4 編寫對應的controller,jsp用于驗證框架搭建成功。 工具:idea,spring4.0 下面開始搭建。 1 建一個web工程 &nb...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...