初認SpringMVC

  目錄html

  • 介紹Spring
  • 介紹Spring Framework
  • IOC 和AOP
  • Spring MVC介紹
  • Hello World

  Spring java

  Spring Framework    Spring框架(Spring:通常都是指這個)程序員

  Spring boot       Spring快速開發框架web

  Spring Cloud     Spring 微服務spring

  


  Spring FrameWork 七大核心模塊數據庫

  • Spring Core : 核心容器提供與Spring 框架基本功能。核心容器的主要組件時BeanFactory,它是工廠模式的實現。BeanFactory使用控制反轉(loc)

  模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。編程

  • Spring Context:Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業服務,例如 JNDL, EJB, 電子郵件,國際化,校驗和調度功能。
  • Spring AOP:經過配置管理特徵,Spring AOP 模塊直接將面向方面的編程功能集成到了Spring框架中。因此,能夠很容易地使Spring框架管理的任何對象AOP。Spring

  AOP 模塊爲基於Spring的應用程序中的對象提供了事務管理服務。經過使用Spring AOP,不用依賴EJB組件,就能夠將聲明性事務管理集成到應用程序中。設計模式

  • Spring DAO: JDBC DAO抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不一樣數據庫供應商拋出的錯誤消息。異常結構層次簡化了錯誤處理。而且

  極大的下降了須要編寫的異常代碼數量(例如打開鏈接和關閉鏈接)。Spring DAO的面向JDBC的異常聽從通用的DAO異常層次結構。服務器

  • Spring ORM: Spring框架插入若干個ORM框架,從而提供了ORM的對象關係工具,其中包括JDO,Hibernate和IBatis SQL Map。全部這些都聽從Spring的通用事務和DAO

  異常層次結構。微信

  • Spring Web:Web 上下文模塊創建在應用程序上下文模塊之上,爲基於web的應用程序提供了上下文。因此,Spring框架支持與Jakarta Struts的集成。

  WEB模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工做。

  • Spring Web MVC:mvc框架是一個全功能的構建Web應用程序的mvc的實現。經過策略接口,MVC框架變成爲高度可配置的,MVC容納了大量視圖技術,其中包括JSP POL iText。

  

 

 

   


  對應的JDK版本

  • 適用於Spring Framework5.x的JDK8+
  • 用於Spring Framework 4.x的JDK6+
  • JDK 5+ for Spring Framework 3.x

 

 


  IOC和AOP

  • IOC,控制反轉

   不建立對象,可是描述建立它們的方式。在代碼中不直接與對象和服務器鏈接,但在配置文件中描述哪個組件須要那一項服務。容器(在Spring框架中是IOC容器)負責將這些聯繫在一塊兒。

  • AOP,面向切面編程

   AOP是一種編程技術,它容許程序員在橫切關注點或橫切典型的職責分界線的行爲(例如日誌和事務管理)進行模塊化。AOP的核心構造是方面,它將那些影響多個類的行爲封裝到可重用的模塊中。


  Spring  Web MVC 是什麼?

  Spring Web MVC :是一種基於java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即便用了mvc架構模式的思想,將web層進行職責解耦,基於請求驅動就是指的使用請求-響應模型,框架的目的就是幫咱們簡化開發,Spring Web MVC也就是要簡化咱們平常對WEB的開發 

  Spring  Web MVC能幫咱們作什麼

  • 讓咱們能很是簡單的設計出乾淨的Web層和薄薄的Web層(web層就是controoler層)。
  • 進行更簡潔的Web層開發。
  • 天生與Spring框架集成(如IOC容器,AOP等)。
  • 提供強大的約定大於配置的鍥約式的編程支持。
  • 能簡單的支持web層的單元測試。
  • 支持靈活的URL到頁面控制層的映射。
  • 很是容易與其餘視圖集成,如Velocity. FreeMarker 等等,由於模型數據不放在特定的API裏,而是放在一個Model裏(Map數據結構化實現,所以很容易被其它框架使用)。
  • 很是靈活的數據驗證,格式化和數據綁定機制,能使用任何對象進行數據綁定,沒必要實現特定的框架API。
  • 提供一套強大的JSP標籤庫,簡化jsp開發。
  • 支持的靈活本地化,主題等解析。
  • 更加簡單的異常處理。
  • 對靜態資源的支持。
  • 支持Restful風格。

   


  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

 

  

  運行項目

  • 地址欄輸入:http://localhost:8080/demo1/hello
  • 看是否看到hello world

  

 

 


  ModelAndView

  • 控制器處理方法的返回值若是結果爲: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來諮詢。謝謝你們!

 

轉載於:https://www.cnblogs.com/268lwc/p/11585521.html