java_springMVC_获取post请求的参数

1. 获取post请求的参数

其实和get请求的获取参数方式一样,在此单列出来主要是为了说明几种特殊情况,如方式一中有数组、方式二中使用类、以及使用ajax

为了数据类型更全一点,我的参数中有字串型、数字型,及下拉框、复选框、单选框。

先写一个addUser.jsp页面如下:

<form action="" method="post">

<p><input type="test" name="username" placeholder="请输入用户名。。。" autofocus="autofocus"/></p>

<p><input type="test" name="age" placeholder="请输入年龄。。。"/></p>

<p><input type="test" name="phone" placeholder="请输入电话。。。"/></p>

<p>省份:

<select>

<option value="000001">北京市</option>

<option value="000002">天津市</option>

<option value="000003">上海市</option>

</select>

</p>

<p>爱好:

<label><input type="checkbox" name="intesters" value="1"/>爬山</label>

<label><input type="checkbox" name="intesters" value="2"/>旅游</label>

<label><input type="checkbox" name="intesters" value="3"/>打球</label>

</p>

<p>性别:

<label><input type="radio" name="sex" value="1"/></label>

<label><input type="radio" name="sex" value="2"/></label>

<label><input type="radio" name="sex" value="3"/>保密</label>

</p>

<p><input type="submit" value="提交"/></p>

</form>

Controller类中增加一个addUser方法:

@RequestMapping(value="addUser", method=RequestMethod.GET)

public String addUser(){

return "user/addUser";

}

这样在页面中访问http://localhost:8080/firstSpringMVC/user/addUser

可得到如下页面:

 java_springMVC_获取post请求的参数

上面的form表单中的action还没填值,下面写上不同的内容,调用不同的方法接受表单内容。

方式一:使用getParameter

action的值改为:saveUser

controller中增加方法:

// 获取post请求参数(getParameter)

@RequestMapping(value="saveUser", method=RequestMethod.POST)

public String saveUser(HttpServletRequest request){

String username= request.getParameter("username");

Integer age = Integer.parseInt(request.getParameter("age"));

String phone = request.getParameter("phone");

String city = request.getParameter("city");

String[] interests = request.getParameterValues("interests");

Integer sex = Integer.parseInt(request.getParameter("sex"));

System.out.println("username : " + username);

System.out.println("age : " + age);

System.out.println("phone : " + phone);

System.out.println("city : " + city);

System.out.println("interests : ");

for(String interest: interests){

System.out.println("    interest : " + interest);

}

System.out.println("sex : " + sex);

return "login/welcome";

}

 java_springMVC_获取post请求的参数

点提交按钮,后台输出:

 java_springMVC_获取post请求的参数

需要注意的是,如果是一个数组,就不能使用getParameter了,如form表单中的兴趣爱好,需要使用String[] interest = request.getParameterValues(“interest”);

如果名称使用中文,会出现乱码,如,输入张三,后台收到:

 java_springMVC_获取post请求的参数

web.xml中添加如下配置即可解决中文乱码问题:

<!-- 乱码问题,post请求乱码 -->

<filter>

<filter-name>encoding</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encoding</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

再次使用中文: java_springMVC_获取post请求的参数 

方式二:直接使用参数

action的值改为:saveUser2

创建一个User类:

 java_springMVC_获取post请求的参数

并为user类的成员变量增加getset方法。

controller类中增加方法:

// 获取post请求参数(直接使用参数)

@RequestMapping(value="saveUser2", method=RequestMethod.POST)

public String saveUser2(String username, User user){

System.out.println("username - " + username);

System.out.println("user.username - " + user.getUsername());

return "login/welcome";

}

 java_springMVC_获取post请求的参数

点提交,后面输出如下:

 java_springMVC_获取post请求的参数

说明直接使用username为参数可以接受,直接使用类也可以接受。

注:之所以可以使用类为参数来接受数据,是spring的反射机制。即,form表单中的标签中的name属性:

 java_springMVC_获取post请求的参数

要和User类中的成员变量名相同,更准确的说,应该和成员变量对应的set方法对应,即:User类中的setUsername方法将接受form表单中name属性为username的值。