欧美视频一区二区三区,免费精品国产福利片,亚洲国产欧美日韩一区二区,337p欧洲亚大胆精品

SpringMVC框架 第1章 SpringMVC 概述

1?SpringMVC 概述

1.1?SpringMVC 概述

? 1)? Spring 為展現層提供的基于 MVC 設計理念的優(yōu)秀的 Web 框架,是目前最主流的

MVC 框架之一

2)Spring3.0 后全面超越 Struts2,成為最優(yōu)秀的 MVC 框架。

3)Spring MVC 通過(guò)一套 MVC 注解,讓 POJO 成為處理請求的控制器,而無(wú)須實(shí)現任

何接口。

4)支持 REST 風(fēng)格的 URL 請求。

5)采用了松散耦合可插拔組件結構,比其他 MVC 框架更具擴展性和靈活性。

1.1?SpringMVC是什么

1)一種輕量級的、基于MVC的Web層應用框架。偏前端而不是基于業(yè)務(wù)邏輯層。Spring框架的一個(gè)后續產(chǎn)品。

2)Spring框架結構圖(新版本):

1.3 SpringMVC能干什么

  • 天生與Spring框架集成,如:(IOC,AOP)
  • 支持Restful風(fēng)格
  • 進(jìn)行更簡(jiǎn)潔的Web層開(kāi)發(fā)
  • 支持靈活的URL到頁(yè)面控制器的映射
  • 非常容易與其他視圖技術(shù)集成,如:Velocity、FreeMarker等等
  • 因為模型數據不存放在特定的API里,而是放在一個(gè)Model里(Map數據結構實(shí)現,因此很容易被其他框架使用)
  • 非常靈活的數據驗證、格式化和數據綁定機制、能使用任何對象進(jìn)行數據綁定,不必實(shí)現特定框架的API
  • 更加簡(jiǎn)單、強大的異常處理
  • 對靜態(tài)資源的支持
  • 支持靈活的本地化、主題等解析

1.4 SpringMVC怎么玩

  • 將Web層進(jìn)行了職責解耦,基于請求-響應模型
  • 常用主要組件
    • DispatcherServlet:前端控制器
    • Controller:處理器/頁(yè)面控制器,做的是MVC中的C的事情,但控制邏輯轉移到前端控制器了,用于對請求進(jìn)行處理
    • HandlerMapping:請求映射到處理器,找誰(shuí)來(lái)處理,如果映射成功返回一個(gè)HandlerExecutionChain對象(包含一個(gè)Handler處理器(頁(yè)面控制器)對象、多個(gè)HandlerInterceptor攔截器對象)
    • View Resolver: 視圖解析器,找誰(shuí)來(lái)處理返回的頁(yè)面。把邏輯視圖解析為具體的View,進(jìn)行這種策略模式,很容易更換其他視圖技術(shù);
      • 如InternalResourceViewResolver將邏輯視圖名映射為JSP視圖
    • LocalResolver:本地化、國際化
    • MultipartResolver:文件上傳解析器
    • HandlerExceptionResolver:異常處理器

1.5 永遠的HelloWorld

  • 新建Web工程,加入 jar 包

spring-aop-4.0.0.RELEASE.jar

spring-beans-4.0.0.RELEASE.jar

spring-context-4.0.0.RELEASE.jar

spring-core-4.0.0.RELEASE.jar

spring-expression-4.0.0.RELEASE.jar

commons-logging-1.1.3.jar

spring-web-4.0.0.RELEASE.jar

spring-webmvc-4.0.0.RELEASE.jar

  • 在xml 中配置 DispatcherServlet

<!-- 配置SpringMVC核心控制器: -->

<servlet>

<servlet-name>springDispatcherServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!-- 配置DispatcherServlet的初始化參數:設置文件的路徑和文件名稱(chēng) -->

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:springmvc.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>springDispatcherServlet</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

  • 解釋配置文件的名稱(chēng)定義規則:

實(shí)際上也可以不通過(guò) contextConfigLocation 來(lái)配置 SpringMVC 的配置文件, 而使用默認的.默認的配置文件為: /WEB-INF/<servlet-name>-servlet.xml

 

? 3)? 加入 Spring MVC 的配置文件:xml

  • 增加名稱(chēng)空間

  • 增加配置

<!-- 設置掃描組件的包: -->

<context:component-scan base-package="com.atguigu.springmvc"/>

 

<!-- 配置映射解析器:如何將控制器返回的結果字符串,轉換為一個(gè)物理的視圖文件-->

<bean id="internalResourceViewResolver"

??class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/views/"/>

<property name="suffix" value=".jsp"/>

</bean>

  • 需要創(chuàng )建一個(gè)入口頁(yè)面,index.jsp

<a href="${pageContext.request.contextPath }/helloworld">Hello World</a>

  • 編寫(xiě)處理請求的處理器,并標識為處理器

package com.atguigu.springmvc.controller;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

 

@Controller ?//聲明Bean對象,為一個(gè)控制器組件

public class HelloWorldController {

 

/**

?* 映射請求的名稱(chēng):用于客戶(hù)端請求;類(lèi)似Struts2中action映射配置的action名稱(chēng)

?* 1. 使用 @RequestMapping 注解來(lái)映射請求的 URL

?* 2. 返回值會(huì )通過(guò)視圖解析器解析為實(shí)際的物理視圖, 對于 InternalResourceViewResolver 視圖解析器,

?* 會(huì )做如下的解析:

?* ????????????????通過(guò) prefix + returnVal + suffix 這樣的方式得到實(shí)際的物理視圖, 然后做轉發(fā)操作.

?* ????????????????/WEB-INF/views/success.jsp

?*/

@RequestMapping(value="/helloworld",method=RequestMethod.GET)

public String helloworld(){

?????System.out.println("hello,world");

?????return "success"; //結果如何跳轉呢?需要配置映射解析器

}????????

}

  • 編寫(xiě)視圖

/WEB-INF/views/success.jsp

<h4>Sucess Page</h4>

  • 部署測試:

http://localhost:8080/SpringMVC_01_HelloWorld/index.jsp

1.6 HelloWorld深度解析

? ?1)? HelloWorld請求流程圖解:

? ? 2)? 一般請求的映射路徑名稱(chēng)和處理請求的方法名稱(chēng)最好一致(實(shí)質(zhì)上方法名稱(chēng)任意)

@RequestMapping(value="/helloworld",method=RequestMethod.GET)

public String helloworld(){

//public String abc123(){

System.out.println("hello,world");

return "success";

}

? ?3)? 演示一個(gè)錯誤

經(jīng)常有同學(xué)會(huì )出現配置上錯誤,把“/WEB-INF/views/配置成了?"/WEB-INF/views"

<bean id="internalResourceViewResolver"

??class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/views/"/>

<property name="suffix" value=".jsp"/>

</bean>

? 4)? 處理請求方式有哪幾種

public enum RequestMethod?{

GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE

}

? 5)? @RequestMapping可以應用在什么地方

@Target({ElementType.METHOD, ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Mapping

public @interface RequestMapping?{…}

6)流程分析:

基本步驟:

  • 客戶(hù)端請求提交到DispatcherServlet
  • 由DispatcherServlet控制器查詢(xún)一個(gè)或多個(gè)HandlerMapping,找到處理請求的Controller
  • DispatcherServlet將請求提交到Controller(也稱(chēng)為Handler)
  • Controller調用業(yè)務(wù)邏輯處理后,返回ModelAndView
  • DispatcherServlet查詢(xún)一個(gè)或多個(gè)ViewResoler視圖解析器,找到ModelAndView指定的視圖
  • 視圖負責將結果顯示到客戶(hù)端