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執行流程(執行原理),如下圖所示:
- 回憶Struts2執行流程:
3、springmvc第一個程式案例
3.1、不使用檢視解析器+使用檢視解析器
(1)使用eclipse,建立一個動態的web工程 其中Dynamic web module version版本選擇 2.5
,這樣相容性好一些; Default output folder設定為 WebRoot\WEB-INF\classes
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包
(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