国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
SpringMVC入門就這么簡單

什么是SpringMVC?

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

這里寫圖片描述

為什么要使用SpringMVC?

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

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

  • 有漏洞【詳細可以去搜索】

  • 運行速度較慢【比SpringMVC要慢】

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

  • 比較重量級

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

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

回顧Struts2開發(fā)

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

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

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

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

Struts2的工作流程

這里寫圖片描述

  • Struts2接收到request請求

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

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

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

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


SpringMVC快速入門

導入開發(fā)包

前6個是Spring的核心功能包【IOC】,第7個是關(guān)于web的包,第8個是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實現(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; }}

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

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

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)建出來

訪問

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

這里寫圖片描述


SpringMVC工作流程

這里寫圖片描述

  • 用戶發(fā)送請求

  • 請求交由核心控制器處理

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

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

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

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

  • 最后通過視圖解析器來對ModelAndView進行解析

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

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

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

映射器

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

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

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

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

映射器默認的值是這樣的:

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

helloAction

當我們需要多個請求路徑都交由helloAction控制器來處理的話,我們只要添加prop標簽就行了!

helloAction helloAction

這里寫圖片描述


適配器

當我們映射器找到對應(yīng)的Action來處理請求的時候,核心控制器會讓適配器去找該類是否實現(xiàn)了Controller接口?!灸J可省略的】

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

視圖解析器

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

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

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

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

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; }

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

這里寫圖片描述

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


控制器

ParameterizableViewController

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

如下的代碼:

public String home(){ return 'home';}
/WEB-INF/jsp/nsfw/{1}.jsp

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

這里寫圖片描述

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


AbstractCommandController

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

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

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

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

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

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

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

實體

實體的屬性要和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

用戶名:
編號

配置Action處理請求

helloAction

Action接收參數(shù)

public class HelloAction extends AbstractCommandController { /*設(shè)置無參構(gòu)造器,里邊調(diào)用setCommandClass方法,傳入要封裝的對象*/ public HelloAction() { this.setCommandClass(User.class); } /** * * @param httpServletRequest * @param httpServletResponse * @param o 這里的對象就表示已經(jīng)封裝好的了User對象了。! * @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ū)別:

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SpringMVC學習筆記(二)
第四章 Controller接口控制器詳解(5)——跟著開濤學SpringMVC
Spring MVC【入門】就這一篇!
springMVC入門
SpringMVC架構(gòu)淺析
SpringMVC中使用Interceptor攔截器順序
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服