您好,登錄后才能下訂單哦!
首先是要一定說明的是,這倒是說明是什么?對吧Spring MVC 是SpringFrameWork的后續產品,并且已經融
入到Spring Web Flow中同時Spring MVC 分離了控制器,模型對象,分派器(其實我不知道這是什么)以及處理程
序對象的角色,這種分離讓它們更容易進行定制.說了這些很官方的話,我都有點暈了,呵呵,先上一個原理流程圖吧,相信會比較直觀!
Spring MVC 原理圖
Spring MVC 對應原理流程步驟:
1.Web客戶端 --> DispatcherServlet 用戶發送一個請求到,首先到DispatcherServlet中(先交給前端控制器,進行全局的流程控制)
2.DispatcherServlet --> HandlerMapping 解析用戶在前臺提交的請求,并按照我們的要求分配到指定的Controller(相當于struts2中的action)
3.DispatcherServlet --> Controller 進入指定的Controller對象,執行里面的方法,返回需要的字符串(ModelAndView),在Controller里面需要對bean進行操作,也就是會和Model進行交互
4.DispatcherServlet --> ViewResolver 解析從Controller中返回的字符串,并轉換為有效的JSP路徑
5.DispatcherServlet --> JSP 將轉換好的JSP路徑,指定到特定的頁面
6.JSP --> Web客戶端 將某一個特定的頁面顯示在客戶端界面
好了,以上就是Spring MVC的流程,是不是有了一定的認識了,不急,后面還有呢...
有了基本的認識, 那就開始編碼吧!(我是用的是Springframework-3.2.8)
大家都知道的,打開編譯器,準備開始開發一個項目的時候,第一步就是新建項目。哈哈!
是不是會有一點無語,呵呵,不是別的,只是活躍一下氣氛,原因你懂的。。
好吧,這一步就不列入編碼步驟里了吧,下面正式開始!
第一步:添加架包
是不是覺得架包很少啊,沒錯,這就是Spring MVC的特點,繼續讓它顛覆你的想法吧
第二步:一定是web.xml文件了
這里就是上面提到的DispatcherServlet -- 前端控制器
后面的"*.do"就是用來攔截頁面用戶的請求,這里規定凡是以 .do 結尾的請求都會命中,當然這個可以自己定義,需要說明的是,不管自己定義的是什么,一定要遵守,呵呵,是不是突然覺得好有道理!
第三步:在WEB-INF中配置 mvc-servlet.xml文件(要求名稱必須以Web.xml中的<servlet-name>節點中的名字開頭+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 ><!-- 解析地址欄上的請求 --></span>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- key對應的url-pattern,值是控制器的bean id -->
<prop key="login.do">user</prop>
</props>
</property>
</bean></span>
<span >
</span><span ><span ><!-- 個人表示不建議使用 -->
<!-- 在有需要進行controller跳轉的時候,就不能使用這個方法 -->
<!-- 視圖解析器,在轉發前要到模型進行處理 (就是智能的在返回的字符串轉換成為頁面) --></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>
需要解釋:如果某一個Controller中需要調用不用的方法時,就必須指定定義方法的名字,例如請求的路徑為: user.do?action=userLogin(1).需要指定定義方法的名字:<property name="paramName" value="action" /> 定義之后,程序就知道在action之后的就是需要進入的某一個方法
(如果是調用同一個方法,當然就不需要定義這個,但是只要有一個Controller需要不同的方法,就需要定義)
(2).解析之后Controller路徑,這里用到了Spring的控制反轉(IOC),其他就不同多說
<property name="methodNameResolver" ref="parameterMethodNameResolver" /> 給Controller定義方法名解析器 2.1. 可以應用已經定義好的解析器(見上)
2.2. 可以為每一個Bean單獨定義解析器
(3).解析所有來自頁面中命中的請求,并分配到不同的Controller中
(4).在配置文件中,如果使用最后一個bean里面的內容,如果需要返回到"index.jsp"頁面時,就可以直接返回"index"就OK了,這個配置文件就是為我們返回的字符串,前后自動加上"/"和".jsp".
一旦有了這個配置之后,就不能在Controller中進行對Controller的跳轉,因為它會所有的返回字符串前后都加上"/"和".jsp",而這明顯不是我們所需要的,所以一般不會使用這種方法!
到這里了,需要靜一靜,好好理一下思路.
第四步:定義一個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";//可進行Controller之間的跳轉
result = "index.jsp?age=22";//可傳值到頁面上
}else{
result = "login.jsp";
}
returnnewModelAndView(result);
}
}</span>
(1).上面的代碼中繼承的是 MultiactionController類,意味著可以用來定義多個不同的方法,以請求中action后面的名字來定
當然還可以直接完成Controller接口,意味著當前整個Controller 中,只有一個方法,且必須給定
(2).在方法中的參數默認情況下是兩個,分別是HttpServletRequset和HttpServletResponse對象,當然在此之外,還可以定義一個對象類型的參數,主要是簡化表單提交多個參數(目前只了解到這里)寫到這里,就差不多了,不出意外的話,你應該可以完成一個比較簡單的Spring MVC框架的小項目了
源碼地址來源:×××/technology
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。