Spring MVC怎么获取request的请求参数

来源:互联网 发布:网络招聘怎么写 编辑:程序博客网 时间:2024/05/28 06:05

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.具体的demo代码

GetRequestParameterController.java:

package edu.mvcdemo.controller;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;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;/** * @编写人: yh.zeng * @编写时间:2017-7-9 下午2:37:33 * @文件描述: 获取请求参数demo */@Controllerpublic 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"));}}


配置的视图解析器为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>


 

效果:

 


 

 

项目demo见https://github.com/zengyh/MavenSpringMvcDemo.git