SSM框架-SpringMVC詳解

2020-12-05 探險家之指路明燈

springmvc概述

Springmvc是spring框架的一個模塊,spring和springmvc無需中間整合層整合。

Springmvc是一個基於mvc的web框架

表現層的三大任務:

URL到controller的映射http請求參數綁定http響應的生成和輸出MVC設計模式

MVC設計模式是一種通用的軟體編程思想。

在MVC設計模式中認為, 任何軟體都可以分為三部分組成:

(1)控制程序流轉的控制器(Controller)

(2)封裝數據處理數據的模型(Model)

(3)負責展示數據的視圖(view)

springmvc的實現原理

(1) .用戶發送請求 至 前端控制器(DispatcherServlet);

提示:DispatcherServlet的作用:接收請求,調用其它組件處理請求,響應結 果,相當於轉發器、中央處理器,是整個流程控制的中心

(2) .前端控制器(DispatcherServlet)收到請求後調用處理器映射器 (HandlerMapping)

處理器映射器(HandlerMapping)找到具體的Controller(可以根據xml配置、註解進 行查找),並將Controller返回給DispatcherServlet;

(3) .前端控制器(DispatcherServlet)調用處理器適配器(HandlerAdapter)。處理 器適配器經過適配調用具體的Controller;(Controller--> service --> Dao --> 資料庫)

Controller執行完成後返回ModelAndView,

提示:Model(模型數據,即Controller處理的結果,Map) View(邏輯視圖名,即 負責展示結果的JSP頁面的名字)

處理器適配器(HandlerAdapter)將controller執行的結果(ModelAndView)返回給前 端控制器(DispatcherServlet);

(4) .前端控制器(DispatcherServlet)將執行的結果(ModelAndView)傳給視圖解析 器(ViewReslover)

視圖解析器(ViewReslover)根據View(邏輯視圖名)解析後返回具體JSP頁面

(5) .前端控制器(DispatcherServlet)根據Model對View進行渲染(即將模型數據 填充至視圖中);

前端控制器(DispatcherServlet)將填充了數據的網頁響應給用戶

springmvc實現

第一步:創建maven項目springmvc

第二步:在pom文件中添加依賴

<dependencies> <!-- 單元測試 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <!-- SpringMVC的jar包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.3.RELEASE</version> </dependency> <!-- servlet 和 jsp的jar包 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <!-- java對象轉換json的工具類 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.1</version> </dependency> --></dependencies>第三步: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_2_5.xsd" id="WebApp_ID" version="2.5"> <!-- 配置springmvc前端控制器, 將所有請求交給springmvc來處理 --> <servlet> <servlet-name>springmvc</servlet-name> <servletclass>org.springframework.web.servlet.DispatcherServlet</servletclass> <!-- 配置springmvc核心配置文件的位置,默認Springmvc的配置文件是在 WEB-INF目錄下,默認的名字為springmvc-servlet.xml,如果要放在其他目錄,則 需要指定如下配置: --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-config.xml</param-value> </init-param> </servlet> <!-- 其中的斜槓(/)表示攔截所有請求(除JSP以外), 所有請求都要經過 springmvc前端控制器 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping></web-app>第四步:創建並配置springmvc-config.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/springbeans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context4.0.xsd"> <!-- 1.配置前端控制器放行靜態資源(html/css/js等,否則靜態資源將無法訪問) --> <mvc:default-servlet-handler/> <!-- 2.配置註解驅動,用於識別註解(比如@Controller) --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 3.配置需要掃描的包:spring自動去掃描 base-package 下的類, 如果掃描到的類上有 @Controller、@Service、@Component等註解, 將會自動將類註冊為bean--> <context:component-scan base-package="com.tedu.controller"> </context:component-scan> <!-- 4.配置內部資源視圖解析器 prefix:配置路徑前綴 suffix:配置文件後綴 --> <bean> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/>第五步:創建HelloController

restController=controller+responsebody:

restController返回json對象

controller返回string:modelandview

controller+responsebody返回json對象

package com.tedu.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/* @Controller,如果當前類所在的包配置了Spring容器包掃描,具有 * 該註解的類,就會作為bean註冊到spring容器中,由spring容器 * 創建實例。 */@Controllerpublic class HelloController { /* @RequestMapping為當前方法配置訪問路徑 * 當瀏覽器訪問http://localhost:8080/day20-springmvc/hello * 如果Controller類上沒有配置訪問路徑,當前項目中所有 * controller中方法上的訪問路徑都不同衝突! */ @RequestMapping("/hello") public String testHello() { System.out.println( "HelloController.testHello()" ); System.out.println( "hello springmvc..." ); //跳轉到 /WEB-INF/pages/home.jsp return "home"; }}第六步:創建並實現home.jsp

在WEB-INF/pages/目錄下,創建home.jsp頁面。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body> <h1>day20-springmvc...home.jsp...</h1></body></html>第七步:發送請求,進行測試

打開瀏覽器,輸入url地址: http://localhost :8080/day16-springmv/hello 地址。

重定向和轉發

重定向redirect和轉發forward的區別

1,重定向瀏覽器地址欄顯示新的地址,轉發地址欄不變

2,重定向可以重定向別的網站,轉發只能轉發到本網站中的方法。

redirect重定向

適用於原先的網頁不繼續提供服務了。

@Controllerpublic class UserController { //重定向,原先的登錄地址 @RequestMapping("/login") public String login() { return "redirect:https://passport.jd.com/new/login.aspx"; }}http://localhost:8080/login

轉發後瀏覽器的地址欄變為轉發後的地址。

在chrome的調試窗口中network中查看status code

forward轉發

轉發後瀏覽器地址欄還是原來的地址。所以轉發前請求的參數在轉發後仍然可以讀取到。

//第一輸入用戶名和密碼 @RequestMapping("/loginByName") @ResponseBody public String loginByNamePwd(String username,String password) { return "login"; } //再次登錄時,還要輸入驗證碼 @RequestMapping("/loginByCode") public String loginByCode(String username,String password,String code) { //判斷驗證碼是否正確 return "forward:/loginByName"; }

restful風格

@PathVariable用於將請求URL中的模板變量映射到功能處理方法的參數上

形成RUSTFul形式,這將是未來的發展趨勢。它更加簡潔,安全。強化URL GET訪問方式。

@RestControllerpublic class OrderCotroller { @RequestMapping("/order/{startTime}/{endTime}") public String searchByDate(@PathVariable String startTime, @PathVariable String endTime) { return "restful startTime="+startTime+",endtime="+endtime; }}瀏覽器訪問的URL

http://localhost :8080/order/2019-10-01/2020-10-10

自動將URL 中模板變量{startTime}和{endTime}綁定到@PathVariable註解的同名參數上,即入參後startTime=「2019-10-01」、endTime=「2020-10-10」。

相關焦點

  • Springmvc框架對json的支持 Java程式設計師必看
    json是一種前後端分離思想所使用的存儲數據的格式,然而使用Springmvc這個框架在對前臺參數處理時會遇到很多坑,下面我們就模擬一下前臺發送json數據看springmvc能否成功接收。這是我的jsp頁面,我們使用Jquery的方式對後端發送json字符串,這就需要引入jquery這個框架, 當我啟動項目是js死活都解析不出來jquery的路徑,經過好長一段時間的忙活終於找出來了問題所在,原來罪魁禍首就是springmvc中的DispatcherServlet,它把我的jquery
  • springMVC框架之Controller組件
    好的各位小夥伴今天繼續來分享springMVC框架今天咱們來一起認識 springMVC 框架的 Controller,咱們之前也說了springMVC 給我們提供了很多的組件,其中需要我們程式設計師來寫的就有controller
  • 計算機畢業設計之全網最好的ssm旅遊網站
    功能圖技術springmvc+spring+mybatismysql資料庫阿里雲簡訊接口支付寶沙箱支付百度echarts圖表插件可以迅速改造為本地特色的旅遊網站
  • 框架和隱形光度轉換及特殊案例處理意見
    由於隱形眼鏡更貼近眼球,跟框架產生的影像有不同,比如沒有看東西縮小等。在屈光度方面也會有不同。光度轉換的依據:通過幾何光學推導出的「頂點焦度換算公式」:簡單說就是:隱形眼鏡光度=框架度數除以(1-0.012乘以框架度數)算出來的隱形度數不是
  • 常見十大Flex調試工具和Flex框架
    常見十大Flex調試工具和Flex框架 Flex有很多值得學習的地方,你對Flex調試工具和Flex框架是否熟悉,本文向大家介紹一些常用的10個Flex調試工具和Flex框架用法。
  • 夾絲玻璃材質製作工藝詳解 夾絲玻璃材質的分類詳解
    按建築標準法規定對防火門做了要求,採用夾絲玻璃與乙種防火門框架相結合,可以作為乙種防火材料使用。夾絲玻璃在使用過程中遭遇損壞,能防止碎片飛散,在很大程度上減少對人員傷害。夾絲玻璃材質製作工藝詳解 工藝技術進步和人們審美意識提升,使得夾絲玻璃在日常生活中被大量使用,夾絲玻璃指的就是採用壓延工藝生產製作出來的一種安全玻璃。成卷金屬絲網由供網裝置展開後送往熔融玻璃液體中,和玻璃液一起通過上、下壓延輥後製成。
  • 3w 多人追更,這個 Java 框架你不會還不知道怎麼...
    作為一個 GitHub Star 破 5w,Fork 超 3w 的 Java 框架,一切都在證明,Spring Boot 已經成為了 Java 程式設計師必備的技能。JavaJava視頻包括入門到精通,以及項目實戰、框架的使用Java電子書、文檔和思維導圖視頻地址:https://space.bilibili.com/346136575Spring Boot實戰文檔【電子書以及思維導圖】【面試題以及答案】如何獲取以上資源▲▲▲
  • 談談Google Polymer以及Web UI框架的未來
    Polymer由加盟Google的原Palm webOS開發團隊打造,是一套以「一切皆組件、最少化代碼量、最少框架限制」為設計理念的Web UI框架。Web Components則提供了一種更徹底的解耦方式,更加方便了UI的開發和模塊化,可以說是Polymer的基礎之一。
  • 淺談Java Web經典三層架構和MVC框架模式
    2.MVC的詳解雖然MVC並不是Java當中獨有的,但是現在幾乎所有的B/S的架構都採用了MVC框架模式,但是MVC在B/S3.MVC模式的用武之地MVC模式被廣泛用於Java的各種框架中,比如Struts2、Spring MVC等等都用到了這種思想。Struts2是基於MVC的輕量級的web應用框架。基於MVC,說明基於Struts2開發的Web應用自然就能實現MVC,也說明Struts2著力於在MVC的各個部分為我們的開發提供相應幫助。
  • 『跟著雨哥學AI』系列:詳解飛槳框架數據管道
    「跟著雨哥學AI」是百度飛槳開源框架近期針對高層API推出的系列課。
  • 更快、更強——解析Hadoop新一代MapReduce框架Yarn
    編者按:對於業界的大數據存儲及分布式處理系統來說,Hadoop 是耳熟能詳的卓越開源分布式文件存儲及處理框架,對於 Hadoop 框架的介紹在此不再累述,隨著需求的發展,Yarn 框架浮出水面, @依然光榮復興的 博客給我們做了很詳細的介紹,讀者通過本文中新舊 Hadoop MapReduce 框架的對比,更能深刻理解新的 yarn 框架的技術原理和設計思想
  • 媒體框架與受眾框架的比較分析
    通過比較媒體框架與受眾框架證實我們的預設:電視媒體在報導特定事件時只呈現此事件的一部分,受眾在收看電視新聞報導時也會有一定的偏向,他們各自有自己特定的框架。本文試從框架理論角度,通過對魏則西事件的電視新聞報導進行個案分析,探討從媒介框架到受眾框架的過程。 二、框架理論 框架理論屬於傳播學的經典理論之一。
  • Java經典面試題Spring是什麼 Spring框架入門詳解
    我們在src下/main/resources下創建配置文件applicationContext.xml 並為其配置xsd約束把上面這一對約束複製到applicationContext.xml 中然後ctrls+s保存,Spring框架到目前為止已經搭建完畢
  • CF手遊M4A1星象屬性技能圖文詳解
    這是一把可以變形的英雄級武器,小編這裡帶來了CF手遊M4A1星象屬性技能圖文詳解,想要了解的玩家們就一起來看看吧! CF手遊M4A1星象屬性技能詳解 創作背景 星象來自於無垠的宇宙之中,蘊藏著無限能量的巨形黑洞將一顆遊蕩的彗星撕裂成碎片吸入體內
  • 從0到1構建邏輯框架,再到批判性思維框架,這是框架的生長!
    從0到1,從無到有,從複雜的邏輯學之中建立一個邏輯框架,這個邏輯框架具有很大的延展性。今天我們試著把批判性思維也整合進到這個邏輯框架!邏輯思維框架與批判性思維框架,合二為一的一個框架。邏輯思維與批判性思維,個人覺得有先後之序。
  • 教程| 斯坦福CS231n 2017最新課程:李飛飛詳解深度學習的框架實現...
    主要內容有:CPU 和 GPU 的對比;深度學習框架簡介;TensorFlow 和 PyTorch 的實例;以及各種深度學習框架的比較。一、 CPU 和 GPUCPU:核芯的數量更少;但是每一個核芯的速度更快,性能更強;更適用於處理連續性(sequential)任務。
  • 開封鍍鋅荷蘭網生產廠家技術詳解
    開封鍍鋅荷蘭網生產廠家技術詳解 ,「g9e2cn6pd」   開封鍍鋅荷蘭網生產廠家技術詳解    你能更好地為你的日子嗎?日子中的籬笆是一種共同的規劃風格,具有的強度,如窗戶防盜設備或其他花園設備。
  • 《缺氧》後期新手玩法詳解 缺氧後期問題詳解
    今天小編為大家帶來了缺氧後期問題分析,下面一起來看看缺氧後期問題詳解吧! 後期問題詳解 1.無限生存問題 看之前討論無限生存的問題都只是在談物質的循環,但還有能... 大家知道缺氧後期有什麼問題嗎?今天小編為大家帶來了缺氧後期問題分析,下面一起來看看缺氧後期問題詳解吧!