springmvc页面跳转
1. springmvc页面跳转的几种方式
- 使用springmvc的视图解析器,进行跳转。
@RequestMapping("/testString")
public String testString(ModelMap modelMap){
System.out.println("01");
User user = new User("1","123",23);
modelMap.addAttribute("user",user);
return "success";
}
该方式的特点就是根据方法的返回值(success),与视图解析器配置的
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
结合,得到一个完整的地址,进行跳转。
ModelMap这个对象底层是一个request,使用它可以在request存值。
- 使用servletAPI组件进行跳转。
这里面有两种方式,请求转发和页面重定向,重定向不能请求webinf中的资源
@RequestMapping("/testVoidRequest")
public void testVoidRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("01");
User user = new User("章三","123",23);
request.setAttribute("user",user);
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
}
@RequestMapping("/testVoidResponse")
public void testVoidResponse(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("01");
User user = new User("章三","123",23);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf8");
// response.sendRedirect(request.getContextPath()+"/test.jsp");
response.getWriter().print(user);
}
- 使用springMVC提供的对象进行跳转ModelAndView,该类名的含义是数据和视图。使用该类既可以传递数据(modelMap.addAttribute(“user”,user);),又可以跳转页面(mv.setViewName(“success”);)。
@RequestMapping("/testVoidModelAndView")
public ModelAndView testVoidModelAndView() {
System.out.println("01");
ModelAndView mv = new ModelAndView();
ModelMap modelMap = mv.getModelMap();
User user = new User("章三","123",23);
modelMap.addAttribute("user",user);
mv.setViewName("success");
return mv;
}
- 使用关键字进行跳转
这种方法也是页面转发(forward),和重定向(redirect)
@RequestMapping("/testForward")
public String testForward() {
System.out.println("01");
return "forward:/WEB-INF/pages/success.jsp";
}
@RequestMapping("/testRedirect")
public String testRedirect() {
System.out.println("01");
return "redirect:index.jsp";
}
2. springmvc的Ajax与json
jackson提供了json数据与pojo之间转化的api,这玩意与springmvc的注解结合起来,看起来就简单很多。
首先发送ajax请求,请求参数为json格式。
controller接收到,将使用@RequestBody注解,将数据以pojo封装到controller方法参数中,方法返回值使用@ResponseBody,将数据返回给前端。
注意
我踩过的坑
- pojo必须提供无参构造方法。
- 发送数据格式contentType:‘application/json;charset=utf-8’,
- data:’{“name”:“zpx”,“password”:“123”,“age”:23}’,
需要引入
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<script src="js/jquery.min.js"></script>
<script>
$(function(){
$("#but").click(function () {
$.ajax({
url:"user/testString",
type:"post",
contentType:'application/json;charset=utf-8',
data:'{"name":"zpx","password":"123","age":23}',
// data:'{"id":1,"name":"test","money":999.0}',
dataType:"json",
success:function(data){
alert(data);
}
});
});
});
</script>
<button id="but" type="button" value="发送ajax请求">发送ajax请求</button>
@RequestMapping("/testString")
public @ResponseBody User testString(@RequestBody User user){
System.out.println("01");
System.out.println(user);
return user;
}