spring-mvc整合

spring-mvc執行步驟:
在這裏插入圖片描述
具體的執行步驟:
1、首先用戶發送請求————> 前端控制器,前端控制器根據請求信息(如 URL)來決定選擇哪一個頁面控制器進行處理並把請求委託給它,即以前的控制器的控制邏輯部分;圖中的 1、2 步驟;
2、頁面控制器接收到請求後,進行功能處理,首先需要收集和綁定請求參數到一個對象,這個對象在 Spring Web MVC 中叫命令對象,並進行驗證,然後將命令對象委託給業務對象進行處理;處理完畢後返回一個 ModelAndView(模型數據和邏輯視圖名);圖中的 3、4、5 步驟;
3、前端控制器收回控制權,然後根據返回的邏輯視圖名,選擇相應的視圖進行渲染,並把模型數據傳入以便視圖渲染;圖中的步驟 6、7;
4、前端控制器再次收回控制權,將響應返回給用戶,圖中的步驟 8;至此整個結束。

spring mvc框架的流程
在這裏插入圖片描述
具體的流程:
1、首先用戶發送請求——>DispatcherServlet,前端控制器收到請求後自己不進行處理,而是委託給其他的解析器進行處理,作爲統一訪問點,進行全局的流程控制;
2、DispatcherServlet——>HandlerMapping, HandlerMapping 將會把請求映射爲 HandlerExecutionChain 對象(包含一個 Handler 處理器(頁面控制器)對象、多個HandlerInterceptor 攔截器)對象,通過這種策略模式,很容易添加新的映射策略;
3、DispatcherServlet——>HandlerAdapter,HandlerAdapter 將會把處理器包裝爲適配器,從而支持多種類型的處理器,即適配器設計模式的應用,從而很容易支持很多類型的處理器;
4、HandlerAdapter——> 處理器功能處理方法的調用,HandlerAdapter 將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理;並返回一個 ModelAndView對象(包含模型數據、邏輯視圖名);
5、ModelAndView 的邏輯視圖名——> ViewResolver, ViewResolver 將把邏輯視圖名解析爲具體的 View,通過這種策略模式,很容易更換其他視圖技術;
6、View——> 渲染,View 會根據傳進來的 Model 模型數據進行渲染,此處的 Model實際是一個 Map 數據結構,因此很容易支持其他視圖技術;
7、返回控制權給 DispatcherServlet,由 DispatcherServlet 返回響應給用戶,到此一個流程結束。

代碼的實現以及操作的步驟:
首先在web.xml裏面進行servlet的配置;配置springmvc-servlet.xml;

<servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
!--不用註解配置-->
	 <!--當請求地址是index.jsp的時候,會先到UserController這個類-->
    <bean name="/index" class="com.offcn.controller.UserController"></bean>
    <!--完成視圖的對應-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置前綴-->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!--配置後綴-->
        <property name="suffix" value=".jsp"></property>
     </bean>

    <!--註解來配置,掃描controller下面所有的包-->
    <context:component-scan base-package="com.offcn.controller"/>
    <!--開啓註解驅動-->
    <mvc:annotation-driven/>
    <!--完成視圖的對應-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置前綴-->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!--配置後綴-->
        <property name="suffix" value=".jsp"></property>
    </bean>

把數據傳到controller裏:
如果不用註解的方式,需要實現Controller這個接口;然後重寫方法;
用註解的方式:
首先在類的上面加@Controller註解;然後在方法上面加@RequestMapping(“index”)括號裏傳的是訪問的地址,方法的括號裏傳的是頁面傳進來的參數;

eg:
@RequestMapping("index")
public String index(@RequestParam(value = "userName",required = false)String userName){
        return "doIndex";
    }
    value代表網頁拼接的鍵,require是否必須拼接,這裏面要多傳參數需要用@RequestParam繼續寫

另一種寫法:

 //用註解的另一種寫法;報405是因爲請求方式和接受方式不統
@RequestMapping(value = "index",params = {"userName","pwd"},method = RequestMethod.GET)
 public String index(String userName,String pwd){
        return "doIndex";
    }

還有一種寫法:

@PathVariable這個註解就是匹配uri上的任何參數,註解上的pid和pid一定要相同
   @RequestMapping(value = "index/{pid}")
   public String index(@PathVariable String pid){
       return "doIndex";
   }

把數據傳到jsp上面:

	//用map的方式
    @RequestMapping("toDoIndex2")
    public String toDoIndex2(String userName, Map<String,Object> map){
        map.put("userName",userName);
        return "doIndex";
    }

    //常用的是以下兩種
    // 返回我們要跳轉的地址 view  model ,這個model不用實例化出來,直接傳進去就好了
    @RequestMapping("toDoIndex1")
    public String toDoIndex1(String userName,Model model){
        //model裏面來添加數據,同樣是鍵值對的形式傳遞的
        model.addAttribute("userName",userName);
        return "doIndex";
    }

    //最終版鏈接數據庫用
    @RequestMapping("toUpdate")
    public String toUpdate(@RequestParam(value = "userName",required = false)String userName,
                           @RequestParam(value = "userPwd",required = false)String userPwd){

        return "doIndex";
    }
    裏面的參數是通過頁面傳進來的,需要的時候才寫,記住參數是由方法參數傳進來的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章