亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

SpringMVC學(xué)習(xí)筆記

roundstones / 1354人閱讀

摘要:是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)。協(xié)議,是一個(gè)無(wú)狀態(tài)協(xié)議,即所有的狀態(tài)都保存在服務(wù)器端。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是表現(xiàn)層狀態(tài)轉(zhuǎn)化。具體說(shuō),就是協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞。

一、SpringMVC概述

Spring為展現(xiàn)層提供的基于MVC設(shè)計(jì)理念的優(yōu)秀的Web框架,是目前最主流的MVC框架之一

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

SpringMVC通過(guò)一套MVC注解,讓POJO成為處理請(qǐng)求的控制器,而無(wú)須實(shí)現(xiàn)任何接口

支持REST風(fēng)格的URL請(qǐng)求

采用了松散耦合可挺拔組件結(jié)構(gòu),比其他MVC框架更具擴(kuò)展性和靈活性

二、HelloWorld

步驟:

maven依賴(lài)



    4.0.0

    com.meituan.spring
    mvc
    1.0-SNAPSHOT

    
        
            org.springframework
            spring-web
            4.3.14.RELEASE
        

        
            org.springframework
            spring-core
            4.3.14.RELEASE
        

        
            org.springframework
            spring-context
            4.3.14.RELEASE
        

        
            org.springframework
            spring-webmvc
            4.3.14.RELEASE
        

    

    
        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.5.1
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.apache.maven.plugins
                maven-war-plugin
            
        
    

在Module Settings->Project Settings->Artifacts->output layout中,找到WEB-INF目錄,確認(rèn)在其下存在lib目錄,不存在則創(chuàng)建,將library files添加進(jìn)去

web.xml



    
        contextConfigLocation
        /WEB-INF/applicationContext.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
        dispatcher
        org.springframework.web.servlet.DispatcherServlet
        1
    
    
        dispatcher
        /
    

dispatcher-servlet.xml

可以通過(guò)contextConfigLocation來(lái)指定SpringMVC配置文件的位置

使用默認(rèn)規(guī)則:/WEB-INF/-servlet.xml




    

    

    
        
        
    

注意:前后綴一定不要出錯(cuò)

Controller類(lèi)

   import org.springframework.stereotype.Controller;
   import org.springframework.web.bind.annotation.RequestMapping;
   import org.springframework.web.bind.annotation.ResponseBody;

   @Controller
   public class HelloWorld {
   
       @RequestMapping("/helloworld")
       public String hello() {
           System.out.println("hello world, hello springmvc !");
           return "success";
       }
   }

index.jsp文件

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 
  
    $Title$
  
  
    hello world!
  
 

視圖jsp文件

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 
  
    $Title$
  
  
    

success page!

配置好Tomcat

值得注意的是,在deployment->Deploy at the server startup中添加artifact

啟動(dòng)Tomcat即可

三、使用@RequestMapping映射請(qǐng)求

源碼

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping
3.1 使用@RequestMapping映射請(qǐng)求

可以用來(lái)修飾方法,還可以用來(lái)修飾類(lèi)

類(lèi)定義處:提供初步的請(qǐng)求映射信息,相對(duì)于WEB應(yīng)用的根目錄

方法處:提供進(jìn)一步的細(xì)分映射信息,相對(duì)于類(lèi)定義處的URL,若類(lèi)定義處未標(biāo)@RequestMapping,則方法處標(biāo)記的URL相對(duì)于WEB應(yīng)用的根目錄

DispatcherServlet截獲請(qǐng)求后,就通過(guò)控制器上@RequestMapping提供的映射信息確定請(qǐng)求所對(duì)應(yīng)的處理方法

3.2 映射請(qǐng)求參數(shù)、請(qǐng)求方法或請(qǐng)求頭

@RequestMapping除了可以使用請(qǐng)求URL映射請(qǐng)求外,還可以使用請(qǐng)求方法、請(qǐng)求參數(shù)及請(qǐng)求頭映射請(qǐng)求

@RequestMapping的value、method、params及heads分別表示請(qǐng)求URL、請(qǐng)求方法、請(qǐng)求參數(shù)及請(qǐng)求頭的映射條件,它們之間是與的關(guān)系,聯(lián)合使用多個(gè)條件可讓請(qǐng)求映射更加精確化

params和headers支持簡(jiǎn)單的表達(dá)式

param1:表示請(qǐng)求必須包含名為param1的請(qǐng)求參數(shù)

!param1:表示請(qǐng)求不能包含名為param1的請(qǐng)求參數(shù)

param1!=value1表示請(qǐng)求包含名為param1的請(qǐng)求參數(shù),但其值不能為value1

{"param1=value1", "param2"}:請(qǐng)求必須包含名為param1和param2的兩個(gè)請(qǐng)求參數(shù),且param1參數(shù)的值必須為value1

Ant風(fēng)格資源地址支持3種匹配符:

?:匹配文件名中的一個(gè)字符

* :匹配文件名中的任意字符

**:匹配多層路徑

3.3 支持Ant風(fēng)格(了解即可)

@RequestMapping 還支持 Ant 風(fēng)格的 URL :

/user/*/createUser:匹配 /user/aaa/createUser、/user/bbb/createUser 等 URL

/user/**/createUser:匹配 /user/createllser、/user/aaa/bbb/createUser 等 URL

/user/createllser??:匹配 /user/createllseraa、/user/createllserbb 等 URL

3.4 @PathVariable映射URL綁定的占位符

帶 占 位 符 的 URL是Spring3.0新增的功能,該功能在SpringMVC向REST目標(biāo)挺進(jìn)發(fā)展過(guò)程中具有里程碑的意義

通過(guò)@PathVariable可以將URL中占位符參數(shù)綁定到控制器處理方法的入?yún)⒅?URL中的{xxx丨占位符可以通過(guò) @PathVariable("xxx")綁定到操作方法的入?yún)⒅小?/p>

    @RequestMapping("/delete/{id}")
    public String delete(@PathVariable("id") Integer id) {
        System.out.println(id);
        return "redirect:/user/list.action";
    }
3.5 REST

REST 即Representational State Transfer。 (資源)表現(xiàn)層狀態(tài)轉(zhuǎn)化。是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)。它結(jié)構(gòu)清晰、符合標(biāo)準(zhǔn)、易于理解、擴(kuò)展方便, 所以正得到越來(lái)越多網(wǎng)站的采用

資 源 ( Resources):網(wǎng)絡(luò)上的一個(gè)實(shí)體,或者說(shuō)是網(wǎng)絡(luò)上的一個(gè)具體信息。它 可以是一段文本、 一 張圖片、一首歌曲、一種服務(wù),總之就是一個(gè)具體的存在。 可以用一個(gè)URI (統(tǒng)一資源定位符)指向它,每種資源對(duì)應(yīng)一個(gè)特定的URU要 獲取這個(gè)資源,訪(fǎng)問(wèn)它的URI就可以,因此URI即為每一個(gè)資源的獨(dú)一無(wú)二的識(shí)別符。

表現(xiàn)層 ( Representation):把資源具體呈現(xiàn)出來(lái)的形式,叫做它的表現(xiàn)層 (Representation) ^比如,文本可以用txt格式表現(xiàn),也可以用HTML格式、XML格式、JSON格式表現(xiàn),甚至可以采用二進(jìn)制格式

狀態(tài)轉(zhuǎn)化 ( StateTransfer):每發(fā)出一個(gè)請(qǐng)求,就代表了客戶(hù)端和服務(wù)器的一 次交互過(guò)程。HTTP協(xié)議,是一個(gè)無(wú)狀態(tài)協(xié)議,即所有的狀態(tài)都保存在服務(wù)器端。因此,如果客戶(hù)端想要操作服務(wù)器,必須通過(guò)某種手段,讓服務(wù)器端發(fā)生“狀態(tài)轉(zhuǎn)化”( State Transfer)。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是“ 表現(xiàn)層狀態(tài)轉(zhuǎn)化”。具體說(shuō),就是HTTP協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞:GET、POST、PUT、DELETE。它們分別對(duì)應(yīng)四種基本操作:GET用來(lái)獲取資源,POST用來(lái)新建資源,PUT用來(lái)更新資源,DELETE用來(lái)刪除資源。

HiddenHttpMethodFilter: 瀏覽器 form 表單只支持 GET 與 POST請(qǐng)求,而 DELETE、PUT等method并不支持,Spring3.0添加了一個(gè)過(guò)濾器,可以將這些請(qǐng)求轉(zhuǎn)換為標(biāo)準(zhǔn)的http方法,使得支持GET、POST、PUT與DELETE請(qǐng)求

web.xml

    
    
        HiddenHttpMethodFilter
        org.springframework.web.filter.HiddenHttpMethodFilter
    
    
    
        HiddenHttpMethodFilter
        /*
    

jsp

添加一個(gè)form,增加一個(gè)隱藏域name="_method",指明請(qǐng)求的類(lèi)型,值取PUT或DELETE

    

java

    @RequestMapping("/delete/{id}")
    public String delete(@PathVariable("id") Integer id) {
        userDao.deleteUserById(id);
        return "success";
    }

在Tomcat8以上版本,會(huì)出現(xiàn)問(wèn)題,需要在jsp文件中添加

<%@ page contentType="text/html;charset=UTF-8" language="java"  isErrorPage="true"%>

指定屬性isErrorPage="true"

四、映射請(qǐng)求參數(shù) & 請(qǐng)求參數(shù) 4.1 請(qǐng)求處理方法簽名

Spring MVC通過(guò)分析處理方法的簽名,將HTTP請(qǐng)求信息綁定到處理方法的相應(yīng)入?yún)⒅小?/p>

Spring MVC對(duì)控制器處理方法簽名的限制是很寬松的, 幾乎可以按喜歡的任何方式對(duì)方法進(jìn)行簽名。

必要時(shí)可以對(duì)方法及方法入?yún)?biāo)注相應(yīng)的注解(@PathVariable、@RequestParam、 @RequestHeader等)、Spring MVC框架會(huì)將HTTP請(qǐng)求的信息綁定到相應(yīng)的方法入?yún)⒅校⒏鶕?jù)方法的返回值類(lèi)型做出相應(yīng)的后續(xù)處理。

4.2 使用@RequestParam綁定請(qǐng)求參數(shù)值

在處理方法入?yún)⑻幨褂聾RequestParam可以把請(qǐng)求參數(shù)傳遞給請(qǐng)求方法

value:參數(shù)名

required:是否必須。默認(rèn)為true,表示請(qǐng)求參數(shù)中必須包含對(duì)應(yīng) 的參數(shù),若不存在,將拋出異常

defaultValue:請(qǐng)求參數(shù)的默認(rèn)值

4.3 使用@RequestHeader綁定請(qǐng)求報(bào)頭的屬性值(了解即可)

請(qǐng)求頭包含了若干個(gè)屬性,服務(wù)器可據(jù)此獲知客戶(hù)端的信息,通過(guò)@RequestHeader即可將請(qǐng)求頭中的屬性值綁定到處理方法的入?yún)⒅?/p>

4.4 使用CookieValue綁定請(qǐng)求中的cookie值(了解即可)

@CookieValue可讓處理方法入?yún)⒔壎硞€(gè)cookie值

4.5 使用POJO對(duì)象綁定請(qǐng)求參數(shù)值

SpringMVC會(huì)按請(qǐng)求參數(shù)名和POJO屬性名進(jìn)行自動(dòng)匹配,自動(dòng)為該對(duì)象填充屬性值,支持級(jí)聯(lián)屬性

如:dept.deptId、dept.address.tel等

4.6 使用Servlet API作為入?yún)?/b>

MVC的handler訪(fǎng)求可以接受以下Servlet API類(lèi)型的參數(shù)

HttpServletRequest

HttpServletResponse

HttpSession

java.security.Principal

Locale

InputStream

OutputStream

Reader

Writer

五、處理模式數(shù)據(jù)

Spring MVC提供了以下幾種途徑輸出模型數(shù)據(jù):

ModelAndView:處理方法返回值類(lèi)型為ModelAndView 時(shí),方法體即可通過(guò)該對(duì)象添加模型數(shù)據(jù)

Map及Model: 入?yún)閛rg.springframework.ui.Model、 org.springframework.ui.ModelMap或 java.util.Map時(shí),處理 方法返回時(shí),Map中的數(shù)據(jù)會(huì)自動(dòng)添加到模型中。

@SessionAttributes:將模型中的某個(gè)屬性暫存到 HttpSession中,以便多個(gè)請(qǐng)求之間可以共享這個(gè)屬性

@ModelAttribute:方法入?yún)?biāo)注該注解后,入?yún)⒌膶?duì)象就會(huì)放到數(shù)據(jù)模型中

5.1 ModelAndView

SpringMVC會(huì)把 ModelAndView 里model 中的數(shù)據(jù)放入到request域?qū)ο? requestScope )中

控制器處理方法的返回值如果為ModelAndView,則其既包含視圖信息,也包含模型數(shù)據(jù)信息。

添加模型數(shù)據(jù):

MoelAndView addObject(String attributeName, Object attributeValue)

ModelAndView addAIIObject(Map modelMap)

設(shè)置視圖:

void setView(View view)

void setViewName(String viewName)

5.2 Map及Model

Spring MVC在內(nèi)部使用了一個(gè) org.springframework.ui.Model 接口存儲(chǔ)模型數(shù)據(jù)

具體步驟

Spring MVC在調(diào)用方法前會(huì)創(chuàng)建一個(gè)隱 含的模型對(duì)象作為模型數(shù)據(jù)的存儲(chǔ)容器。

如果方法的入?yún)镸ap或Model類(lèi)型,Spring MVC會(huì)將隱含模型的引用傳遞給這些入?yún)?。在方法體內(nèi),開(kāi)發(fā)者可以通過(guò)這個(gè)入?yún)?duì)象訪(fǎng)問(wèn)到模型中的所有數(shù) 據(jù),也可以向模型中添加新的屬性數(shù)據(jù)。

5.3 將模型數(shù)據(jù)存入Session中

若希望在多個(gè)請(qǐng)求之間共用某個(gè)模型屬性數(shù)據(jù),則可以在控制器類(lèi)上標(biāo)注一個(gè) @SessionAttributes,Spring MVC 將在模型中對(duì)應(yīng)的屬性暫存到HttpSession中。

@SessionAttributes除了可以通過(guò)屬性名指定需要放到會(huì)話(huà)中的屬性外,還可以通過(guò)模型屬性的對(duì)象類(lèi)型指定哪些模型屬性需要放到session會(huì)話(huà)中

@SessionAttributes(types=User.class)會(huì)將隱含模型中所有類(lèi)型 為User.class的屬添加到會(huì)話(huà)中。

@SessionAttributes(value={“user1”, “user2”})

@SessionAttributes(types={User.class, Dept.class})

@SessionAttributes(value={“user1”, “user2” } , types={Dept.class})

5.4 @ModelAttribute

在方法定義上使用@ModelAttribute注解: Spring MVC 在調(diào)用目標(biāo)處理方法前,會(huì)先逐個(gè)調(diào)用在方法級(jí)上標(biāo)注了@ModelAttribute 的方法,因此對(duì)于一個(gè)controller映射多個(gè)URL的用法來(lái)說(shuō),要謹(jǐn)慎使用。

在方法的入?yún)⑶笆褂聾ModelAttribute注解:

可以從隱含對(duì)象中獲取隱含的模型數(shù)據(jù)中獲取對(duì)象,再將請(qǐng)求參數(shù)綁定到對(duì)象中,再傳入入?yún)?/p>

將方法入?yún)?duì)象添加到模型中

@ModelAttribute 注解也可以來(lái)修飾目標(biāo)方法POJO類(lèi)型的入?yún)?,?value 屬性值有如下的作用:

SpringMVC會(huì)使用 value 屬性值在implicitModel中查找對(duì)應(yīng)的對(duì)象,若存在則會(huì)直接傳入到目標(biāo)方法的入?yún)⒅?/p>

SpringMVC會(huì)以value為key,POJO類(lèi)型的對(duì)象為value,存入到request中

5.4.1 @ModelAttribute運(yùn)行原理
@ModelAttribute
public void getUser(@RequestParam(value="id", required=false) Integer id, Map map) {
    System.out.println("modelAttribute method");
    
    if (id != null) {
        //模擬從數(shù)據(jù)庫(kù)中獲取對(duì)象
        User user = new User(1, "Tom", "123456", "Tom@meituan.com", 12);
        System.out.println("從數(shù)據(jù)庫(kù)中獲取一個(gè)對(duì)象: " + user);
        map.put("user", user);
    }
}

運(yùn)行流程:

1、 執(zhí)行@ModelAttribute注解修飾的方法;從數(shù)據(jù)庫(kù)中取出對(duì)象,把對(duì)象放入到Map中,鍵為user

2、SpringMVC從Map中取出User對(duì)象,并把表單的請(qǐng)求參數(shù)賦值給該User對(duì)象對(duì)應(yīng)的屬性

3、SpringMVC把上述對(duì)象傳入目標(biāo)方法的參數(shù)

注意:在@ModelAttribute修飾的方法中,放入到Map時(shí)的鍵需要和目標(biāo)方法入?yún)㈩?lèi)型的第一個(gè)字母小寫(xiě)的字符串一致!

5.4.2 源碼分析的流程

調(diào)用@ModelAttribute注解修飾的方法,實(shí)際上把@ModelAttribute方法中Map中的數(shù)據(jù)放在了implicitModel中

解析請(qǐng)求處理器的目標(biāo)參數(shù),實(shí)際上該目標(biāo)參數(shù)來(lái)自于WebDataBinder對(duì)象的target屬性,

創(chuàng)建WebDataBinder對(duì)象:

確定objectName屬性:若傳入的attrName屬性值為"",則objectName為類(lèi)名第一個(gè)字母小寫(xiě)

注意:attrName,若目標(biāo)方法的POJO屬性使用了@ModelAttribute來(lái)修飾,則attrName值即為@ModelAttribute的value屬性

確定target的值

在implicitModel中查找attrName對(duì)應(yīng)的屬性值。若存在,ok;若不存在,則驗(yàn)證當(dāng)前handler是否使用了@SessionAttributes進(jìn)行修飾,若使用了,則嘗試從Session中獲取attrName所對(duì)應(yīng)的屬性值,若session中沒(méi)有對(duì)應(yīng)的屬性值,則拋出異常;若handler沒(méi)有使用@SessionAttribute進(jìn)行修飾,或@SessionAttributes中沒(méi)有使用value值指定的key和attrName相匹配,則通過(guò)反射創(chuàng)建POJO對(duì)象

SpringMVC把表單的請(qǐng)求參數(shù)賦給了WebDataBinder的target對(duì)應(yīng)的屬性

SpringMVC會(huì)把WebDataBinder的attrName和target賦值給implicitModel

把WebDataBinder的target作為參數(shù)傳遞給目標(biāo)參數(shù)的入?yún)?/p> 5.4.3 如何確定目標(biāo)方法POJO類(lèi)型的入?yún)?/b>

確定一個(gè)key

若目標(biāo)方法的POJO類(lèi)型的參數(shù)沒(méi)有使用@ModelAttribute作為修飾,則key為POJO類(lèi)名第一個(gè)字母的小寫(xiě)

若使用了@ModelAttribute來(lái)修飾,則key為@ModelAttribute注解的value屬性值

在implicitModel中查找key對(duì)應(yīng)的對(duì)象,若存在,則作為入?yún)魅?p>若@ModelAttribute標(biāo)記的方法在Map中保存過(guò),且key和1確定的key一致,則會(huì)獲取到

若implicitModel中不存在key對(duì)應(yīng)的對(duì)象,則檢查當(dāng)前的handler是否使用@SessionAttributes注解修飾,若使用了該注解,且@SessionAttributes注解的value屬性值中包含了key,則會(huì)從HttpSession中來(lái)獲取key所對(duì)應(yīng)的value值,若存在則直接傳入目標(biāo)方法的入?yún)⒅?;若不存在則將拋出異常

若handler沒(méi)有標(biāo)識(shí)@SessionAttributes注解的value值中不包含key,則會(huì)通過(guò)反射來(lái)創(chuàng)建POJO類(lèi)型的參數(shù),傳入為目標(biāo)方法的參數(shù)

SpringMVC會(huì)把key和POJO類(lèi)型的對(duì)象保存到implicitModel,進(jìn)而保存到request中

5.5 @SessionAttributes 注解引發(fā)的異常
org.springframework.web.HttpSessionRequiredException: Session attribute "user" required - not found in session

如果在處理類(lèi)定義處標(biāo)注了@SessionAttributes(“xxx”), 則嘗試從session會(huì)話(huà)中獲取該屬性,并將其賦給該入?yún)?,然后再用?qǐng)求消息填充該入?yún)?duì)象。如果在會(huì)話(huà)中找不到對(duì)應(yīng)的屬性,則拋出HttpSessionRequiredException 異常

5.6 視圖和視圖解析器 5.6.1 視圖解析流程分析

請(qǐng)求處理方法執(zhí)行完成后,最終返回一個(gè)ModelAndView 對(duì)象。對(duì)于那些返回String, View或ModeMap等類(lèi)型的處理方法,Spring MVC也會(huì)在內(nèi)部將它們裝配成一個(gè) ModelAndView對(duì)象,它包含了邏輯名和模型對(duì)象的視圖

SpringMVC借助視圖解析器(ViewResolver)得到最終的視圖對(duì)象(View),最終的視圖可以是JSP,也可能是 Excel、JFreeChart等各種表現(xiàn)形式的視圖

對(duì)于最終究竟采取何種視圖對(duì)象對(duì)模型數(shù)據(jù)進(jìn)行渲染,處理器并不關(guān)心,處理器工作重點(diǎn)聚焦在生產(chǎn)模型數(shù)據(jù)的工作上,從而實(shí)現(xiàn)MVC的充分解耦

5.6.2 視圖

視圖的作用是渲染模型數(shù)據(jù),將模型里的數(shù)據(jù)以某種形式呈現(xiàn)給客 戶(hù)。

為了實(shí)現(xiàn)視圖模型和具體實(shí)現(xiàn)技術(shù)的解耦,Spring在org.springframework.web.servlet 包中定義了一個(gè)高度抽象的 View接口

視圖對(duì)象由視圖解析器負(fù)責(zé)實(shí)例化。由于視圖是無(wú)狀態(tài)的,所以他們 不會(huì)有線(xiàn)程安全的問(wèn)題

常用的視圖實(shí)現(xiàn)類(lèi):?

5.6.3 視圖解析器(ViewResolver)

視圖解析器的作用是將邏輯視圖轉(zhuǎn)為物理視圖,所有的視圖解析器都必須實(shí)現(xiàn)ViewResolver接口。

視圖解析器的作用比較單一:將邏輯視圖解析為一個(gè)具體的視圖對(duì)象

SpringMVC為邏輯視圖名的解析提供了不同的策略,可以在Spring WEB上下文中配置一種或多種解析策略,并指定他們之間的先后順序。每一種映射策略對(duì)應(yīng)一個(gè)具體的視圖解析器實(shí)現(xiàn)類(lèi)。

程序員可以選擇一種視圖解析器或混用多種視圖解析器。可以通過(guò)order屬性指定解析器的優(yōu)先順序,order越小優(yōu)先級(jí)越高

SpringMVC會(huì)按視圖解析器順序的優(yōu)先順序?qū)壿嬕晥D名進(jìn)行解析,直到解析成功并返回視圖對(duì)象,否則拋出ServletException異常。

5.6.4 使用mvc:view-controller不經(jīng)控制器直接跳轉(zhuǎn)到頁(yè)面

若希望直接響應(yīng)通過(guò)SpringMVC渲染的頁(yè)面,可以使用mvc:view-controller標(biāo)簽實(shí)現(xiàn):

       
  
      

那么現(xiàn)在可以直接在某一頁(yè)面中通過(guò)請(qǐng)求路徑”success”訪(fǎng)問(wèn)到/WEB-INF/views/success.jsp頁(yè)面(因?yàn)槲覀兩厦媾渲昧艘晥D解析器將邏輯視圖解析為前綴為/WEB-INF/views/,后綴為.jsp的物理視圖)。但是,這種情況下通過(guò)控制器就無(wú)法映射到請(qǐng)求了,需要再進(jìn)行如下配置:

   
      
5.6.5 關(guān)于重定向

一般情況下,控制器方法返回字符串類(lèi)型的值會(huì)被當(dāng)成邏輯視圖名處理,但如果返回的字符串中帶forward:或redirect:前綴時(shí),SpringMVC會(huì)對(duì)它們進(jìn)行特殊處理:將forward: 和redirect: 當(dāng)成指示符,其后的字符串作為URL 來(lái)處理。示例如下:?

index.jsp:

Test Redirect

controller:

@Controller
@RequestMapping("/springmvc")
public class SpringMVCTest {

    @RequestMapping("/testRedirect")
    public String testRedirect() {
        System.out.println("testRedirect");
        return "redirect:/index.jsp";
    }
}

即可重定向到index.jsp。也可在redirect:/后添加控制器方法的映射路徑,重定向到該目標(biāo)方法。

六、SpringMVC表單標(biāo)簽&處理靜態(tài)資源

通過(guò)SpringMVC的表單標(biāo)簽可以實(shí)現(xiàn)將模型數(shù)據(jù) 中的屬性和HTML表單元素相綁定,以實(shí)現(xiàn)表單

數(shù)據(jù)更便捷編輯和表單值的回顯

6.1 表單標(biāo)簽

form:input、 form:passwordN form:hidden、 form:textarea :對(duì)應(yīng) HTML 表車(chē)的 text、password、hidden、 textarea 標(biāo)簽

form:radiobutton :單選框組件標(biāo)簽,當(dāng)表單bean對(duì)應(yīng)的屬性值和value值相等時(shí),單選框破選中

form:radiobuttons :單選框組標(biāo)簽,用于構(gòu)造多個(gè)單選

items :可以是一個(gè) List、String[]或 Map

item Value :指定radio 的value值??梢允羌现衎ean的一個(gè)屬性值

itemLabel :指定 radio 的 label 值

delimiter :多個(gè)單選框可以通過(guò)delimiter指定分隔符

form:checkbox :復(fù)選框組件。用于構(gòu)造單個(gè)復(fù)選框

form:checkboxs :用于構(gòu)造多個(gè)復(fù)選框。使用方式同form:radiobuttons 標(biāo)簽

form:select :用于@造下拉框組件。使用方式同form:radiobuttons 標(biāo)簽

form:option :下拉框選項(xiàng)組件標(biāo)簽。使用方式同 form:radiobuttons 標(biāo)簽

form:errors :顯示表單組件或數(shù)據(jù)校驗(yàn)所對(duì)應(yīng)的錯(cuò)誤

6.2 處理靜態(tài)資源

優(yōu)雅的REST風(fēng)格的資源URL不希望帶.html或.do等后綴

若將DispatcherServlet請(qǐng)求映射配置為/,則Spring MVC將捕獲 WEB容器的所有請(qǐng)求,包括靜態(tài)資源的請(qǐng)求,SpringMVC會(huì)將他 們當(dāng)成一個(gè)普通請(qǐng)求處理,因找不到對(duì)應(yīng)處理器將導(dǎo)致錯(cuò)誤。

可以在SpringMVC的配置文件中配置的方式解決靜態(tài)資源的問(wèn)題:

將在 SpringMVC 上下文中定義一個(gè)DefaultServletHttpRequestHandler,它會(huì)對(duì)進(jìn)入DispatcherServlet 的請(qǐng)求進(jìn)行篩查,如果發(fā)現(xiàn)是沒(méi)有經(jīng)過(guò)映射的請(qǐng)求,就將該請(qǐng)求交由WEB 應(yīng)用服務(wù)器默認(rèn)的Servlet處理,如果不是靜態(tài)資源的請(qǐng)求,才由DispatcherServlet 繼續(xù)處理

一般WEB應(yīng)用服務(wù)器默認(rèn)的Servlet的名稱(chēng)都是default。若所使用的 WEB服務(wù)器的默認(rèn)Servlet名稱(chēng)不是default,則需要通過(guò)default-servlet-name 屬性顯式指定

七、數(shù)據(jù)轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗(yàn) 7.1 數(shù)據(jù)轉(zhuǎn)換 7.1.1 數(shù)據(jù)綁定流程

Spring MVC主框架將ServletRequest對(duì)象及目標(biāo)方法的入?yún)?shí)例傳遞給WebDataBinderFactory實(shí)例,以創(chuàng)建DataBinder實(shí)例對(duì)象

DataBinder調(diào)用裝配在Spring MVC上下文中的
ConversionService組件進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換、數(shù)據(jù)格式化工作。將Servlet中的請(qǐng)求信息填充到入?yún)?duì)象中

調(diào)用Validator組件對(duì)已經(jīng)綁定了請(qǐng)求消息的入?yún)?duì)象進(jìn)行數(shù)據(jù)合法性校驗(yàn),并最終生成數(shù)據(jù)綁定結(jié)果BindingData 對(duì)象

Spring MVC抽取BindingResult中的入?yún)?duì)象和校驗(yàn)錯(cuò)誤對(duì)象,將它們賦給處理方法的響應(yīng)入?yún)?/p>

SpringMVC通過(guò)反射機(jī)制對(duì)目標(biāo)處理方法進(jìn)行解析,將請(qǐng)求消息綁定到處理方法的入?yún)⒅?。?shù)據(jù)綁定的核心部件是DataBinder,運(yùn)行機(jī)制如下:

7.1.2 關(guān)于mvc:annotation-driven

會(huì)自動(dòng)注冊(cè)RequestMappingHandlerMapping、RequestMappingHandlerAdapter 與ExceptionHandlerExceptionResolver 三個(gè)bean。

還將提供以下支持:

支持使用ConversionService實(shí)例對(duì)表單參數(shù)進(jìn)行類(lèi)型轉(zhuǎn)換

支持使用 @NumberFormat annotation、@DateTimeFormat注解完成數(shù)據(jù)類(lèi)型的格式化

支持使用@Valid注解對(duì)JavaBean實(shí)例進(jìn)行JSR 303驗(yàn)證

支持使用 @RequestBody和 @ResponseBody 注解

7.1.3 @InitBinder注解

由@lnitBinder標(biāo)識(shí)的方法,可以對(duì)WebDataBinder對(duì)

象進(jìn)行初始化。WebDataBinder是DataBinder的子類(lèi),用
于完成由表單字段到JavaBean屬性的綁定

@lnitBinder方法不能有返回值,它必須聲明為void。

@lnitBinder方法的參數(shù)通常是是WebDataBinder

7.2 數(shù)據(jù)格式化

對(duì)屬性對(duì)象的輸入/輸出進(jìn)行格式化,從其本質(zhì)上講依然屬于“類(lèi)型轉(zhuǎn)換”的范疇。

Spring在格式化模塊,定義了一個(gè)實(shí)現(xiàn)ConversionService接口的FormattingConversionService 實(shí)現(xiàn)類(lèi),該實(shí)現(xiàn)類(lèi)擴(kuò)展了 GenericConversionService,因此它既具有類(lèi)型轉(zhuǎn)換的功能,又具有格式化的功能

FormattingConversionService 擁有一個(gè)FormattingConversionServiceFactroyBean 工廠類(lèi),后者用于在 Spring上下文中構(gòu)造前者

FormattingConversionServiceFactroyBean 內(nèi)部已經(jīng)注冊(cè)了:

NumberFormatAnnotationFormatterFactroy :支持對(duì)數(shù)字類(lèi)型的屬性,使用 @NumberFormat 注解

JodaDateTimeFormatAnnotationFormatterFactroy :支持對(duì)日期類(lèi)型的屬性使用@DateTimeFormat注解

裝配了 FormattingConversionServiceFactroyBean 后,就可

以在Spring MVC入?yún)⒔壎澳P蛿?shù)據(jù)輸出時(shí)使用注解驅(qū)動(dòng)
了。 默認(rèn)創(chuàng)建的ConversionService 實(shí)例即為FormattingConversionServiceFactroyBean

7.2.1 日期格式化

@DateTimeFormat 注解可對(duì)java.util.Date、java.util.Calendar、java.long.Long 時(shí)間類(lèi)型進(jìn)行標(biāo)注:

pattern屬性:類(lèi)型為字符串。指定解析/格式化字段數(shù)據(jù)的模式,如:”yyyy-MM-dd hh:mm:ss”

iso屬性:類(lèi)型為DateTimeFormat.lSO。指定解析/格式化字段數(shù)據(jù)的ISO模式,包括四種MSO.NONE (不使用)默認(rèn)、ISO.DATE(yyyy-MM-dd)、IS〇.TIME(hh:mm:ss.SSSZ)、ISO.DATE_TIME(yyyy-MM-dd hh:mm:ss.SSSZ)

style屬性:字符串類(lèi)型。通過(guò)樣式指定日期時(shí)間的格式,由兩位字符組成,第一位表示日期的格式,第二位表示時(shí)間的格式:S :短日期/時(shí)間格式、M :中日期/時(shí)間格式、L :長(zhǎng)日期/時(shí)間格式、F :完整日期/時(shí)間格式、忽略日期或時(shí)間格式

7.2.2

@NumberFormat可對(duì)類(lèi)似數(shù)字類(lèi)型的屬性進(jìn)行標(biāo)注,它擁有兩個(gè)互斥的屬性:

style :類(lèi)型為NumberFormat.Style。用于指定樣式類(lèi)型,包括三種:Style.NUMBER (正常數(shù)字類(lèi)型)、Style.CURRENCY (貨幣類(lèi)型)、Style.PERCENT (百分?jǐn)?shù)類(lèi)型)

pattern :類(lèi)型為String,自定義樣式,如patter="#,###";

7.3 數(shù)據(jù)校驗(yàn) 7.3.1 JSR 303

JSR 303是Java為Bean數(shù)據(jù)合法性校驗(yàn)提供的標(biāo)準(zhǔn)框架,它已經(jīng)包含在JavaEE 6.0中

JSR 303通過(guò)在Bean屬性上標(biāo)注類(lèi)似于@NotNull、@Max等標(biāo)準(zhǔn)的注解指定校驗(yàn)規(guī)則,并通過(guò)標(biāo)準(zhǔn)的驗(yàn)證接口對(duì)Bean進(jìn)行驗(yàn)證

7.3.2 SpringMVC數(shù)據(jù)校驗(yàn)

Spring 4.0擁有自己獨(dú)立的數(shù)據(jù)校驗(yàn)框架,同時(shí)支持JSR 303標(biāo)準(zhǔn)的校驗(yàn)框架。

Spring在進(jìn)行數(shù)據(jù)綁定時(shí),可同時(shí)調(diào)用校驗(yàn)框架完成數(shù)據(jù)校驗(yàn)工作。在Spring MVC中,可直接通過(guò)注解驅(qū)動(dòng)的方式進(jìn)行數(shù)據(jù)校驗(yàn)

Spring 的 LocalValidatorFactroyBean 既實(shí)現(xiàn)了 Spring 的Validator 接口,也實(shí)現(xiàn)了 JSR 303 的 Validator 接口。只要在Spring容器中定義了一個(gè)LocalValidatorFactoryBean,即可將其注入到需要數(shù)據(jù)校驗(yàn)的Bean中。

Spring本身并沒(méi)有提供JSR303的實(shí)現(xiàn),所以必須將JSR303的實(shí)現(xiàn)者的jar包放到類(lèi)路徑下。

在已經(jīng)標(biāo)注了 JSR303 注解的表單/命令對(duì)象前標(biāo)注一個(gè) @Valid , Spring MVC 框架在將請(qǐng)求參數(shù)綁定到該入?yún)?duì)象后,就會(huì)調(diào)用校驗(yàn)框架根據(jù)注解聲明的校驗(yàn)規(guī)則實(shí)施校驗(yàn)

Spring MVC 是通過(guò)對(duì)處理方法簽名的規(guī)約來(lái)保存校驗(yàn)結(jié)果的:前一個(gè)表單/命令對(duì)象的校驗(yàn)結(jié)果保存到隨后的入?yún)⒅?,這個(gè)保存校驗(yàn)結(jié)果的入?yún)⒈仨毷?BindingResult 或 Errors 類(lèi)型,這兩個(gè)類(lèi)都位于 org.springframework.validation 包中

需校驗(yàn)的Bean對(duì)象和其綁定結(jié)果對(duì)象或錯(cuò)誤對(duì)象時(shí)成對(duì)出現(xiàn)的,它們之間不允許聲明其他的入?yún)?/strong>

Errors接口提供了獲取錯(cuò)誤信息的方法,如getErrorCount()或getFieldErrors(String field)

BindingResult擴(kuò)展了Errors接口

7.3.3 在目標(biāo)方法中獲取校驗(yàn)結(jié)果

在表單/命令對(duì)象類(lèi)的屬性中標(biāo)校驗(yàn)注解,在處理方法對(duì)應(yīng)的入?yún)⑶疤砑覢Valid,SpringMVC就會(huì)實(shí)施校驗(yàn)并將校驗(yàn)結(jié)果保存在被校驗(yàn)入?yún)?duì)象之后的BindingResult或Errors入?yún)⒅?/p> 7.3.4 在頁(yè)面上顯示錯(cuò)誤

Spring MVC 除了會(huì)將表單/命令對(duì)象的校驗(yàn)結(jié)果保存到對(duì) 應(yīng)的 BindingResu|t或 Errors對(duì)象中外,還會(huì)將所有校驗(yàn)結(jié)果保存到“隱含模型”

即使處理方法的簽名中沒(méi)有對(duì)應(yīng)于表單/命合對(duì)象的結(jié)果入?yún)?校驗(yàn)結(jié)果也會(huì)保存在“隱含對(duì)象”中。

隱含模型中的所有數(shù)據(jù)最終將通過(guò) Http Servletrequest的屬性列表暴露給 JSP 視圖對(duì)象,因此在 JSP 中可以獲取錯(cuò)誤信息

在JSP頁(yè)面上可通過(guò)顯示錯(cuò)誤消息

八、文件上傳

Spring MVC為文件上傳提供了直接的支持,這種支持是通過(guò)即插即用的MultipartResolver實(shí)現(xiàn)的。 Spring用 Jakarta Commons FileUpload 技術(shù)實(shí)現(xiàn)了一個(gè) MultipartResolver 實(shí)現(xiàn)類(lèi):CommonsMultipartResovler

Spring MVC上下文中默認(rèn)沒(méi)有裝配MultipartResovler,因此默認(rèn)情況下不能處理文件的上傳工作,如果想使用Spring 的文件上傳功能,需現(xiàn)在上下文中配置MultipartResolver

配置MultipartResolver

defaultEncoding:必須和用戶(hù) JSP 的 pageEncoding 屬性 一致,以便正確解析表單的內(nèi)容

為了讓 CommonsMultipartResovler正確工作,必須先將 Jakarta Commons FileUpload & Jakarta Commons io 的類(lèi)包添加到類(lèi)路徑下。

九、攔截器

Spring MVC也可以使用攔截器對(duì)請(qǐng)求進(jìn)行攔截處理,用戶(hù) 可以自定義攔截器來(lái)實(shí)現(xiàn)特定的功能,自定義的攔截器必須實(shí)現(xiàn) Handlerlnterceptor 接口

preHandle():這個(gè)方法在業(yè)務(wù)處理器處理請(qǐng)求之前被調(diào)用,在該 方法中對(duì)用戶(hù)請(qǐng)求request進(jìn)行處理。如果程序員決定該攔截器對(duì) 請(qǐng)求進(jìn)行攔截處理后還要調(diào)用其他的攔截器,或者是業(yè)務(wù)處理器去 進(jìn)行處理,則返回true ;如果程序員決定不需要再調(diào)用其他的組件 去處理請(qǐng)求,則返回false。

postHandle():這個(gè)方法在業(yè)務(wù)處理器處理完請(qǐng)求后,但是DispatcherServlet向客戶(hù)端返回響應(yīng)前被調(diào)用,在該方法中對(duì)用戶(hù)請(qǐng)求request進(jìn)行處理。

afterCompletion():這個(gè)方法在 DispatcherServlet 完全處理完請(qǐng)求后被調(diào)用,可以在該方法中進(jìn)行一些資源清理的操作。

攔截器方法執(zhí)行順序

攔截器配置

多個(gè)攔截器的執(zhí)行順序


十、 異常處理

Spring MVC通過(guò) HandlerExceptionResolver 處理程序的異常,包括Handler映射、數(shù)據(jù)綁定以及目標(biāo)方法執(zhí)行時(shí)發(fā)生的異常

Spring MVC提供的 HandlerExceptionResolver 的實(shí)現(xiàn)類(lèi)

10.1 HandlerExceptionResolver

DispatcherServlet 默認(rèn)裝配的HandlerExceptionResolver

沒(méi)有使用配置

使用配置

10.2 ExceptionHandlerExceptionResolver

主要處理Handler中用@ExceptionHandler注解定義的方法。

@ExceptionHandler注解定義的方法優(yōu)先級(jí)問(wèn)題:例如發(fā)生的是NullPointerException,但是聲明的異常有 RuntimeException和Exception,此時(shí)會(huì)根據(jù)異常的最近繼承關(guān)系找到繼承深度最淺的那個(gè)@ExceptionHandler 注解方法,即標(biāo)記了 RuntimeException的方法

ExceptionHandlerMethodResolver 內(nèi)部若找不到@ExceptionHandler注解的話(huà),會(huì)找 @ControllerAdvice 中的@ExceptionHandler 注解方法

10.3 ResponseStatusExceptionResolver

在異常及異常父類(lèi)中找到@ResponseStatus注解,然后使用這個(gè)注解的屬性進(jìn)行處理。

定義一個(gè)@ResponseStatus注解修飾的異常類(lèi)

若在處理器方法中拋出了上述異常: 若 ExceptionHandlerExceptionResolver 不解析上述異常。由于觸發(fā)的異常 UnauthorizedException 帶有@ResponseStatus 注解。因此會(huì)被 ResponseStatusExceptionResolver 解析到。最后響應(yīng)HttpStatus_UNAUTH〇RIZED代碼給客戶(hù)端。HttpStatus_UNAUTH〇RIZED代表響應(yīng)碼401,無(wú)權(quán)限。 關(guān)于其他的響應(yīng)碼請(qǐng)參考HttpStatus枚舉類(lèi)型源碼。

10.4 DefaultHandlerExceptionResolver

對(duì)一些特殊的異常進(jìn)行處理,比如NoSuchRequestHandlingMethodException、 HttpReques tMethodNotSupportedException、 HttpMediaTypeNotSuppo rtedException、 HttpMediaTypeNotAcceptableException 等

10.5 SimpleMappingExceptionResolver

如果希望對(duì)所有異常進(jìn)行統(tǒng)一處理,可以使用SimpleMappingExceptionResolver,它將異常類(lèi)名映射為視圖名,即發(fā)生異常時(shí)使用對(duì)應(yīng)的視圖報(bào)告異常

十一、SpringMVC運(yùn)行流程

十二、在Spring環(huán)境下使用SpringMVC

需要進(jìn)行Spring 整合SpringMVC嗎

還是否需要再加入Spring的IOC容器?

是否需要在web.xml文件中配置啟動(dòng)Spring IOC容器的ContextLoaderListener?

需要:通常情況下,類(lèi)似于數(shù)據(jù)源、事務(wù)、整合其他框架都是放在Spring 的配置文件中(而不是放在SpringMVC的配置文件中),實(shí)際上放入Spring配置文件對(duì)應(yīng)的IOC容器中的還有Service和Dao(推薦)

不需要:都放在SpringMVC的配置文件中,也可以分多個(gè)Spring的配置文件,然后使用import節(jié)點(diǎn)導(dǎo)入其他的配置文件(不推薦)

12.1 Bean的重復(fù)創(chuàng)建

若Spring的IOC容器和SpringMVC的IOC容器掃描的包有重合的部分,就會(huì)導(dǎo)致有的bean會(huì)被創(chuàng)建2次

解決:

使Spring的IOC容器掃描的包和SpringMVC的IOC容器掃描的包沒(méi)有重合的部分

使用 exclude-filter 和 include-filter 子節(jié)點(diǎn)來(lái)規(guī)定只能掃描的注解

12.2 SpringMVC與Spring容器的關(guān)系

多個(gè)Spring l〇C容器之間可以設(shè)置為父子關(guān)系,以實(shí)現(xiàn)良好的解耦。

Spring MVC WEB層容器可作為“業(yè)務(wù)層” Spring 容器的子容器:即WEB層容器可以引用業(yè)務(wù)層容器的Bean,而業(yè)務(wù)層容器卻訪(fǎng)問(wèn)不到WEB層容器的Bean

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/76552.html

相關(guān)文章

  • angularjs+springMvc學(xué)習(xí)筆記

    摘要:回調(diào)說(shuō)白了,就是把函數(shù)當(dāng)參數(shù)傳給另一根函數(shù),在另一個(gè)函數(shù)執(zhí)行時(shí)調(diào)用此函數(shù)例如,在下面這段代碼中,上面定義了兩個(gè)函數(shù)和,下面的方法請(qǐng)求成功執(zhí)行,失敗執(zhí)行異步異步的原理我看了網(wǎng)上的一些博客和例子,大都以定時(shí)任務(wù)為例子說(shuō)明,但具體的原理我還是不太 回調(diào) 說(shuō)白了,就是把函數(shù)當(dāng)參數(shù)傳給另一根函數(shù),在另一個(gè)函數(shù)執(zhí)行時(shí)調(diào)用此函數(shù)例如,在下面這段代碼中,上面定義了兩個(gè)函數(shù)success和error,下...

    dreamGong 評(píng)論0 收藏0
  • angularjs+springMvc學(xué)習(xí)筆記

    摘要:回調(diào)說(shuō)白了,就是把函數(shù)當(dāng)參數(shù)傳給另一根函數(shù),在另一個(gè)函數(shù)執(zhí)行時(shí)調(diào)用此函數(shù)例如,在下面這段代碼中,上面定義了兩個(gè)函數(shù)和,下面的方法請(qǐng)求成功執(zhí)行,失敗執(zhí)行異步異步的原理我看了網(wǎng)上的一些博客和例子,大都以定時(shí)任務(wù)為例子說(shuō)明,但具體的原理我還是不太 回調(diào) 說(shuō)白了,就是把函數(shù)當(dāng)參數(shù)傳給另一根函數(shù),在另一個(gè)函數(shù)執(zhí)行時(shí)調(diào)用此函數(shù)例如,在下面這段代碼中,上面定義了兩個(gè)函數(shù)success和error,下...

    rozbo 評(píng)論0 收藏0
  • springMvc學(xué)習(xí)筆記(2)

    摘要:筆記這周學(xué)習(xí)安裝和配置和,為測(cè)試做準(zhǔn)備。該軟件由創(chuàng)建,并于年首次公開(kāi)發(fā)布。同名公司成立于年,以提供支持。從年月開(kāi)始,的開(kāi)發(fā)由贊助,而年月至年月期間,其開(kāi)發(fā)由贊助。最后發(fā)現(xiàn)是因?yàn)橹械闹械膽?yīng)該為大寫(xiě)將其改為及解決了此問(wèn)題。 筆記 這周學(xué)習(xí)安裝和配置nginx和redis,為測(cè)試做準(zhǔn)備。showImg(https://segmentfault.com/img/bVbpdYF?w=660&h=...

    Shonim 評(píng)論0 收藏0
  • 設(shè)計(jì)模式學(xué)習(xí)筆記:適配器模式

    摘要:二適配器模式概念適配器模式是一種結(jié)構(gòu)型模式,它的思想是將一個(gè)接口轉(zhuǎn)化為另一個(gè)接口。適配器模式包含四個(gè)角色對(duì)象定義所需要的方法請(qǐng)求者負(fù)責(zé)使用對(duì)象定義的方法來(lái)做具體的處理被適配者以持有方法的角色適配器使用被適配者的方法來(lái)滿(mǎn)足對(duì)象的需要。 一、結(jié)構(gòu)型設(shè)計(jì)模式 1、概念結(jié)構(gòu)型設(shè)計(jì)模式描述如何將類(lèi)或者對(duì)象結(jié)合在一起形成更為復(fù)雜,功能更為強(qiáng)大的結(jié)構(gòu)。 2、分類(lèi)(1)類(lèi)結(jié)構(gòu)模型:這種結(jié)構(gòu)模型關(guān)心類(lèi)的...

    CompileYouth 評(píng)論0 收藏0
  • SpringMVC入門(mén)筆記

    摘要:入門(mén)筆記簡(jiǎn)介是一種基于的實(shí)現(xiàn)了設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類(lèi)型的輕量級(jí)框架,是系開(kāi)源項(xiàng)目中的一個(gè),和配合使用。配置在中需要添加使用的和映射規(guī)則。入門(mén)較快,而掌握起來(lái)相對(duì)較難。 SpringMVC入門(mén)筆記 1. 簡(jiǎn)介 Spring MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類(lèi)型的輕量級(jí)Web框架 ,是Spring系開(kāi)源項(xiàng)目中的一個(gè),和IoC配合使用。通過(guò)策略接口,Spring...

    zhaochunqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<