SpringMVC的转发与重定向

关注视图解析器与转发重定向的关系

ModelAndView

设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 .

页面 : {视图解析器前缀} + viewName +{视图解析器后缀}

<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      id="internalResourceViewResolver">
    <!-- 前缀 -->
    <property name="prefix" value="/WEB-INF/jsp/" />
    <!-- 后缀 -->
    <property name="suffix" value=".jsp" />
</bean>

对应的controller类

public class ControllerTest1 implements Controller {

    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //返回一个模型视图对象
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","ControllerTest1");
        mv.setViewName("test");
        return mv;
    }
}

ServletAPI

通过设置ServletAPI , 不需要视图解析器 .

  1. 通过HttpServletResponse进行输出
  2. 通过HttpServletResponse实现重定向
  3. 通过HttpServletResponse实现转发
@Controller
public class ResultGo {

    @RequestMapping("/result/t1")
    public void test1(HttpServletRequest req, HttpServletResponse rsp) throws IOException {
        rsp.getWriter().println("Hello,Spring BY servlet API");
    }

    @RequestMapping("/result/t2")
    public void test2(HttpServletRequest req, HttpServletResponse rsp) throws IOException {     //重定向
        rsp.sendRedirect("/index.jsp");
    }

    @RequestMapping("/result/t3")
    public void test3(HttpServletRequest req, HttpServletResponse rsp) throws Exception {
        //转发
        req.setAttribute("msg","/result/t3");
        req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,rsp);
    }

}

SpringMVC

通过SpringMVC来实现转发和重定向 - 无需视图解析器;

测试前,需要将视图解析器注释掉

@Controller
public class ResultSpringMVC {
    @RequestMapping("/rsm/t1")
    public String test1(){
        //转发
        return "/test.jsp";
    }

    @RequestMapping("/rsm/t2")
    public String test2(){
        //转发二
        return "forward:/test.jsp";
    }

    @RequestMapping("/rsm/t3")
    public String test3(){
        //重定向
        return "redirect:/test.jsp";
    }
}

测试结果:

输入http://localhost:8080/rsm/t3时会自动重定向到http://localhost:8080/test.jsp路径

修改第二种转发方式,补全路径

    @RequestMapping("/rsm/t2")
    public String test2(){
        //转发二
        return "forward:/WEB-INF/jsp/test.jsp";
    }

测试结果:正常访问

 

通过SpringMVC来实现转发和重定向 - 有视图解析器

即正常配置下的情况,转发不需要测试,查看重定向的情况:

发现重定向不受视图解析器影响, 本质就是重新请求一个新地方,所以与视图解析器无关

原文地址:https://www.cnblogs.com/alanchenjh/p/12306873.html

时间: 2024-10-09 17:10:49

SpringMVC的转发与重定向的相关文章

SpringMVC笔记(六)SpringMVC的转发和重定向

一.转发和重定向 一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理 如果返回的字符串中带 forward: 或 redirect: 前缀 时,SpringMVC 会对他们进行特殊处理: 将 forward: 和 redirect: 当成指示符,其后的字符串作为 URL 来处理 –redirect:/success.jsp:会完成一个到 success.jsp 的重定向的操作        –forward:/success.jsp:会完成一个到 success.jsp 的转发操作

SpringMVC核心技术---转发和重定向

当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发和与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器. 对于请求转发的页面,也可以是WEB-INF中页面:对于重定向的页面,不能为WEB-INF中的页面.因为重定向相当于用户再次发出一次请求,而用户是不能直接访问WEB-INF中资源的.

SpringMVC转发和重定向区别!

在servlet中,转发和重定向是由request和response完成的.两者之间的区别请看我之前的文章.那么在springMVC中是如何完成的呢? /**转发**/ @RequestMapping("/login.do") public String login(HttpServletRequest request,HttpServletResponse response){ request.setAttribute("message", "hello

SpringMVC(四):转发、重定向和Flash属性

1.转发和重定向的区别 一句话概括:重定向是客户端行为,转发是服务器行为. 1.请求次数: 重定向:重定向行为是做了两次请求,及产生了两个request对象,重定向会导致request对象信息丢失. 请求转发:转发做了一次请求, 浏览器的地址栏一直是第一次请求的地址.转发是服务器内部request/response控制权的移交. 2.请求资源地址: 重定向:web组件可以将请求重定向到任意一个url,而不仅仅是同一个应用. 重定向的源组件与目标组件不共用同一个HttpServletRequest

springMVC之一(页面&lt;---&gt;控制器 互相传值,转发和重定向)

#页面--->控制器1.request:不建议使用2.使用属性传值(建议使用)@RequestParam("name") String username3.使用Bean对象传值(适合数据量大) #控制--->页面request,session(cookie),application1.request,session传递数据到页面2.ModelAndView:Model--->ModelMap--->Map3.ModelMap(推荐使用) #重定向和转发1.重定向

SpringMVC 转发、重定向

转发.重定向到其它业务方法 @org.springframework.stereotype.Controller @RequestMapping("/userController") public class UserController{ @RequestMapping("/handler1") public String handler1() throws IOException { //转发给handler2处理 return "forward:ha

springMVC带参数请求重定向

SpirngMVC返回逻辑视图名 可以分下面几种情况: 1. servlet进行请求转发,返回到jsp页面,如  return "index.jsp" ; 2. servlet 返回结果,让请求 重定向到某个jsp页面 ,此时servlet 返回语句类似:  return  " redirect : index.jsp "; 3. servlet 的返回结果是 请求另外一个servlet   此时servlet 返回语句类似:  return  " red

springmvc_转发与重定向

springmvc中响应方式默认是转发. 如果希望手动设置转发或者重定向 return “/user/list”; 默认 return “forward:/user/list”; 默认 return “redirect:/user/list”; 默认 如果希望从一个请求跳转到另外一个请求,一定要手动设置跳转方式 原文地址:https://www.cnblogs.com/Tunan-Ki/p/11784922.html

Struts2配置使用参数接收,转发与重定向,多方法,ognl使用与值传递,struts标签使用

本文档包括了 (1)首先加入jar包(最小jar组合) (1)   在web.xml中注册Struts2 这是一个前控制器作用是提供一个统一的入口,所有的请求都先经过前控制器就是这里,然后由他在做进一步处理 <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter