1. 程式人生 > 其它 >SpringMVC基礎知識(2)

SpringMVC基礎知識(2)

1、SpringMVC對請求引數的處理

  在之前的servlet中我們可以通過request.getParameter()來獲取請求中的引數,但是在我們編寫的SpringMVC的應用程式中,在具體請求的方法中並不包含request引數,

  需要使用以下幾個註解:

    @RequestParam:獲取請求的引數

    @RequestHeader:獲取請求頭資訊

    @CookieValue:獲取cookie中的值

  @RequestParam的基本使用

package com.llxazy.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class RequestController { /** * 如何獲取SpringMVC中請求中的資訊 * 預設情況下,可以直接在方法的引數中填寫跟請求一樣的名稱,此時會預設接受引數 * 如果有值,直接賦值,如果沒有,那麼直接給空值 * * @RequestParam:獲取請求中的引數值,使用此註解之後,引數的名稱不需要跟請求的名稱一致,但是必須要寫 * public String request(@RequestParam("user") String username){ * * 此註解還包含三個引數: * value:表示要獲取的引數值 * required:表示此引數是否必須,預設是true,如果不寫引數那麼會報錯,如果值為false,那麼不寫引數不會有任何錯誤 * defaultValue:如果在使用的時候沒有傳遞引數,那麼定義預設值即可 *
@param username * @return */ @RequestMapping("/request") public String request(@RequestParam(value = "user",required = false,defaultValue = "hehe") String username){ System.out.println(username); return "success"; } }

  @RequestHeader的基本使用:

package com.llxazy.controller;

import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import sun.management.resources.agent; @Controller public class RequestController { /** * 如果需要獲取請求頭資訊該如何處理呢? * 可以使用@RequestHeader註解, * public String header(@RequestHeader("User-Agent") String agent){ * 相當於 request.getHeader("User-Agent") * * 如果要獲取請求頭中沒有的資訊,那麼此時會報錯,同樣,此註解中也包含三個引數,跟@RequestParam一樣 * value * required * defalutValue * @param agent * @return */ @RequestMapping("/header") public String header(@RequestHeader("User-Agent") String agent){ System.out.println(agent); return "success"; } }

  @CookieValue的基本使用

package com.llxazy.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import sun.management.resources.agent;

@Controller
public class RequestController {

    /**
     * 如果需要獲取cookie資訊該如何處理呢?
     *  可以使用@CookieValue註解,
     *      public String cookie(@CookieValue("JSESSIONID") String id){
     *      相當於
     *      Cookie[] cookies = request.getCookies();
     *      for(Cookie cookie : cookies){
     *          cookie.getValue();
     *      }
     *      如果要獲取cookie中沒有的資訊,那麼此時會報錯,同樣,此註解中也包含三個引數,跟@RequestParam一樣
     *          value
     *          required
     *          defalutValue
     * @param id
     * @return
     */
    @RequestMapping("/cookie")
    public String cookie(@CookieValue("JSESSIONID") String id){
        System.out.println(id);
        return "success";
    }
}

  在SpringMVC的控制中,能直接完成物件的屬性賦值操作,不需要人為干預。

  User.java

package com.llxazy.bean;

import java.util.Date;

public class User {
    private Integer id;
    private String name;
    private Integer age;
    private Date date;
    private Address address;

   //省略get/set/toString方法
}

  Address.java

package com.llxazy.bean;

public class Address {
    private String province;
    private String city;
    private String town;
  //省略get/set/toString方法
}

  login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="addUser" method="post">
    編號:<input type="text" name="id"/><br>
    姓名:<input type="text" name="name"/><br>
    年齡:<input type="text" name="age"/><br>
    日期:<input type="text" name="date"/><br>
    省份:<input type="text" name="address.province"/><br>
    城市:<input type="text" name="address.city"/><br>
    區域:<input type="text" name="address.town"/><br>
    <input type="submit" value="submit"/><br>
</form>
</body>
</html>

  UserController.java

package com.llxazy.controller;

import com.llxazy.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class UserController {

    @RequestMapping("/addUser")
    public String addUser(User user){
        System.out.println(user);
        return "success";
    }
}