首先是要一定說(shuō)明的是,這倒是說(shuō)明是什么?對(duì)吧Spring MVC 是SpringFrameWork的后續(xù)產(chǎn)品,并且已經(jīng)融
入到Spring Web Flow中同時(shí)Spring MVC 分離了控制器,模型對(duì)象,分派器(其實(shí)我不知道這是什么)以及處理程
序?qū)ο蟮慕巧?這種分離讓它們更容易進(jìn)行定制.說(shuō)了這些很官方的話,我都有點(diǎn)暈了,呵呵,先上一個(gè)原理流程圖吧,相信會(huì)比較直觀!
Spring MVC 原理圖
Spring MVC 對(duì)應(yīng)原理流程步驟:
1.Web客戶端 --> DispatcherServlet 用戶發(fā)送一個(gè)請(qǐng)求到,首先到DispatcherServlet中(先交給前端控制器,進(jìn)行全局的流程控制)
2.DispatcherServlet --> HandlerMapping 解析用戶在前臺(tái)提交的請(qǐng)求,并按照我們的要求分配到指定的Controller(相當(dāng)于struts2中的action)
3.DispatcherServlet --> Controller 進(jìn)入指定的Controller對(duì)象,執(zhí)行里面的方法,返回需要的字符串(ModelAndView),在Controller里面需要對(duì)bean進(jìn)行操作,也就是會(huì)和Model進(jìn)行交互
4.DispatcherServlet --> ViewResolver 解析從Controller中返回的字符串,并轉(zhuǎn)換為有效的JSP路徑
5.DispatcherServlet --> JSP 將轉(zhuǎn)換好的JSP路徑,指定到特定的頁(yè)面
6.JSP --> Web客戶端 將某一個(gè)特定的頁(yè)面顯示在客戶端界面
好了,以上就是Spring MVC的流程,是不是有了一定的認(rèn)識(shí)了,不急,后面還有呢...
有了基本的認(rèn)識(shí), 那就開始編碼吧!(我是用的是Springframework-3.2.8)
大家都知道的,打開編譯器,準(zhǔn)備開始開發(fā)一個(gè)項(xiàng)目的時(shí)候,第一步就是新建項(xiàng)目。哈哈!
是不是會(huì)有一點(diǎn)無(wú)語(yǔ),呵呵,不是別的,只是活躍一下氣氛,原因你懂的。。
好吧,這一步就不列入編碼步驟里了吧,下面正式開始!
第一步:添加架包
是不是覺得架包很少啊,沒錯(cuò),這就是Spring MVC的特點(diǎn),繼續(xù)讓它顛覆你的想法吧
第二步:一定是web.xml文件了
這里就是上面提到的DispatcherServlet -- 前端控制器
后面的"*.do"就是用來(lái)攔截頁(yè)面用戶的請(qǐng)求,這里規(guī)定凡是以 .do 結(jié)尾的請(qǐng)求都會(huì)命中,當(dāng)然這個(gè)可以自己定義,需要說(shuō)明的是,不管自己定義的是什么,一定要遵守,呵呵,是不是突然覺得好有道理!
第三步:在WEB-INF中配置 mvc-servlet.xml文件(要求名稱必須以Web.xml中的<servlet-name>節(jié)點(diǎn)中的名字開頭+servlet.xml)算了,直接上圖吧:
Java代碼
<span ><</span><span >?xml version="1.0"encoding="UTF-8"?>
<span ><</span>beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
">
<bean id="parameterMethodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName"value="action"></property>
</bean>
<bean id="user"class="com.mvc.controller.UserController">
<property name="methodNameResolver"ref="parameterMethodNameResolver"></property>
</bean>
<span ><!-- 解析地址欄上的請(qǐng)求 --></span>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- key對(duì)應(yīng)的url-pattern,值是控制器的bean id -->
<prop key="login.do">user</prop>
</props>
</property>
</bean></span>
<span >
</span><span ><span ><!-- 個(gè)人表示不建議使用 -->
<!-- 在有需要進(jìn)行controller跳轉(zhuǎn)的時(shí)候,就不能使用這個(gè)方法 -->
<!-- 視圖解析器,在轉(zhuǎn)發(fā)前要到模型進(jìn)行處理 (就是智能的在返回的字符串轉(zhuǎn)換成為頁(yè)面) --></span>
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix"value="/"/>
<property name="suffix"value=".jsp"/>
</bean>
</beans></span>
需要解釋:如果某一個(gè)Controller中需要調(diào)用不用的方法時(shí),就必須指定定義方法的名字,例如請(qǐng)求的路徑為: user.do?action=userLogin(1).需要指定定義方法的名字:<property name="paramName" value="action" /> 定義之后,程序就知道在action之后的就是需要進(jìn)入的某一個(gè)方法
(如果是調(diào)用同一個(gè)方法,當(dāng)然就不需要定義這個(gè),但是只要有一個(gè)Controller需要不同的方法,就需要定義)
(2).解析之后Controller路徑,這里用到了Spring的控制反轉(zhuǎn)(IOC),其他就不同多說(shuō)
<property name="methodNameResolver" ref="parameterMethodNameResolver" /> 給Controller定義方法名解析器 2.1. 可以應(yīng)用已經(jīng)定義好的解析器(見上)
2.2. 可以為每一個(gè)Bean單獨(dú)定義解析器
(3).解析所有來(lái)自頁(yè)面中命中的請(qǐng)求,并分配到不同的Controller中
(4).在配置文件中,如果使用最后一個(gè)bean里面的內(nèi)容,如果需要返回到"index.jsp"頁(yè)面時(shí),就可以直接返回"index"就OK了,這個(gè)配置文件就是為我們返回的字符串,前后自動(dòng)加上"/"和".jsp".
一旦有了這個(gè)配置之后,就不能在Controller中進(jìn)行對(duì)Controller的跳轉(zhuǎn),因?yàn)樗鼤?huì)所有的返回字符串前后都加上"/"和".jsp",而這明顯不是我們所需要的,所以一般不會(huì)使用這種方法!
到這里了,需要靜一靜,好好理一下思路.
第四步:定義一個(gè)UserController,并繼承MultiactionController類
Java代碼
<span >publicclassUserControllerextendsMultiActionController {
publicModelAndView login(HttpServletRequest req,
HttpServletResponse resp, User user) throwsException{
String result = "";
if(user.getName().equals("jack")){
req.getSession().setAttribute("user", user);
result = "login.do?action=login";//可進(jìn)行Controller之間的跳轉(zhuǎn)
result = "index.jsp?age=22";//可傳值到頁(yè)面上
}else{
result = "login.jsp";
}
returnnewModelAndView(result);
}
}</span>
(1).上面的代碼中繼承的是 MultiactionController類,意味著可以用來(lái)定義多個(gè)不同的方法,以請(qǐng)求中action后面的名字來(lái)定
當(dāng)然還可以直接完成Controller接口,意味著當(dāng)前整個(gè)Controller 中,只有一個(gè)方法,且必須給定
(2).在方法中的參數(shù)默認(rèn)情況下是兩個(gè),分別是HttpServletRequset和HttpServletResponse對(duì)象,當(dāng)然在此之外,還可以定義一個(gè)對(duì)象類型的參數(shù),主要是簡(jiǎn)化表單提交多個(gè)參數(shù)(目前只了解到這里)寫到這里,就差不多了,不出意外的話,你應(yīng)該可以完成一個(gè)比較簡(jiǎn)單的Spring MVC框架的小項(xiàng)目了
源碼地址來(lái)源:×××/technology
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)題目:初學(xué)者對(duì)SpringMVC的認(rèn)識(shí)-創(chuàng)新互聯(lián)
URL鏈接:http://vcdvsql.cn/article22/ddjccc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、標(biāo)簽優(yōu)化、企業(yè)網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、App設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容