SpringMVC(一)SpringMVC的處理流程、元件說明、搭建
SpringMVC的架構流程
1. 使用者請求到達前端控制器DispatcherServlet,DispatcherServlet將請求傳送到處理器對映器
2. 處理器對映器HandlerMapping,根據請求url查詢到具體的處理器handller以及攔截器,並返回會前端控制器
3. 前端控制器不是直接呼叫controller,而是請求處理器介面卡執行處理器handler
4. 處理器handler將處理請求,並返回Modeview(檢視名和資料),將ModelView送會給前端控制器
5. 前端控制器將ModelView發給檢視解析器ViewResolver生成檢視view,返回給前端控制器
6. 前端控制器渲染檢視,返回給客戶端
元件說明
* DispatcherServlet:前端控制器
是spring MVC的核心,將處理請求傳送到各個元件。
* HandlerMapping:處理器對映器
處理器對映器的作用根據請求的URL找到對應的處理器
* Handler:處理器
具體對請求處理的地方,返回檢視名和資料。
* HandlAdapter:處理器介面卡
通過HandlerAdapter對處理器進行執行,這是介面卡模式的應用,通過擴充套件介面卡可以對更多型別的處理器進行執行。
* viewResolve:檢視解析器
將處理結果ModelAndView ,生成View檢視物件,並對檢視渲染 將結果展示給使用者
* 檢視view
一般指的就是jsp頁面,也有其他,比如freemarkerview
關於DispatcherServlet的說明
DispatcherServlet主要完成了兩件事情
* 初始化Spring 的Web上下文容器,並且可能設定父容器的上下文
* 初始化Spring MVC的元件,如handlermapping,handleradaptor
註解對映器和介面卡
1. 配置處理器對映器
註解式對映器對類中標記了@RequestMapping的方法進行對映,根據請求的url匹配到對應的@RequestMapping註解標記的方法。也就是註解@RequestMapping定義了請求URL到處理器的對映
匹配成功返回HandlerMethod物件給前端控制器。
SpringMVC.xml中配置如下:
<!-- 配置註解處理器對映器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
2. 配置註解是處理器介面卡
對@RequestMapping標記的方法的進行呼叫
<!-- 配置註解處理器介面卡 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
3.註解驅動載入介面卡和對映器
前面直接配置介面卡和對映器比較麻煩,可以直接使用註解驅動,預設載入介面卡和對映器替換。
<!-- 註解驅動 -->
<mvc:annotation-driven></mvc:annotation-driven>
檢視解析器配置
使用預設的檢視解析器,可以在xml中配置檢視解析器的屬性,指定檢視的字首和字尾
<!-- 配置檢視解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp"></property>
<property name="suffix" value=".jsp"></property>
</bean>
最後,返回的實體地址:字首+檢視名+字尾
控制器配置
用註解@Controller表示一個類是處理器,這個註解是基於@Component的,因而在xml中可以使用
元素<component-scan>將它例項化到容器內
@Target({java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller
{
String value() default "";
}
<!-- 配置controller掃描包 -->
<context:component-scan base-package="cn.bing.controller" />
最後,一個小案例實現一個簡單的demo
package cn.bing.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import cn.bing.pojo.Item;
@Controller
public class ItemController {
@RequestMapping("/itemList.action")
public ModelAndView itemList(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
List<Item> list = new ArrayList<Item>();
list.add(new Item(1, "小米1", sdf.format(new Date()), "千元神機!"));
list.add(new Item(2, "小米2", sdf.format(new Date()), "千元神機!"));
list.add(new Item(3, "小米3", sdf.format(new Date()), "千元神機!"));
list.add(new Item(4, "小米4", sdf.format(new Date()), "千元神機!"));
list.add(new Item(5, "小米5", sdf.format(new Date()), "千元神機!"));
ModelAndView mav = new ModelAndView();
mav.setViewName("itemList");
mav.addObject("list", list);
return mav;
}
}
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"%>
<!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>Insert title here</title>
</head>
<body>
<table cellpadding="0" border="1" cellspacing="0">
<c:if test="${not empty list }">
<c:forEach items="${list }" var="obj">
<tr>
<td>${obj['id']}</td>
<td>${obj.name }</td>
<td>${obj.time }</td>
<td>${obj.remark }</td>
<td><a style="color: red;" href="">修改</a></td>
</tr>
</c:forEach>
</c:if>
</table>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>goldSpringDemo</display-name>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
注意到:url-pattern 可以配置為 *.do ,*.action這種攔截不包含jsp ,/*則是攔截所有,包括靜態資源和頁面
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">
<!-- 配置controller掃描包 -->
<context:component-scan base-package="cn.bing.controller" />
<!-- 註解驅動 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置檢視解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
相關文章
- SpringMVC的@ResponseBody註解說明SpringMVC
- SpringMvc - SpringMvc的執行流程SpringMVC
- SpringMVC 統一異常處理SpringMVC
- 【SpringMVC】SpringMVC搭建框架SpringMVC框架
- springmvc 資料處理SpringMVC
- SpringMVC異常處理SpringMVC
- SpringMVC底層——請求引數處理流程描述SpringMVC
- SpringMVC 流程SpringMVC
- springmvc處理ajax請求SpringMVC
- 【SpringMVC】 4.2 異常處理SpringMVC
- SpringMVC---IDEA 搭建SpringMVC工程SpringMVCIdea
- SpringMVC異常的處理機制SpringMVC
- SpringMVC非同步處理的 5 種方式SpringMVC非同步
- springMVC工作流程SpringMVC
- SpringMVC執行流程SpringMVC
- 如何使用SpringMvc處理Rest異常SpringMVCREST
- SpringMVC 解析(五)URI連結處理SpringMVC
- springmvc原始碼 ---DispatcherServlet 處理請求SpringMVC原始碼Servlet
- SpringMVC:資料處理及跳轉SpringMVC
- Day133.異常處理 -SpringMVCSpringMVC
- 八、SpringMVC--SpringMVC 表單標籤 和處理靜態資源SpringMVC
- SpringMVC入門學習---資料的處理SpringMVC
- 使用idea搭建springMVCIdeaSpringMVC
- springMVC DispatcherServlet 工作流程SpringMVCServlet
- 封裝springmvc處理ajax請求結果封裝SpringMVC
- SpringMVC學習系列(10) 之 異常處理SpringMVC
- SpringMVC框架搭建環境SpringMVC框架
- SpringBoot專案建立流程--SpringMVCSpring BootSpringMVC
- SpringMVC【校驗器、統一處理異常、RESTful、攔截器】SpringMVCREST
- SpringMVC請求處理過程原始碼簡析SpringMVC原始碼
- SpringMVC學習筆記10-異常處理SpringMVC筆記
- SpringMVC原始碼分析:POST請求中的檔案處理SpringMVC原始碼
- springmvc簡介和快速搭建SpringMVC
- 搭建 Spring+SpringMVC+MyBatis 框架SpringMVCMyBatis框架
- SpringMVC請求流程原始碼分析SpringMVC原始碼
- SpringMVC系列之SpringMVC快速入門 MVC設計模式介紹+什麼是SpringMVC+ SpringMVC的作用及其基本使用+元件解析+註解解析SpringMVC設計模式元件
- SpringMvc-10.14上傳、攔截器、異常處理SpringMVC
- SpringMVC工作流程 --通透較詳細SpringMVC