springmvc页面跳转

1. springmvc页面跳转的几种方式

  1. 使用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存值。

  1. 使用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);
}
  1. 使用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;
}
  1. 使用关键字进行跳转
    这种方法也是页面转发(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,将数据返回给前端。
注意
我踩过的坑

  1. pojo必须提供无参构造方法。
  2. 发送数据格式contentType:‘application/json;charset=utf-8’,
  3. 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;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值