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

資訊專欄INFORMATION COLUMN

SpringMVC入門就這么簡單

SKYZACK / 699人閱讀

摘要:也就是說映射器就是用于處理什么樣的請求提交給處理。這和是一樣的提交參數(shù)的用戶名編號(hào)提交配置處理請求注冊映射器包框架接收參數(shù)設(shè)置無參構(gòu)造器,里邊調(diào)用方法,傳入要封裝的對(duì)象這里的對(duì)象就表示已經(jīng)封裝好的了對(duì)象了。

什么是SpringMVC?

SpringMVC是Spring家族的一員,Spring是將現(xiàn)在開發(fā)中流行的組件進(jìn)行組合而成的一個(gè)框架!它用在基于MVC的表現(xiàn)層開發(fā),類似于struts2框架

為什么要使用SpringMVC?

我們在之前已經(jīng)學(xué)過了Struts2這么一個(gè)基于MVC的框架....那么我們已經(jīng)學(xué)會(huì)了Struts2,為啥要要學(xué)習(xí)SpringMVC呢???

下面我們來看一下Struts2不足之處:

有漏洞【詳細(xì)可以去搜索】

運(yùn)行速度較慢【比SpringMVC要慢】

配置的內(nèi)容較多【需要使用Struts.xml文件】

比較重量級(jí)

基于這么一些原因,并且業(yè)內(nèi)現(xiàn)在SpringMVC已經(jīng)逐漸把Struts2給替代了...因此我們學(xué)習(xí)SpringMVC一方面能夠讓我們跟上業(yè)界的潮流框架,一方面SpringMVC確實(shí)是非常好用!

可以這么說,Struts2能做的東西,SpringMVC也能夠做....

回顧Struts2開發(fā)

在Struts2中,我們的開發(fā)特點(diǎn)是這樣的:

Action類繼承著ActionSupport類【如果要使用Struts2提供的額外功能,就要繼承它】

Action業(yè)務(wù)方法總是返回一個(gè)字符串,再由Struts2內(nèi)部通過我們手寫的Struts.xml配置文件去跳轉(zhuǎn)到對(duì)應(yīng)的view

Action類是多例的,接收Web傳遞過來的參數(shù)需要使用實(shí)例變量來記住,通常我們都會(huì)寫上set和get方法

Struts2的工作流程

Struts2接收到request請求

將請求轉(zhuǎn)向我們的過濾分批器進(jìn)行過濾

讀取Struts2對(duì)應(yīng)的配置文件

經(jīng)過默認(rèn)的攔截器之后創(chuàng)建對(duì)應(yīng)的Action【多例】

執(zhí)行完業(yè)務(wù)方法就返回給response對(duì)象

SpringMVC快速入門 導(dǎo)入開發(fā)包

前6個(gè)是Spring的核心功能包【IOC】,第7個(gè)是關(guān)于web的包,第8個(gè)是SpringMVC包

org.springframework.context-3.0.5.RELEASE.jar

org.springframework.expression-3.0.5.RELEASE.jar

org.springframework.core-3.0.5.RELEASE.jar

org.springframework.beans-3.0.5.RELEASE.jar

org.springframework.asm-3.0.5.RELEASE.jar

commons-logging.jar

org.springframework.web-3.0.5.RELEASE.jar

org.springframework.web.servlet-3.0.5.RELEASE.jar

編寫Action

Action實(shí)現(xiàn)Controller接口

public class HelloAction implements Controller {
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        return null;
    }
    
}

我們只要實(shí)現(xiàn)handleRequest方法即可,該方法已經(jīng)說了request和response對(duì)象給我們用了。這是我們非常熟悉的request和response對(duì)象。然而該方法返回的是ModelAndView這么一個(gè)對(duì)象,這是和Struts2不同的。Struts2返回的是字符串,而SpringMVC返回的是ModelAndView

ModelAndView其實(shí)他就是將我們的視圖路徑和數(shù)據(jù)封裝起來而已【我們想要跳轉(zhuǎn)到哪,把什么數(shù)據(jù)存到request域中,設(shè)置這個(gè)對(duì)象的屬性就行了】。

public class HelloAction implements Controller {
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {


        ModelAndView modelAndView = new ModelAndView();

        //跳轉(zhuǎn)到hello.jsp頁面。
        modelAndView.setViewName("/hello.jsp");
        return modelAndView;
    }
}
注冊核心控制器

在Struts2中,我們想要使用Struts2的功能,那么就得在web.xml文件中配置過濾器。而我們使用SpringMVC的話,我們是在web.xml中配置核心控制器


    
        DispatcherServlet
        org.springframework.web.servlet.DispatcherServlet

        
        
            contextConfigLocation
            classpath:hello.xml
        
    
    
        DispatcherServlet
        
        *.action
    
創(chuàng)建SpringMVC控制器

我們在hello.xml配置文件中把SpringMVC的控制器創(chuàng)建出來

    
    
訪問

當(dāng)我們在瀏覽器訪問http://localhost:8080/hello.action的時(shí)候,Spring會(huì)讀取到我們的訪問路徑,然后對(duì)比一下我們的配置文件中是否有配置/hello.action,如果有。那么就交由對(duì)應(yīng)的Action類來進(jìn)行處理。Action類的業(yè)務(wù)方法將其請求輸出到hello.jsp頁面上。

SpringMVC工作流程

用戶發(fā)送請求

請求交由核心控制器處理

核心控制器找到映射器,映射器看看請求路徑是什么

核心控制器再找到適配器,看看有哪些類實(shí)現(xiàn)了Controller接口或者對(duì)應(yīng)的bean對(duì)象

將帶過來的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,格式化等等操作

找到我們的控制器Action,處理完業(yè)務(wù)之后返回一個(gè)ModelAndView對(duì)象

最后通過視圖解析器來對(duì)ModelAndView進(jìn)行解析

跳轉(zhuǎn)到對(duì)應(yīng)的JSP/html頁面

上面的工作流程中,我們是沒有講過映射器,適配器,視圖解析器這樣的東西的。但是SpringMVC的環(huán)境還是被我們搭建起來了。

下面就由我來一個(gè)一個(gè)來介紹他們是有什么用的!

映射器

我們在web.xml中配置規(guī)定只要是.action為后綴的請求都是會(huì)經(jīng)過SpringMVC的核心Servlet

當(dāng)我們接收到請求的時(shí)候,我們發(fā)現(xiàn)是hello.action,是會(huì)經(jīng)過我們的核心Servlet的,那么核心Servlet就會(huì)去找有沒有專門的Action類來處理hello.action請求的。

也就是說:映射器就是用于處理“什么樣的請求提交給Action”處理。【默認(rèn)可省略的】.....

其實(shí)我們在快速入門的例子已經(jīng)配置了:name屬性就是規(guī)定了hello.action到HelloAction控制器中處理!

    
    

映射器默認(rèn)的值是這樣的:

  
      
       

當(dāng)然了,上面我們在創(chuàng)建控制器的時(shí)候【也就是HelloAction】可以不使用name屬性來指定路徑,可以使用我們的映射器來配置。如以下的代碼:

    

    
    
        
            
                helloAction
            
        
    

當(dāng)我們需要多個(gè)請求路徑都交由helloAction控制器來處理的話,我們只要添加prop標(biāo)簽就行了!

    
        
            
                helloAction
                helloAction
            
        
    

適配器

當(dāng)我們映射器找到對(duì)應(yīng)的Action來處理請求的時(shí)候,核心控制器會(huì)讓適配器去找該類是否實(shí)現(xiàn)了Controller接口。【默認(rèn)可省略的】

也就是說:適配器就是去找實(shí)現(xiàn)了Controller接口的類

    
    
視圖解析器

我們把結(jié)果封裝到ModelAndView以后,SpringMVC會(huì)使用視圖解析器來對(duì)ModelAndView進(jìn)行解析。【默認(rèn)可省略的】

也有一種情況是不能省略的。我們在快速入門的例子中,將結(jié)果封裝到ModelAndView中,用的是絕對(duì)真實(shí)路徑!如果我們用的是邏輯路徑,那么就必須對(duì)其配置,否則SpringMVC是找不到對(duì)應(yīng)的路徑的。

那什么是邏輯路徑呢???我們在Struts2中,返回的是"success"這樣的字符串,從而跳轉(zhuǎn)到success.jsp這樣的頁面上。我們就可以把"success"稱作為邏輯路徑

在Action中返回hello,hello是一個(gè)邏輯路徑。需要我們使用視圖解析器把邏輯路基補(bǔ)全

    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {


        ModelAndView modelAndView = new ModelAndView();

        //跳轉(zhuǎn)到hello.jsp頁面。
        modelAndView.setViewName("hello");
        return modelAndView;
    }

如果不使用視圖解析器的話,那么就會(huì)找不到頁面:

因此,我們需要配置視圖解析器


    
    
        
        
        
        
        
    
控制器 ParameterizableViewController

我們在之前使用Struts2的時(shí)候,如果僅僅要跳轉(zhuǎn)到某個(gè)WEB-INF/JSP頁面,也要寫業(yè)務(wù)方法。而業(yè)務(wù)方法也僅僅是返回一個(gè)簡單的字符串。

如下的代碼:


public String home(){

    return "home";
}
    

        
            /WEB-INF/jsp/nsfw/{1}.jsp
        
    

在SpringMVC中,如果僅僅是跳轉(zhuǎn)到某個(gè)視圖上,我們可以省略該Action和業(yè)務(wù)方法。配置的Action只要繼承著ParameterizableViewController這個(gè)類就行了!

    
    
        
        
    

2017年9月26日15:57:45 現(xiàn)在看來, 好像還是在方法上寫更好。我覺得統(tǒng)一管理起來會(huì)更加方便

AbstractCommandController

到目前為止,我們都沒有將SpringMVC是怎么接收web端傳遞過來的參數(shù)的。

我們在Struts2中,只要在Action類上寫對(duì)應(yīng)的成員變量,給出對(duì)應(yīng)的set和get方法。那么Struts2就會(huì)幫我們把參數(shù)封裝到對(duì)應(yīng)的成員變量中,是非常方便的。

那么我們在SpringMVC中是怎么獲取參數(shù)的呢????我們是將Action繼承AbstractCommandController這么一個(gè)類的。

public class HelloAction extends AbstractCommandController {
    
    @Override
    protected ModelAndView handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, BindException e) throws Exception {
           
        return null;
    } 
}

在講解該控制器之前,首先我們要明白SpringMVC控制器一個(gè)與Struts2不同的地方:SpringMVC的控制器是單例的,Struts2的控制器是多例的!

也就是說:Struts2收集變量是定義成員變量來進(jìn)行接收,而SpringMVC作為單例的,是不可能使用成員變量來進(jìn)行接收的【因?yàn)闀?huì)有多個(gè)用戶訪問,就會(huì)出現(xiàn)數(shù)據(jù)不合理性】!

那么SpringMVC作為單例的,他只能通過方法的參數(shù)來進(jìn)行接收對(duì)應(yīng)的參數(shù)!只有方法才能保證不同的用戶對(duì)應(yīng)不同的數(shù)據(jù)

實(shí)體

實(shí)體的屬性要和web頁面上的name提交過來的名稱是一致的。這和Struts2是一樣的!

public class User {

    private String id;
    private String username;

    public User() {
    }

    public User(String id, String username) {
        this.id = id;
        this.username = username;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return "User{" +
                "id="" + id + """ +
                ", username="" + username + """ +
                "}";
    }
}
提交參數(shù)的JSP
用戶名:
編號(hào)
配置Action處理請求
    


    
    
        
            
                helloAction
            
        
    
Action接收參數(shù)
public class HelloAction extends AbstractCommandController {

    /*設(shè)置無參構(gòu)造器,里邊調(diào)用setCommandClass方法,傳入要封裝的對(duì)象*/
    public HelloAction() {
        this.setCommandClass(User.class);
    }

    /**
     *
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o  這里的對(duì)象就表示已經(jīng)封裝好的了User對(duì)象了。!
     * @param e
     * @return
     * @throws Exception
     */
    @Override
    protected ModelAndView handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, BindException e) throws Exception {

        User user = (User) o;

        System.out.println(user);

        ModelAndView modelAndView = new ModelAndView();
        //跳轉(zhuǎn)到ok.jsp
        modelAndView.setViewName("/WEB-INF/ok.jsp");
        //將數(shù)據(jù)封裝到ModelAndView中
        modelAndView.addObject("USER", user);
        return modelAndView;
    }
}
效果:

小總結(jié)

Struts2和SpringMVC存值的區(qū)別:

SpringMVC的工作流程:

用戶發(fā)送HTTP請求,SpringMVC核心控制器接收到請求

找到映射器看該請求是否交由對(duì)應(yīng)的Action類進(jìn)行處理

找到適配器看有無該Action類

Action類處理完結(jié)果封裝到ModelAndView中

通過視圖解析器把數(shù)據(jù)解析,跳轉(zhuǎn)到對(duì)應(yīng)的JSP頁面

控制器介紹了兩種:

ParameterizableViewController

能夠?qū)崿F(xiàn)跳轉(zhuǎn)到WEB-INF下資源,并不用寫處理方法

AbstractCommandController

可以實(shí)現(xiàn)對(duì)參數(shù)數(shù)據(jù)的封裝

如果文章有錯(cuò)的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號(hào):Java3y

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

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

相關(guān)文章

  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時(shí)間才會(huì)更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號(hào):Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡單 注解就這么簡單 Druid數(shù)據(jù)庫連接池...

    KevinYan 評(píng)論0 收藏0
  • 移動(dòng)商城項(xiàng)目【總結(jié)】

    摘要:有必要建一個(gè)資源服務(wù)器存放靜態(tài)資源。一些用戶級(jí)別的數(shù)據(jù)輕量可以考慮存儲(chǔ)在中。存儲(chǔ)的是值,可以通過來對(duì)和對(duì)象之間的轉(zhuǎn)換如果我們的數(shù)據(jù)是在后臺(tái)傳過去或者轉(zhuǎn)換而成的,在前臺(tái)上并沒有做什么改變的話。 移動(dòng)商城項(xiàng)目總結(jié) 移動(dòng)商城項(xiàng)目是我第二個(gè)做得比較大的項(xiàng)目,該項(xiàng)目系統(tǒng)來源于傳智Java168期,十天的視頻課程(想要視頻的同學(xué)關(guān)注我的公眾號(hào)就可以直接獲取了) 通過這次的項(xiàng)目又再次開闊了我的視野,...

    BlackHole1 評(píng)論0 收藏0
  • SpringBoot自動(dòng)配置原理

    摘要:開啟自動(dòng)配置功能后文詳解這個(gè)注解,學(xué)過的同學(xué)應(yīng)該對(duì)它不會(huì)陌生,就是掃描注解,默認(rèn)是掃描當(dāng)前類下的。簡單來說,這個(gè)注解可以幫助我們自動(dòng)載入應(yīng)用程序所需要的所有默認(rèn)配置。簡單理解這二者掃描的對(duì)象是不一樣的。 前言 只有光頭才能變強(qiáng)。 文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y 回顧前面Spring的文章(以學(xué)習(xí)...

    Rainie 評(píng)論0 收藏0
  • 慕課網(wǎng)_《SpringMVC數(shù)據(jù)綁定入門》學(xué)習(xí)總結(jié)

    摘要:數(shù)據(jù)綁定入門學(xué)習(xí)總結(jié)時(shí)間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼個(gè)人學(xué)習(xí)源碼第一章課程介紹數(shù)據(jù)綁定入門概述數(shù)據(jù)綁定概念來自百度百科簡單綁定是將一個(gè)用戶界面元素控件的屬性綁定到一個(gè)類型對(duì)象實(shí)例上的某個(gè)屬性的方法。 《SpringMVC數(shù)據(jù)綁定入門》學(xué)習(xí)總結(jié) 時(shí)間:2017年2月19日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.co...

    Karrdy 評(píng)論0 收藏0
  • SpringMVC【開發(fā)Controller】詳解

    摘要:是使用攔截器來自動(dòng)幫我們完成中文亂碼的問題的。這是我的首頁當(dāng)然了,基于注解和基于來開發(fā),都是通過映射器適配器和視圖解析器的。能夠控制請求路徑和請求方式一個(gè)控制器寫多個(gè)業(yè)務(wù)方法到目前為止,我們都是一個(gè)控制器寫一個(gè)業(yè)務(wù)方法,這肯定是不合理的。 前言 本文主要是講解在Controller中的開發(fā),主要的知識(shí)點(diǎn)有如下: 編碼過濾器 使用注解開發(fā) 注解@RequestMapping詳解 業(yè)務(wù)方...

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

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

0條評(píng)論

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