url地址/user/1中的1就是要获得的请求参数,在SpringMVC中可以使用占位符进行参数绑定。地址/user/1可以写成 /user/{id} ,占位符{id}对应的就是1的值。在业务方法中我们可以使用@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
这样,当我们0访问/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页面如下:
这样在页面中访问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中添加如下配置即可解决中文乱码问题:
encoding org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encoding /*
方式二:直接使用参数 (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的值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)