天天看點

Spring MVC怎麼擷取request的請求參數1. 通過@RequestParam綁定請求參數2.通過RequestContextHolder上下文擷取request對象3.将HttpServletRequest作為spring mvc的方法入參 4.使用@ModelAttribute将請求參數轉換成Java自定義對象的成員變量4.具體的demo代碼

1. 通過@RequestParam綁定請求參數

        使用@RequestParam綁定請求參數的值到Controller的方法入參中。

/**
	 * 方式一,通過@RequestParam綁定請求參數
	 * 1、使用RequestMapping注解來映射請求的URL,在本案例,處理/say此URL的GET請求
	 * 2、傳回值會通過視圖解析器解析為實際的實體視圖, 對于InternalResourceViewResolver視圖解析器,會做如下解析
	 *    通過prefix+returnVal+suffix 這樣的方式得到實際的實體視圖,然後會轉發到該實際的實體視圖,在本案例,
	 *    得到實際的實體視圖是/jsp/say.jsp
	 * @param msg URL中傳遞的請求參數
	 * @return
	 */
	@RequestMapping(value="say",method=RequestMethod.GET)
	public ModelAndView  say(@RequestParam("msg") String msg){
		//其中第一個參數為View Name,第二個參數為要傳遞的資料的key,第三個參數為資料對象。在這裡要注意的是:資料是預設被存放在request中的
		return new ModelAndView("say", "msg", msg);
	}
           

2.通過RequestContextHolder上下文擷取request對象

      大部分情況下,這種方式是有效的!當請求為multipart類型的請求的時候,如檔案上傳,form表單的enctype類型為"multipart/form-data",這種情況下,RequestHolder.getRequest().getParameter()是得不到參數值的!!因為通過RequestHolder.getRequest()擷取到的request對象org.apache.catalina.connector.RequestFacade的執行個體

      不推薦使用這種方式,解決方案:直接将HttpServletRequest作為spring mvc的方法入參

/**
	 * 方式二,通過RequestContextHolder上下文擷取request對象
	 *        不推薦使用這種方式!!
	 *        當請求為multipart類型的請求的時候,如檔案上傳,form表單的enctype類型為"multipart/form-data",
	 *        這種情況下,RequestHolder.getRequest().getParameter()是得不到參數值的!!
	 *        因為通過RequestHolder.getRequest()擷取到的request對象是org.apache.catalina.connector.RequestFacade的執行個體
	 * 1、使用RequestMapping注解來映射請求的URL,在本案例,處理/say2此URL的GET請求
	 * 2、傳回值會通過視圖解析器解析為實際的實體視圖, 對于InternalResourceViewResolver視圖解析器,會做如下解析
	 *    通過prefix+returnVal+suffix 這樣的方式得到實際的實體視圖,然後會轉發到該實際的實體視圖,在本案例,
	 *    得到實際的實體視圖是/jsp/say.jsp
	 * @return
	 */
	@RequestMapping(value="say2",method=RequestMethod.GET)
	public ModelAndView say2(){
		ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
		HttpServletRequest request = servletRequestAttributes.getRequest();
		//其中第一個參數為View Name,第二個參數為要傳遞的資料的key,第三個參數為資料對象。在這裡要注意的是:資料是預設被存放在request中的
		return new ModelAndView("say", "msg", request.getParameter("msg"));
	}
           

3.将HttpServletRequest作為spring mvc的方法入參

      推薦使用這種方式,靈活!

/**
	 * 方式三,直接将HttpServletRequest對象作為方法的入參
	 * 1、使用RequestMapping注解來映射請求的URL,在本案例,處理/say3此URL的GET請求
	 * 2、傳回值會通過視圖解析器解析為實際的實體視圖, 對于InternalResourceViewResolver視圖解析器,會做如下解析
	 *    通過prefix+returnVal+suffix 這樣的方式得到實際的實體視圖,然後會轉發到該實際的實體視圖,在本案例,
	 *    得到實際的實體視圖是/jsp/say.jsp
	 * @param request
	 * @return
	 */
	@RequestMapping(value="say3",method=RequestMethod.GET)
	public ModelAndView say2(HttpServletRequest request){
		//其中第一個參數為View Name,第二個參數為要傳遞的資料的key,第三個參數為資料對象。在這裡要注意的是:資料是預設被存放在request中的
		return new ModelAndView("say", "msg", request.getParameter("msg"));
	}
           

4.使用@ModelAttribute将請求參數轉換成Java自定義對象的成員變量

/**
	 * 方式四,通過@ModelAttribute将請求參數轉換成Java自定義對象的成員變量
	 * 1、使用RequestMapping注解來映射請求的URL,在本案例,處理/say4此URL的GET請求
	 * 2、傳回值會通過視圖解析器解析為實際的實體視圖, 對于InternalResourceViewResolver視圖解析器,會做如下解析
	 *    通過prefix+returnVal+suffix 這樣的方式得到實際的實體視圖,然後會轉發到該實際的實體視圖,在本案例,
	 *    得到實際的實體視圖是/jsp/say.jsp
	 * @param request
	 * @return
	 */
	@RequestMapping(value="say4",method=RequestMethod.GET)
	public ModelAndView say2(@ModelAttribute MsgObject msgObject){
		//其中第一個參數為View Name,第二個參數為要傳遞的資料的key,第三個參數為資料對象。在這裡要注意的是:資料是預設被存放在request中的
		return new ModelAndView("say", "msg", msgObject.getMsg());
	}
           

4.具體的demo代碼

GetRequestParameterController.java:

package edu.mvcdemo.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
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.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;

import edu.mvcdemo.model.MsgObject;

/**
 * @編寫人: yh.zeng
 * @編寫時間:2017-7-9 下午2:37:33
 * @檔案描述: 擷取請求參數demo
 */
@Controller
public class GetRequestParameterController {
	
	/**
	 * 方式一,通過@RequestParam綁定請求參數
	 * 1、使用RequestMapping注解來映射請求的URL,在本案例,處理/say此URL的GET請求
	 * 2、傳回值會通過視圖解析器解析為實際的實體視圖, 對于InternalResourceViewResolver視圖解析器,會做如下解析
	 *    通過prefix+returnVal+suffix 這樣的方式得到實際的實體視圖,然後會轉發到該實際的實體視圖,在本案例,
	 *    得到實際的實體視圖是/jsp/say.jsp
	 * @param msg URL中傳遞的請求參數
	 * @return
	 */
	@RequestMapping(value="say",method=RequestMethod.GET)
	public ModelAndView  say(@RequestParam("msg") String msg){
		//其中第一個參數為View Name,第二個參數為要傳遞的資料的key,第三個參數為資料對象。在這裡要注意的是:資料是預設被存放在request中的
		return new ModelAndView("say", "msg", msg);
	}
	
	/**
	 * 方式二,通過RequestContextHolder上下文擷取request對象
	 *        不推薦使用這種方式!!
	 *        當請求為multipart類型的請求的時候,如檔案上傳,form表單的enctype類型為"multipart/form-data",
	 *        這種情況下,RequestHolder.getRequest().getParameter()是得不到參數值的!!
	 *        因為通過RequestHolder.getRequest()擷取到的request對象是org.apache.catalina.connector.RequestFacade的執行個體
	 * 1、使用RequestMapping注解來映射請求的URL,在本案例,處理/say2此URL的GET請求
	 * 2、傳回值會通過視圖解析器解析為實際的實體視圖, 對于InternalResourceViewResolver視圖解析器,會做如下解析
	 *    通過prefix+returnVal+suffix 這樣的方式得到實際的實體視圖,然後會轉發到該實際的實體視圖,在本案例,
	 *    得到實際的實體視圖是/jsp/say.jsp
	 * @return
	 */
	@RequestMapping(value="say2",method=RequestMethod.GET)
	public ModelAndView say2(){
		ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
		HttpServletRequest request = servletRequestAttributes.getRequest();
		//其中第一個參數為View Name,第二個參數為要傳遞的資料的key,第三個參數為資料對象。在這裡要注意的是:資料是預設被存放在request中的
		return new ModelAndView("say", "msg", request.getParameter("msg"));
	}
	

	/**
	 * 方式三,直接将HttpServletRequest對象作為方法的入參
	 * 1、使用RequestMapping注解來映射請求的URL,在本案例,處理/say3此URL的GET請求
	 * 2、傳回值會通過視圖解析器解析為實際的實體視圖, 對于InternalResourceViewResolver視圖解析器,會做如下解析
	 *    通過prefix+returnVal+suffix 這樣的方式得到實際的實體視圖,然後會轉發到該實際的實體視圖,在本案例,
	 *    得到實際的實體視圖是/jsp/say.jsp
	 * @param request
	 * @return
	 */
	@RequestMapping(value="say3",method=RequestMethod.GET)
	public ModelAndView say2(HttpServletRequest request){
		//其中第一個參數為View Name,第二個參數為要傳遞的資料的key,第三個參數為資料對象。在這裡要注意的是:資料是預設被存放在request中的
		return new ModelAndView("say", "msg", request.getParameter("msg"));
	}
	
	/**
	 * 方式四,通過@ModelAttribute将請求參數轉換成Java自定義對象的成員變量
	 * 1、使用RequestMapping注解來映射請求的URL,在本案例,處理/say4此URL的GET請求
	 * 2、傳回值會通過視圖解析器解析為實際的實體視圖, 對于InternalResourceViewResolver視圖解析器,會做如下解析
	 *    通過prefix+returnVal+suffix 這樣的方式得到實際的實體視圖,然後會轉發到該實際的實體視圖,在本案例,
	 *    得到實際的實體視圖是/jsp/say.jsp
	 * @param request
	 * @return
	 */
	@RequestMapping(value="say4",method=RequestMethod.GET)
	public ModelAndView say2(@ModelAttribute MsgObject msgObject){
		//其中第一個參數為View Name,第二個參數為要傳遞的資料的key,第三個參數為資料對象。在這裡要注意的是:資料是預設被存放在request中的
		return new ModelAndView("say", "msg", msgObject.getMsg());
	}

}
           

配置的視圖解析器為InternalResourceViewResolver,配置如下:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/jsp/" />
	<property name="suffix" value=".jsp" />
</bean>
           

say.jsp頁面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    ${requestScope.msg}
</body>
</html>
           

效果:

Spring MVC怎麼擷取request的請求參數1. 通過@RequestParam綁定請求參數2.通過RequestContextHolder上下文擷取request對象3.将HttpServletRequest作為spring mvc的方法入參 4.使用@ModelAttribute将請求參數轉換成Java自定義對象的成員變量4.具體的demo代碼
Spring MVC怎麼擷取request的請求參數1. 通過@RequestParam綁定請求參數2.通過RequestContextHolder上下文擷取request對象3.将HttpServletRequest作為spring mvc的方法入參 4.使用@ModelAttribute将請求參數轉換成Java自定義對象的成員變量4.具體的demo代碼
Spring MVC怎麼擷取request的請求參數1. 通過@RequestParam綁定請求參數2.通過RequestContextHolder上下文擷取request對象3.将HttpServletRequest作為spring mvc的方法入參 4.使用@ModelAttribute将請求參數轉換成Java自定義對象的成員變量4.具體的demo代碼
Spring MVC怎麼擷取request的請求參數1. 通過@RequestParam綁定請求參數2.通過RequestContextHolder上下文擷取request對象3.将HttpServletRequest作為spring mvc的方法入參 4.使用@ModelAttribute将請求參數轉換成Java自定義對象的成員變量4.具體的demo代碼