SpringMVC学习2——SpringMVC与jsp的参数传递和返回值响应
解决提交乱码的问题:
在web.xml中加入过滤器:
<!-- 解决post乱码问题 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 设置编码参是UTF8 -->
<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>
参数传递
获取get请求中的参数
@RequestMapping("/addUser1")
public String addUser1(String username,String password) {
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "demo/index";
}
// 可以用@RequestParam("password")来进行参数名的转换
public String addUser1(String username, @RequestParam("password") String psw) {...}
// 设定参数必传和默认值
public String addUser1(String username, @RequestParam(value="password",required=true, defaultValue="123") String psw) {...}
通过HttpServletRequest接收
@RequestMapping("/addUser2")
public String addUser2(HttpServletRequest request) {
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "demo/index";
}
注意:post方式和get方式都可以, 但不能接收json, post方式的时候编码方式需设置为:x-www-form-urlencoded转换为键值对
通过一个bean来接收
@RequestMapping("/doLogin")
public User doLogin(User u) {
logger.info("name: " + u.getName());
logger.info("pswd: " + u.getPswd());
User user = new User();
user.setName(u.getName());
user.setPswd(u.getPswd());
return user;
}
注意: post方式和get方式都可以,同时,也可以接受json数据
使用Map接收json
@RequestMapping("/doLogin")
public @ResponseBody User doLogin(@RequestBody Map<String, String> u) {
logger.info("name: " + u.get("name"));
logger.info("pswd: " + u.get("pswd"));
User user = new User();
user.setName(u.get("name"));
user.setPswd(u.get("pswd"));
return user;
}
返回值响应
返回值响应有三种:
1、返回ModelAndView 2、返回void 但是用request和response进行额外处理 3、返回string
这里主要看下2、3
返回void 但是用request和response进行额外处理
@RequestMapping("queryVoid")
public void queryVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
// request响应用户请求
// request.setAttribute("msg", "这个是request响应的消息");
// request.getRequestDispatcher("/WEB-INF/jsp/msg.jsp").forward(request,
// response);
// response响应用户请求
// response.sendRedirect("itemList.action");
// 设置响应的字符编码
// response.setContentType("text/html;charset=utf-8");
}
注意:request 做跳转可以带入参数,response做跳转无法带入参数
返回string
@RequestMapping("item/{id}")
public String itemQuery(@PathVariable("id") Integer ids,Model model) {
...
return "forward:itemList:action";
}
通过前缀forward,redirect 进行寻址,相当于requst的请求转发和response请求重定向。也可以直接写页面id