springMVC中跳转问题

  

在使用SpringMVC时遇到了这个跳转的问题很头疼。现在总结出来,对以后的开发有所帮助。

1、可以采用ModelAndView:

@RequestMapping("test1")
public ModelAndView test(){
    ModelAndView view = new ModelAndView();
    view.addAllObjects(map);
    view.setViewName("redirect:http://localhost:8080/springMVC1/test2");
    return view;
}

如果需要在Controller之间传递参数的时候,这种方式只能通过在访问路径后面加上参数以及将参数放到session域中的方式传递参数。

这种方式也可用于实现Controller到页面之间的跳转。并且可以传参数

public ModelAndView handleRequest(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        System.out.println("hello springMVC");
        Map<String,String> map = new HashMap<String,String>();
        map.put("msg", "你好Springmvc");
        return new ModelAndView("/welcome","map",map);
    }

ModelAndView构造方法中第一个参数是页面的访问路径(前面加上一个“/”表示从根路径开始。)后面两个参数就相当于键值对。在页面中通过el表达式取出键为map的值(map)${map}

ModelAndView跳转页面和跳转Controller的差距在于地址上跳转Controller有一个redirect:表示。跳转页面则没有

2、通过request.getRequestDispatch的方式跳转

public ModelAndView test(HttpServletRequest request,HttpServletResponse response){
    try {
        request.getRequestDispatcher("/test2").forward(request, response);
    } catch (ServletException e) {
        e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

}

这种方式跳转到另一个页面时可以通过request.setAttribute(key,value)的方式将参数传到另一个Controller中。并且如果执行这个跳转以后,程序后面的代码就不会再执行了。
如果是想从Controller跳转到页面则只需要将地址改为页面的地址就可以了。

注意:

因为在项目里我需要从一个页面的Ajax请求到一个Controller进行处理该Ajax的请求,然后根据处理的结果跳转到不同的页面。我之前的做法是在处理Ajax请求的Controller里进行下一个页面的跳转。试了从处理该Ajax请求的Controller里直接跳转到下个页面,或是跳到下一个Controller在跳转到需要的页面中。使用了ModelAndView的方法和Request.getRequestDispatch 的方法都没有用,最终的目的都不会跳转到目的页面,出现两种问题:

1、使用Request的方法时,跳转一直跳到本页面

2、使用ModelAndView时,响应到了目的页面的内容,但是界面没有跳转

最后得出结论。使用这两中方方式都不会跳转,具体原因不知道。我想可能是使用Ajax请求一定会有一个放回的数据,所以SpringMVC不知道怎么处理放回数据和跳转页面的关系?

得出的一个解决办法是:

function test(){
        $.ajax({
            url:‘testSkip/test3.do‘,
            type:‘post‘,
            dataType:‘json‘,
            success:function(data){
                console.info(data);
                var url = data.url ;
                alert(url);
                window.location.href=url ;
            },
            error:function(){
                alert("error");
            }
        });
    }
@RequestMapping("test3")
    @ResponseBody
    public Object test3(){
        Result result = new Result();
        result.setUrl("testSkip2/test3.do");
        return result ;
    }
}
@Controller@RequestMapping("testSkip2")public class TestController2 {@RequestMapping("test3")
    public ModelAndView test2(){
        System.out.println("跳转页面2.2");
        return new ModelAndView("/company/company_on_line","result","数据");

    }}

在Ajax请求在两个Controller或是Controller与页面之间跳转之前插入一步回到原来的Ajax请求页面通过  window.location.href=url ; 再次发送请求。这是该请求的地址可以使一个Controller地址和页面地址。这是跳转就没问题。

springMVC中跳转问题,布布扣,bubuko.com

时间: 2024-10-06 06:28:12

springMVC中跳转问题的相关文章

SpringMVC中跳转路径的问题

1. @RequestMapping 1)@RequestMapping既可以作用于类,也可以作用于方法 2)@RequestMapping中value值(即跳转的路径),可以加 "/",也可不加 / 也就是说:@RequestMapping("users") 等价于 @RequestMapping("/users") 3)作用于类的 @RequestMapping可以省略不要,但是作用于方法的 @RequestMapping必须有 2. 类有@

SpringMVC中文件上传的客户端验证

SpringMVC中文件上传的客户端验证 客户端验证主要思想:在jsp页面中利用javascript进行对文件的判断,完成验证后允许上传 验证步骤:1.文件名称 2.获取文件的后缀名称 3.判断哪些文件类型允许上传 4.判断文件大小 5.满足条件后跳转后台实现上传 前台界面(验证上传文件是否格式满足要求): <body> <h2>文件上传</h2> <form action="upload01" method="post" 

【SpringMVC学习07】SpringMVC中的统一异常处理

我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生.在开发中,不管是dao层.service层还是controller层,都有可能抛出异常,在springmvc中,能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护.这篇博文主要总结一下SpringMVC中如何统一处理异常. 1. 异常处理思路 首先来看一下在spr

SpringMVC中使用Interceptor拦截器

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.filefilter.FalseFileFilter; import org.slf4j.Logger; import org.s

SpringMVC中的种映射处理器

在SpringMVC中处理请求到对应的Controller有三种: 一.BeanNameUrlHandlerMapping(默认) 该处理器根据bean的name属性对应到请求上 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>可有可无 例如: <bean name="/index3" class="com.controlle

【SpringMVC学习11】SpringMVC中的拦截器

Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下springmvc中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法. 1. springmvc拦截器的定义和配置 1.1 springmvc拦截器的定义 在springmvc中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法,如下: //测试拦截器1 public class HandlerInterceptor1 im

【SpringMVC学习03】SpringMVC中注解和非注解方式下的映射器和适配器总结

从上一篇的springmvc入门中已经看到,springmvc.xml中的配置了映射器和适配器,是使用非注解的方式来配置的,这是非注解方式的一种,这里再复习一下: 1. 非注解方式 1.1 处理器适配器 上一节中使用的处理器适配器是:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.即: SimpleControllerHandlerAdapter适配器能执行实现了Controller接口的Handler,所以我

SpringMVC中使用Interceptor+Cookie实现在一定天数之内自动登录

一 简介 本篇文章主要介绍:在SpringMVC中如何使用Interceptor+Cookie实现在一定天数之内自动登录的功能.同时还介绍"如果校验失败则跳转到登录页面,在输入用户名.密码等完成登录之后又自动跳转到原页面"的功能实现 本次测试环境是SSM框架,在正式介绍本篇文章之前,建议需要熟悉以下前置知识点: Mybatis中使用mybatis-generator结合Ant脚本快速自动生成Model.Mapper等文件(PS:这是为了快速生成一些基本文件)   https://www