1. 程式人生 > >spring mvc基本實現解析

spring mvc基本實現解析

概念: spring mvc是ssm(spring,spring mvc,matatis)框架之一,作用就是controller控制層,spring mvc是spring框架分解出來的一部分。

Spring mvc的執行過程: 1·客戶端傳送請求到 dispacherServlet 2·dispacherServlet把相應的請求傳送給HanderMapping(madelAndView(資料和檢視)) 3·modelAndView---->dispacherServlet----->viewResolve---->dispacherServlet 在這裡插入圖片描述

核心物件: 1·DispacherServlet 2·HandlerAdapter 3·檢視渲染器

開發一個基礎的spring mvc框架專案的步驟:

1.匯入相關的jar包spring-webmvc.jar 2.配置核心檔案 springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-
context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--當你的請求地址是index.html的時候 就會到UserController類--> <!--<bean name="/index.html" class="com.offcn.controller.UserController"></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> </beans>

3.配置核心檔案 springmvc.xml到web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--開始配置servlet servlet-name設定servlet名字-->
    <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>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

總結:Contoller層的各種實現方式

package com.offcn.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;


@Controller
@RequestMapping("/userController")
public class UserController {

    /**
     * controller類要實現Controller介面
     */
    //當你的客戶端傳送的請求url地址 跟這個類對應上了就會走這個方法(HandlerMapping)
   /*  @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //就是你要跳轉到的介面,引數處理後腰跳轉的介面
        return new ModelAndView("doIndex");

    }

}*/


    /* @RequestMapping("index") //代表請求的地址
     public String index(){
         //返回的介面
         return "doIndex";*/
    //value代表網頁拼接的鍵,required代表是否必須憑藉引數,true/false代表是否必須拼接
 /*  @RequestMapping("index")
   public String index(@RequestParam(value = "userName",required = false) String userName){
       System.out.println(userName);
       return "doIndex";
   }*/

    //這種必須傳引數
    //報405的錯誤是因為你的請求方式和接受方式不統一

/*    @RequestMapping(value = "/index/*.do",params ={"userName","pwd"},method = RequestMethod.GET)
    public String index(String userName,String pwd) {
        System.out.println(userName+"------"+pwd);
        return "doIndex";
    }*/
    //url=uri+urn
    //PathVariable 匹配uri上的任何引數,註解上的pid和引數pid一定要一樣,才能到到具體的資料

    @RequestMapping(value = "/index/{pid}")
    public String index(@PathVariable String pid){
        System.out.println(pid);
        return "doIndex";
    }

    //把Controller的資料傳到jsp頁面中
    @RequestMapping("/toDoIndex")
    public ModelAndView toDoIndex(String userName){
    //獲取userName
        //構建modelAndView物件
        ModelAndView modelAndView = new ModelAndView();
        //把值放到modelAndView(以鍵值對形式傳遞)
        modelAndView.addObject("userName",userName);
        //把需要跳轉的頁面放到modelAndView裡面
        modelAndView.setViewName("doIndex");
        System.out.println("1234567");
        return modelAndView;
    }



    //通過mao把資料傳過去
    @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";
    }

}