目錄html
Spring java
Spring Framework Spring框架(Spring:通常都是指這個)程序員
Spring boot Spring快速開發框架web
Spring Cloud Spring 微服務spring
Spring FrameWork 七大核心模塊數據庫
模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。編程
AOP 模塊爲基於Spring的應用程序中的對象提供了事務管理服務。經過使用Spring AOP,不用依賴EJB組件,就能夠將聲明性事務管理集成到應用程序中。設計模式
極大的下降了須要編寫的異常代碼數量(例如打開鏈接和關閉鏈接)。Spring DAO的面向JDBC的異常聽從通用的DAO異常層次結構。服務器
異常層次結構。微信
WEB模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工做。
對應的JDK版本
IOC和AOP
不建立對象,可是描述建立它們的方式。在代碼中不直接與對象和服務器鏈接,但在配置文件中描述哪個組件須要那一項服務。容器(在Spring框架中是IOC容器)負責將這些聯繫在一塊兒。
AOP是一種編程技術,它容許程序員在橫切關注點或橫切典型的職責分界線的行爲(例如日誌和事務管理)進行模塊化。AOP的核心構造是方面,它將那些影響多個類的行爲封裝到可重用的模塊中。
Spring Web MVC 是什麼?
Spring Web MVC :是一種基於java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即便用了mvc架構模式的思想,將web層進行職責解耦,基於請求驅動就是指的使用請求-響應模型,框架的目的就是幫咱們簡化開發,Spring Web MVC也就是要簡化咱們平常對WEB的開發
Spring Web MVC能幫咱們作什麼
Web開發中的請求-響應模式
所以,在web的世界裏:都是Web客戶發起請求,Web服務器接受,處理並響應。
通常Web服務器是不能主動通知Web客戶端更新內容。
雖然如今有些技術如服務器推(如Comet),還有如今的HEML5 ,websocket能夠實現web服務器主動通知Web客戶端。
SpringMVC 工做原理
上面這張圖很重要,但願你們能好好看。
第一個例子 Hello World!
下載spring框架jar (我使用的版本是 4.x)
依賴jar包:
1》Spring框架框架依賴的jar包:須要添加Apache commons logging 日誌,此處使用的是commons.logging-1.1.1.jar.
2》須要添加jstl標籤庫支持,此處使用的是jstl-1.1.2.jar.
百度網盤:連接:https://pan.baidu.com/s/1oEcAcTXs8dpRRPHpwz1LCw 提取碼:4idj (包括依賴的jar也在裏面)
代碼:
1,新建一個web項目
在web.xml文件中配置
<servlet> <servlet-name>demo1</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
自此請求已交給Spring Web MVC 框架處理,所以咱們須要配置Spring 的配置文件,默認DispatcherServlet 會加載WEB-INF/[DispatcherServlet 的servelt的名字 ]-servelt.xml配置文件。
本例子爲 WEB-INF/demo1-servlet.xml。
在Spring配置文件中(demo1-servlet.xml)配置ViewResolver(視圖解析器)demo1-servlet.xml文件須要放在WEB-INF下
<!-- ViewResolver 視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- 映射視圖路徑 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 映射視圖後綴 --> <property name="suffix" value=".jsp"/> </bean>
InternalResourceViewResolver :用於支持Servlet,jsp視圖解析
viewClass:JstlView表示 JSP 模板頁面須要使用 JSTL 標籤庫,classpath中必須包含jstl的相關jar包
(若是想換其餘模板引擎,就修改這裏,如:freemarker)
prefix和suffix:查找視圖頁面的前綴和後綴(前綴【邏輯視圖名】後綴),好比傳進來的邏輯視圖名爲hello,則該jsp視圖頁面應該存放在「WEB-INF/JSP/HELLO.JSP」.
開發處理器/頁面控制器(也在demo1-servlet.xml中配置)
<!-- 配置處理器 --> <bean name="/hello" class="indi.xiaoen.demo1.web.HelloWorldController"/>
name:表示若是請求的URL爲 「上下文/hello」,則將會交給該bean進行處理。
class:爲自定義控制器的類路徑。
控制器類:HelloWorldControoler
/** 控制器實現 Controller接口 */ public class HelloWorldController implements Controller { /** * 重寫 handleRequest 方法 */ @Override public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception { //一、收集參數、驗證參數 //二、綁定參數到命令對象 //三、將命令對象傳入業務對象進行業務處理 //四、選擇下一個頁面 ModelAndView mv = new ModelAndView(); //添加模型數據 能夠是任意的POJO對象 mv.addObject("message", "Hello World!"); //設置邏輯視圖名,視圖解析器會根據該名字解析到具體的視圖頁面 mv.setViewName("hello"); return mv; } }
開發視圖頁面
建立/WEB-INF/jsp/hello.jsp 視圖界面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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>Hello World</title> </head> <body> 是否獲取到了Request 裏的message :${requestScope.message}<br> 是否獲取到了Session 裏的message :${sessionScope.message} </body> </html>
ModelAndView.addObject 做用範圍是:request
運行項目
ModelAndView
ModelAndView addObject(String attributeName, Object attributeValue)
ModelAndView addAllObjects(Map<String, ?> modelMap)
void setViewName(String viewName) void setView(View view)
運行步驟
1、 首先用戶發送請求 http://localhost:8080/demo1/hello——>web 容器,web 容器根據「/hello」路徑映射到 DispatcherServlet(url-pattern 爲/)進行處理; 2、 DispatcherServlet——>BeanNameUrlHandlerMapping 進行請求處處理的映射,BeanNameUrlHandlerMapping 將 「/hello」路徑直接映射到名字爲「/hello」的 Bean 進行處理,即 HelloWorldController,BeanNameUrlHandlerMapping 將其包裝爲 HandlerExecutionChain(只包括 HelloWorldController 處理器,沒有攔截器); 3、 DispatcherServlet——> SimpleControllerHandlerAdapter,SimpleControllerHandlerAdapter 將 HandlerExecutionChain 中的處理器(HelloWorldController)適配爲 SimpleControllerHandlerAdapter; 4、 SimpleControllerHandlerAdapter — — > HelloWorldController 處理器 功 能 處 理 方 法 的 調 用 , SimpleControllerHandlerAdapter 將會調用處理器的 handleRequest 方法進行功能處理,該處理方法返回一 個 ModelAndView 給 DispatcherServlet; 5、 hello(ModelAndView 的邏輯視圖名)——>InternalResourceViewResolver, InternalResourceViewResolver 使用 JstlView,具體視圖頁面在/WEB-INF/jsp/hello.jsp; 6、 JstlView(/WEB-INF/jsp/hello.jsp)——>渲染,將在處理器傳入的模型數據(message=HelloWorld!)在視圖中展現出 來; 7、 返回控制權給 DispatcherServlet,由 DispatcherServlet 返回響應給用戶,到此一個流程結束。
POST中文亂碼解決方案(wen.xml文件中配置)
<!--使用Spring框架自帶的字符過濾器--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
ok ,但願你們好好看。而後有疑問能夠評價或加我微信18179068936來諮詢。謝謝你們!