1. 程式人生 > >day63_SpringMVC學習筆記_01

day63_SpringMVC學習筆記_01

1、JAVAEE體系結構

  • JAVAEE體系結構圖如下所示:

2、什麼是springmvc?

  • 什麼是mvc?
    • Model1
    • Model2
  • SpringMVC是什麼?
    • SpringMVC是一個web層mvc框架,類似struts2。
  • SpringMVC和Spring?
    • Springmvc是Spring的組成部分。
  • SpringMVC執行流程(執行原理)
    • 回憶Struts2執行流程:
      • 前端控制器:StrutsPrepareAndExcuteFilter攔截請求(控制層):攔截請求,轉發請求
      • 尋找Action執行,處理請求資料
      • ActionMapping去尋找執行類Action --> UserAction
      • 找到ActionProxy:StrutsActionProxy extends DefaultActionProxy
      • 通過代理類ActionProxy根據struts.xml尋找到真正的執行類Action
    • SpringMVC執行流程(執行原理),如下圖所示:

3、springmvc第一個程式案例

3.1、不使用檢視解析器+使用檢視解析器

(1)使用eclipse,建立一個動態的web工程  其中Dynamic web module version版本選擇 2.5,這樣相容性好一些;  Default output folder設定為 WebRoot\WEB-INF\classes

;  Content directory設定為 WebRoot;  更改JRE System Library[J2SE-1.5]為 JRE System Library[jre1.7.0_80];  刪掉沒用的庫:EAR Libraries;  增加伺服器執行環境庫 Server Runtime,不然jsp檔案會報錯。

  建立完專案後,將整個專案的編碼改為UTF-8。  操作步驟:選中專案右鍵 --> Properties --> Resource --> Text file encoding --> Other中選擇UTF-8。

(2)匯入springmvc的jar包

  本案例共16個jar,如下圖所示:

(3)在web.xml配置前端控制器:DispatcherServlet(入口)

    <!-- 配置前端控制器:DispatcherServlet -->    <servlet >        <servlet-name>springmvc</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>springmvc</servlet-name>        <url-pattern>*.do</url-pattern>    </servlet-mapping>

  我們還需要配置springmvc.xml檔案的初始化引數,如下圖所示:

(4)配置springmvc.xml  參考檔案位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html

<?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:mvc="http://www.springframework.org/schema/mvc"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"     xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd         http://www.springframework.org/schema/mvc         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-3.2.xsd         http://www.springframework.org/schema/aop         http://www.springframework.org/schema/aop/spring-aop-3.2.xsd         http://www.springframework.org/schema/tx         http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">    <!-- 配置處理器對映器,springmvc預設的處理器對映器 -->    <!-- BeanNameUrlHandlerMapping:根據bean(自定義的Controller)的name屬性的url去尋找執行類Handler(Action)即Controller -->    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>    <!-- 配置處理器介面卡,負責執行Controller,也是springmvc預設的處理器介面卡 -->    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>    <!-- 配置自定義的Controller:UserController -->    <bean name="/hello.do" class="com.itheima.controller.UserController"></bean>    <!-- 配置檢視解析器,InternalResourceViewResolver負責解析出真正的邏輯檢視 -->    <!-- 後臺返回邏輯檢視:index        檢視解析器解析出真正的物理檢視:字首+邏輯檢視+字尾 ==>/WEB-INF/jsps/index.jsp -->    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix" value="/WEB-INF/jsps/"></property>        <property name="suffix" value=".jsp"></property>    </bean></beans>

(5)自定義Controller(相當於Struts2裡面的Action)

public class UserController implements Controller {    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {        // 接收請求,接收引數,驗證引數,處理請求        // 封裝引數,呼叫業務方法,返回處理結果資料ModelAndView        // 演示案例中我們只模擬下而已:向前臺返回資料        ModelAndView mv = new ModelAndView();        mv.addObject("hello""like xiaoyi");        // 指定跳轉的檢視        // 返回真實的物理檢視,省略了8、9步        // mv.setViewName("/WEB-INF/jsps/index.jsp");        // 返回邏輯檢視        mv.setViewName("index");        return mv;    }}

(6)定義檢視頁面  根據檢視解析路徑:WEB-INF/jsps/index.jsp

<body>    <h1>${hello}</h1></body>

(7)瀏覽器訪問  訪問地址:http://localhost:8080/day63_SpringMVC_01/hello.do

4、根據程式分析springmvc執行流程(畫圖)

  • 該圖同SpringMVC執行流程圖(執行原理)

5、處理器對映器

5.1、配置預設處理器對映器(BeanNameUrlHandlerMapping)

功能:尋找Controller   根據url請求去匹配bean的name屬性url,從而獲取Controller

5.2、配置集中處理器對映器(SimpleHandlerMapping)

功能:尋找Controller   根據瀏覽器url匹配簡單url的key,key通過Controller的id找到Controller

5.3、配置類名處理器對映器(ClassNameHandlerMapping)

功能:尋找Controller   直接根據類名(UserController),類名.do來訪問,類名首字母小寫

  • 3個處理器對映器可以共存。均可以訪問成功。

6、處理器介面卡

6.1、配置預設處理器介面卡(SimpleControllerHandlerAdapt)

功能:執行Controller   負責執行實現了Controller介面的後端控制器,例如:UserController,呼叫Controller裡面的方法,返回ModelAndView。

預設處理器介面卡原始碼分析,如下圖所示:

6.2、配置請求處理器介面卡(HttpRequestHandlerAdapter)

功能:執行Controller   負責執行實現了HttpRequestHandler介面的後端控制器。

演示過程:  自定義實現了介面HttpRequestHandler的實現類HttpController,如下圖所示:  在springmvc.xml中配置自定義的bean,即自定義的HttpController,如下圖所示:  上面的這種方式無限接近servlet的開發。
  • 2個處理器介面卡可以共存。

7、命令控制器

7.1、Controller簡介

1、收集、驗證請求引數並繫結到命令物件;2、將命令物件交給業務物件,由業務物件處理並返回模型資料;3、返回ModelAndView(Model部分是業務物件返回的模型資料,檢視部分是邏輯檢視名)。

  • 普通控制器(繼承介面Controller,繼承介面HttpRequestHandler)
  • 命令控制器(繼承抽象類AbstractCommandController)
    • 例子:跳轉到新增頁面,進行頁面跳轉,引數提交get請求或者post請求
  • 引數控制器(類ParameterizableViewController)

Springmvc通過命令設計模式接受頁面引數。

7.2、演示:自定義命令控制器

示例如下:(1)自定義命令控制器

package com.itheima.controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.validation.BindException;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.AbstractCommandController;import com.itheima.domain.User;// 從頁面接收引數,封裝到JavaBean中,本例中的JavaBean是User@SuppressWarnings("deprecation")public class CommandController extends AbstractCommandController {    // 指定把頁面傳過來的引數封裝到物件,使用命令設計模式    public CommandController() {        this.setCommandClass(User.class);    }    @Override    protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object command,            BindException errors) throws Exception {        // 引數被封裝進命令物件,這個過程很複雜,我們暫時不用管它,只要知道它使用的是命令設計模式即可        // 把命令物件強轉成User物件        User user = (User) command;        // 設定Model的資料,值可以是任意pojo        ModelAndView mv = new ModelAndView();        mv.addObject("user", user);        // 指定返回頁面        mv.setViewName("index");        return mv;    }}

相關推薦

day63_SpringMVC學習筆記_01

1、JAVAEE體系結構 JAVAEE體系結構圖如下所示: 2、什麼是springmvc? 什麼是mvc? Model1 Model2 SpringMVC是什麼? SpringMVC是一個web層mvc框架,類似struts2。 SpringMVC和

React學習筆記_01

壓縮 替換 log -s 直接 快速構建 使用 cal font 使用Facebook的create-react-app快速構建React開發環境 前言: create-react-app:來自Facebook官方的零配置命令行工具 create-react-app是

Ajax學習筆記_01

通過 xmlhttp orm imp 函數 java AD 交互 thead Ajax是一種方法,而不是一種編程語言。語言的話,用js就足夠了。 首先需要創建一個XMLHttpRequest對象,這個對象的方法包括: abort(); getAllResponseHe

Flask_學習筆記_01

公司有一哥們成立一個Python學習小組,於是果斷加入,雖然講的跳度比較大,但是還是學了點知識的。之前自學過一段時間Python,有點基礎。聽到要講Flask的時候,就有點感興趣了,說是比較輕量級的Web開發框架,嘗試了一下,確實上手比較快。由於也是剛入門,所以沒有資格對其評價,先玩一段時間再說吧。 Fla

day61_Mybatis學習筆記_01

今天內容安排: 1、mybatis的介紹 2、分析原生態jdbc程式中存在的問題 3、mybatis的框架原理(重點) 4、入門程式 訂單商品案例(使用者表) 5、Mybatis開發dao的方

Java學習筆記_01

Java程式三步走 原始檔(格式為.java檔案) 編譯器轉化(格式為.class檔案) 直譯器轉化(轉化為機器語言) 第一個java程式 建立檔案javatest.java 編輯程式碼: public class javates

day45_Webservice學習筆記_01

一、課程安排 Webservice就是一種遠端呼叫技術,它的作用就是從遠端系統中獲取業務資料。     客戶端通過網路通訊協議訪問服務端,網路協議包括TCP和UDP兩大通訊協議:    TCP是一種面向連線的協議,提供可靠的資料傳輸,一般服務質量要求比較高的情況,使用這個協議。TCP支援的應用協議主要

day67_Redis學習筆記_01

課程計劃 1、Redis的介紹 a) 什麼是NoSql b) NoSql的分類 c) 什麼是Redis d) Redis的歷史發展 e) Redis的應用場景 2、Redis服務端的安裝(重點) 3、Redis客戶端的使用 a) redis自帶客戶端(命令列) b)

Robot Operating System (ROS)學習筆記4---語音控制

sla 語音 出現 tput http 學習 process 輸入 ubun 搭建環境:XMWare Ubuntu14.04 ROS(indigo) 轉載自古月居 轉載連接:http://www.guyuehome.com/260 一、語音識別包 1、安裝

MySQL學習筆記(六)—— MySQL自連接

概念 cor 子查詢 ron 表操作 例子 質量 _id order by 有的時候我們需要對同一表中的數據進行多次檢索,這個時候我們可以使用之前學習過的子查詢,先查詢出需要的數據,再進行一次檢索。 例如:一張products表,有產品id,供應商id(vend_

jquery 深入學習筆記之中的一個 (事件綁定)

color 動態 name his pan mouseover this pre con 【jquery 事件綁定】 1、加入元素事件綁定 (1) 加入事件為當前元素 $(‘p‘).on(‘click‘,function(){ //code here ..

AngularJS入門學習筆記

rect directive 技術分享 attr 兩個 ava 內容 module 大括號 首先聲明: 本博客源自於學習:跟我學AngularJs:AngularJs入門及第一個實例。通過學習,我自己的一些學習筆記。 1.AngularJS的一些基本特性 (1)使用雙大括號

Python學習筆記-2017.5.4

列表 lin 覆蓋範圍 復習 處理 pytho 內部 global txt 本文章記錄學習過程中的細節和心得: 復習所學課程: 1、文件的操作:   打開文件,對文件的操作打開方式有兩種:   第一種:      f = open("test.txt", "r")#以只讀

SAS學習筆記之函數應用

不能 oracle 理解 資料 oracl 函數應用 特殊 put acl 今天在做數據需求的時候遇到一些問題,因為不能夠在數據庫裏面做,僅僅好在SAS裏面實現。這就遇到了一些麻煩,須要使用一些函數實現部分功能,如查找字段中某個特殊字符出現的次數,查找某個字符的位置等,

OpenCV2學習筆記(十五):利用Cmake高速查找OpenCV函數源代碼

one 生成 img log 分享 lan 學習筆記 全部 modules 在使用OpenCV時,在對一個函數的調用不是非常了解的情況下,通常希望查到該函數的官方聲明。而假設想進一步研究OpenCV的函數,則必須深入到源碼。在VS中我們能夠選中想要查

avalonjs 學習筆記1---checkbox

nod item ack lex server ini npm 學習 define 一、vscode 安裝使用 1.vs code+node.js下載安裝 2.在node.js command prompt 中運行 npm install -g live-server 3

Linux學習筆記(三):系統執行級與執行級的切換

查看 用戶操作 回車 water hat ntsysv tde 文件表 config 1.Linux系統與其它的操作系統不同,它設有執行級別。該執行級指定操作系統所處的狀態。Linux系統在不論什麽時候都執行於某個執行級上,且在不同的執行級上執行的程序和服務都不同,所要

Principle of Computing (Python)學習筆記(7) DFS Search + Tic Tac Toe use MiniMax Stratedy

ide out generate depth sku color ati cond with 1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/prin

Java程序猿的JavaScript學習筆記(12——jQuery-擴展選擇器)

type write number article mat 我們 content ace val 計劃按例如以下順序完畢這篇筆記: Java程序猿的JavaScript學習筆記(1——理念) Java程序猿的JavaScript學習筆記(2——屬性復制和繼承) Jav

java學習筆記——String類

通過 ray [] 原理 log spl 2.3 -s 長度 一、概述 ·字符串是一個特殊的對象 ·字符串一旦初始化就不可以被改變 ·String str = "abc"; ·String str1 = new String("abc"); 有什麽區別? package