1 url路径
@PathVariable注解进行占位符的匹配获取工作。
http://localhost:8080/itheima_springmvc1/quick19/zhangsan
@RequestMapping("/quick19/{name}")
@ResponseBody
public void quickMethod19(@PathVariable(value = "name",required = true) String name){
System.out.println(name);
}
2 get参数获取
使用@RequestParam
/user/?id=123时,SpringMVC帮助我们将Request参数id的值绑定到了处理函数的参数blogId上。这样就能够轻松获取用户输入,并根据它的值进行计算并返回了。
@RequestMapping(value="/user")
public String getUserBlog(@RequestParam(value="id") int blogId) {
return "blogId="+blogId;
3 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>
这样在页面中访问http://localhost:8080/firstSpringMVC/user/addUser
可得到如下页面:
方式一:使用HttpServletRequest 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";
}
点提交按钮,后台输出:
需要注意的是,如果是一个数组,就不能使用getParameter了,如form表单中的兴趣爱好,需要使用String[] interest = request.getParameterValues(“interest”);
如果名称使用中文,会出现乱码
在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>
方式二:直接使用参数 (spring 方式)
action的值改为:saveUser2
创建一个User类:(pojo)
并为user类的成员变量增加get、set方法。
在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";
}
点提交,后面输出如下:
说明直接使用username为参数可以接受,直接使用类也可以接受。
注:之所以可以使用类为参数来接受数据,是spring的反射机制。即,form表单中的标签中的name属性:
要和User类中的成员变量名相同,更准确的说,应该和成员变量对应的set方法对应,即:User类中的setUsername方法将接受form表单中name属性为username的值。