Spring MVC詳解

Spring MVC入門

Spring MVC簡介

1.    Spring MVC 這個框架應用於web開發的web層,接受請求和響應請求。

2.    它是Spring框架的一部分。

3. 

Spring MVC框架架構

Spring MVC快速搭建

1、導包

Spring所有包+spring-web    spring  -springMVC

2、書寫核心配置文件

SpringMVC.xml     or   spring-mvc.xml    or      spring-servlet.xml。

名字無關緊要,位置建議放在src目錄下。

內容:建議開啓註解模式,使用註解模式來配置controller

<?xml version="1.0"encoding="UTF-8"?>

<beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

        <!--開啓註解模式-->
        <context:component-scanbase-package="cn.hd.controller"></context:component-scan>
</beans>

3、配置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/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
   
    <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.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
       <servlet-name>springmvc</servlet-name>
        <!--
        /*  能夠攔截所有的資源,包括jsphtml js css等(不用)
        *.action or *.do  後綴名(可以用)
        /   目錄攔截    會放行靜態資源(可以用)
        -->
       <url-pattern>*.action</url-pattern>
    </servlet-mapping>
</web-app>

配置spring MVC的前端控制器       DispacherServlet

4、書寫Controller
      普通的類,使用spring controller註解。配置訪問路徑的註解。

package cn.hd.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class Hello {
    @RequestMapping(value ="/hello.action")
    public void hello(){
        System.out.println("hellospringmvc.");
    }
}

Spring MVC提供了一個視圖導航的類,這個類可以幫助我們進行頁面的跳轉。(ModelAndView)

package cn.hd.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class Hello {
    @RequestMapping(value ="/hello.action")
    /*ModelAndView:幫助我們進行頁面的跳轉*/
    public ModelAndView hello(){
        System.out.println("hellospringmvc.");
        ModelAndView mav = newModelAndView();
       mav.setViewName("/index.jsp");
        return mav;
    }
}

Spring MVC的訪問流程

1.    請求進入到web.xml;web.xml配置了spring MVC的前端控制器。進入到前端控制器。(spring框架的核心)

2.    HandlerMapping(處理器映射器)

用戶查詢所有的Controller(Handler),返回一個Handler對象

3.    老闆拿到了handler,指派這個處理器適配器(HandlerAdapter)去執行Handler

4.    Handler返回一個ModelAndView視圖導航給處理器,返回給老闆。

5.    老闆拿到了ModelAndView指派ViewResolver(視圖解析器)(.jsp)解析成html,返回給老闆,老闆將html返回給請求。

Spring由什麼構成?

核心控制器

3大組件

Handler(controller)     view(.jsp)

參數綁定

1、         原始的request、reponse、session

@RequestMapping("/oldParam")

public void oldParam(HttpServletRequestrequest, HttpServletResponse response, HttpSession session) throws IOException{
    String id = request.getParameter("id");
    System.out.println(id);
    response.getWriter().write(id);
}

2、         簡單數據的綁定(8大基礎類型及其包裝類,String)

@RequestMapping(value = "baseParam")

public void baseParam(int id){

    System.out.println(id);
}

int 型則必須傳遞參數,否則報異常,Integer不傳也不報錯,值爲null

3、         pojo類的綁定

@RequestMapping(value = "pojoParam")

public void pojoParam(Useruser){

    System.out.println(user);
}

4、         pojo封裝類的綁定

@RequestMapping(value = "queryVoParam")

public void queryVoParam(QueryVoqueryVo){

    System.out.println(queryVo.getUser());
}

需要請求地址必須按照ognl的傳遞方式傳遞參數

User.id=123

數組參數

@RequestMapping(value = "arrParam")

public void arrParam(Integer []ids){
    for (Integer id:ids) {
        System.out.println(id);
    }
}

List參數

@RequestMapping(value = "listParam")

public void listParam(QueryVovo){
    System.out.println(vo.getList());
}

傳參:list[0].name=zhangsan

訪問請求的限制

resultMapping

1、         路徑限制,可以在類上面添加地址,這個類下面所有的方法的訪問全部要加上這個前綴。

2、         可以採用多個地址訪問同一個方法

3、         訪問方式的限制,可以限制post請求,或者get請求。

/*兩個地址可以訪問一個方法,method:設置請求方式*/

@RequestMapping(value = {"access.action","access2.action"},method= RequestMethod.GET)
public void access(){
    System.out.println("進入了Access");
}

Controller的返回值

ModelAndView

能進行頁面的跳轉,也能進行數據封裝。

@RequestMapping(value = "modelAndView")

public ModelAndViewmodelAndView(){
    ModelAndView mav = new ModelAndView();
    User user = new User();
    user.setName("張三");
    mav.addObject("user",user);

    mav.setViewName("/index.jsp");
    return mav;
}

Void

進行json字符串的交互

String

官方文檔所推薦

1、可以直接進行頁面的跳轉

@RequestMapping(value = "strData")

public String strData(Modelmodel){
    User user = new User();
    user.setName("lsi");
    model.addAttribute("user",user);
    return "/index.jsp";
}

2、還可以進行轉發到其他的頁面

@RequestMapping(value = "strData")

public String strData(Modelmodel){
    User user = new User();
    user.setName("lsi");
    model.addAttribute("user",user);
    return "forward:/index.jsp";
}

3、以及重定向到其他的頁面

@RequestMapping(value = "strData")

public String strData(Modelmodel){
    User user = new User();
    user.setName("lsi");
    model.addAttribute("user",user);
    return "redirect:/index.jsp";
}

也可以進行數據的交互,交互的方式是需要一個Model

然後調用model的addAttribute方法。

JSON數據交互

1、         導包

2、         直接在代碼中加上註解@ResponseBody,用返回值的方式,直接返回

3、         報轉換異常在springMVC.xml中配置

<!--配置數據轉換器-->

<mvc:annotation-driven>
        <mvc:message-converters>
                <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </mvc:message-converters>
</mvc:annotation-driven>


發佈了87 篇原創文章 · 獲贊 381 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章