SpringMVC 原理與用法

一.SpringMVC
Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裏面。Spring 框架提供了構建 Web 應用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構,從而在使用Spring進行WEB開發時,可以選擇使用Spring的SpringMVC框架或集成其他MVC開發框架,如Struts1,Struts2等。

二.SpringMVC的基本原理
1. 戶向服務 發送請求. 如: localhost:8080/user
2. DispatcherServlet接收到請求, 開始處
3. 在DispatcherServlet內部, 通過HandlerMapping檢查這個url有沒有對應的controller處 法 4. 如果有, 直接調 這個 法
5. 如果返回字符 , viewResolver會把字符 和配置 件中的前後綴組成 的資源 徑
6. DispatcherServlet會把這個資源轉爲html, 發給 戶的瀏覽

三.SpringMVC中常 的註解
標記在類上 的:
@Controller : 標註該類是controller層的類, 相當於在spring中配置 關於該類的bean
標記在 法上 的:
@RequestMapping: 標記該 法對應的請求URI, 及這次請求的請求 法(GET/POST) @ResponseBody: 將該 法的返回值轉爲json發回給前端, 再進 jsp 徑的拼接
標記在 法參數的:
@PathVariable: 獲取URI地址映射的參數 @ReqeustParam: 獲取URL後附帶的參數 表

四.配置SpringMVC (本人用的maven創建的)

**pom.xml文件 所需要的依賴**
<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!--1.spring-core
        2.spring-webmvc
        3.spring-jdbc
        4.spring-aspects
        5.jstl-->

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!--jackson databind-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.8.8</version>
    </dependency>
    <!--jackson core-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.8.8</version>
    </dependency>
    <!--jackson-annotations-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.8.8</version>
    </dependency>

  </dependencies>



**Springmvc-servlet.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: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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置SpringMVC-->

    <!--mvc的註解驅動-->
    <mvc:annotation-driven/>

    <!--註解的包掃描-->
    <!--將這個配置包下面的所有類,都相當於配置好了bean,調用的時候使用註解-->
    <!--每個類的默認id是 首字母小寫的形式: 例如:Student 類的id就是student-->
    <context:component-scan base-package="com.xxx"/>

    <!--默認的資源文件的處理方式-->
    <!--類似 js,css,img的那個資源文件,本身不需要 SpringMVC 做處理-->
    <mvc:default-servlet-handler/>

    <!--視圖解析器-->
    <!--根據代碼的邏輯處理,配置正確的jsp/HTML等文件 的路徑-->
    <bean id="jspViewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <!--前綴-->
        <property name="prefix" value="/WEB-INF/"/>
        <!--後綴-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>


**web.xml文件配置**

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>MVCServlet</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>MVCServlet</servlet-name>
    <!--*.action-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

五.controller層


//接收傳過來的參數
@Controller
public class MainController {
    //localhost:8080/aa
    @RequestMapping(value = "/aa")
    public String frontPage(){
        return "index";
    }


    //帶參數的請求
    //1.直接在地址上拼接參數(URI 模板映射)
    //2.localhost/user/zhangsan/

    @RequestMapping(value = "/user/{username}/{age}")
    public String varPage(@PathVariable("username")String name,
                          @PathVariable("age") String age){
        System.out.println(name);
        System.out.println(age);

        //jsp文件的名字
        return "userinfo";
    }

    //localhost:8080/stu?name=張三&age22
    //2.獲取參數列表
    /*
    >1. 一個一個的獲取,格式:@RequestParam("key) 參數類型 參數名
    >2. 全部獲取 ,格式就是@RequestParam Map<key,value> 參數名
    >3. 靠bean 獲取,場景:參數列表的key名 和bean的屬性名必須一致

     */


//    @RequestMapping(value = "/stu")
//    public  String stuinfo(@RequestParam("name") String name,
//                           @RequestParam("age") Integer age){
//        System.out.println(name);
//        System.out.println(age);
//
//
//        return "stuinfo";
//    }

    @RequestMapping(value = "/stu")
//    public  String stuinfo(@RequestParam Map<String,String> params){
    public  String stuinfo(Student student){
        System.out.println(student);
        return "stuinfo";
    }





    /*
    SpringMVC項目的健裏的步驟(maven)
    1.使用maven 建立工程 ,添加POM文件中的依賴關係
    2.在resources 文件夾下面創建xxx-servlet.xml
    3.配置web.xml
    4.創建jsp文件和controller


    SpringMVC 的基本原理
    1.用戶向服務器發送請求, 比如:localhost:8080/user
    2.DispatcherServlet 接收到請求,開始處理
    3.DispatcherServlet 內部,通過有個HanderMapping 的檢查
    這個url 有沒有對應的controller的處理方法
    4.如果有,直接調用這個方法
    5.如果返回字符串 ,viewResolver  會把字符串和配置文件的前後綴組成頁面的資源路徑
    6.DispatcherServlet 會把這個資源轉換爲html 發送個客戶的瀏覽器



     */

六.後臺向前端返回數據

@Controller
public class SecController {

    //從後臺向前段發送數據
    @RequestMapping(value = "teacher")
    public String teacherPage(ModelMap map){

        //1. Map<String ,object> map
        //2. Model model
        //3. ModelMap  modelmap
        //4. ModelAndView
        //存到了request域中
        map.addAttribute("teacher","大表姐");

        return "teacher";
    }

    //向前臺發送 json數據
    @RequestMapping(value = "/json")
    @ResponseBody
    //作用就是   會把當前的方法的返回值,轉爲json 格式 發送個前端 他不走那個jsp拼接
    public Student jsonTest(){

        Student student=new Student();
        student.setName("張三");
        student.setAge(20);
        return student;
    }


//練習:下面兩個就是在url上寫上參數,傳到後臺(拼接一下)在返回來
    @RequestMapping(value = "/json1")
    public String  json(@RequestParam Map<String, String> map,
                        ModelMap map1){


        String name = map.get("name");
        String age=map.get("age");
        String sex=map.get("sex");

        map1.addAttribute("map",name+age+sex);

        return "json1";
        //在json1.jsp中調用map
    }

//發送的json數據
    @RequestMapping(value = "/json2")
    @ResponseBody
    public Student student(Student student){
        Student student1=new Student();
        student1.setName(student.getName());
        student1.setAge(student.getAge());
        System.out.println(student1);
        return student1;
    }




}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章