当前位置: 首页 > 图灵资讯 > 技术篇> 请求转发和重定向

请求转发和重定向

来源:图灵教育
时间:2023-06-07 09:48:12

1.要求转发和重定向52

当处理器完成请求并跳转到其他资源时,有两种跳转方式:请求转发和重量

方向。根据要跳转的资源类型,可分为两类:跳转到页面和跳转到其他处理器。

请注意,要求转发的页面可以是WEB-INF中的页面;重定向页面不能是WEB-INF

中页。因为重定向相当于用户再次发出请求,用户无法直接访问WEB-INF中资

源的。

请求转发和重定向_springmvc

SpringMVC框架包装了原Servlet中的请求转发和重定向操作。现在可以简单使用了

实现转发和重定向的单一方式。

forward:表示转发,实现request.getRequestDispatcher("xx.jsp").forward()

redirect:表示重定向,实现responsee.sendRedirect("xxx.jsp")

forward:表示转发

redirect:表示重定向

forward和redirect都是关键字,有一个共同的特点,不与视图解析器一起工作

2.请求转发52

当处理器方法返回ModelAndView时,需要在setviewname()指定的视图前添加forward:,且

此时,视图不再与视图解析器一起工作,因此在配置解析器时可以指定不同位置的视图。

视图页面 相对于项目根的路径必须写出来。forward操作不需要视图分析器。

将处理器方法返回到String,并在视图路径前添加forward:完整的视图路径。

2.1需求52

处理器方法返回ModelAndView,实现转发forward

语法:setViewName("forward:视图文件完整路径”)

forward特点:当项目中没有视图解析器时,不与视图解析器一起使用

因为我们的视图分析器已经配置了死亡(),我们只能跳转view目录下的页面,但我们现在有了hello.jsp不在WEB-INF在/view目录下,如果跳转,可以使用转发操作。因为转发操作忽略了视图解析器,所以不会报错

index.jsp

<%--index.编写jsp页面  52--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%    String basePath = request.getScheme() + "://" +            request.getServerName() + ":" + request.getServerPort() +            request.getContextPath() + "/";%><html><head>    <title>Title</title>    <base href="<%=basePath%>" /></head><body>    <p>当出方法返回ModelAndview实现forward</p>    <form action="doForward.do" method="post">        姓名:<input type="text" name="name"> <br/>        年龄:<input type="text" name="age"> <br/>        <input type="submit" value=“提交请求”>    </form></body></html>

MyController

/**     * 处理器方法返回ModelAndView,实现转发forward  52     * 语法: setViewName("forward:视图文件完整路径”)     * forward特点: 不与视图解析器一起使用,当项目中没有视图解析器时,就没有视图解析器     */    @RequestMapping(value = "/doForward.do")    public ModelAndView doSome(){        ///处理some.do请求了。 相当于service调用处理的完成。 相当于service调用处理的完成。        ModelAndView mv = new ModelAndView();        //添加数据, 在请求结束时,框架将数据放入request作用域。        mv.addObject("msg“欢迎使用springmvc坐web开发”;        mv.addObject("fun",“执行dosome方法”);        //转发        mv.setViewName("forward:/WEB-INF/view/show.jsp");        //返回mv        return mv;    }

hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body>    <h3>/WEB-INF/view/hello.jsp从request作用域获取数据</h3><br/>    <h3>msg数据:${msg}</h3><br>  <%--这里使用El表达式-%>    <h3>fun数据:fun数据:${fun}</h3></body></html>

转发操作路径不会改变,服务器端可以访问WEB-INF目录下的文件

请求转发和重定向_视图解析器_02

3.要求重定向53

在处理器方法返回的视图字符串前添加redirect:,可实现重定向跳转。

redirect的特点:当项目中没有视图解析器时,不与视图解析器一起使用

3.1框架对重定向操作:53

1.框架将Model中简单类型的数据转换为string作为hellolo.使用jspget请求参数。

目的是doredirect.do和hello.Jsp两个请求之间的数据传递

2.目标hello.jsp页面可以使用参数集合对象${param}获取请求参数值${param.myname}

3.重定向不能访问/WEB-INF资源

3.2案例53

index.jsp

    <br/>    <br/>    <p>当出方法返回ModelAndview实现redirectt</p>    <form action="doRedirect.do" method="post">        姓名:<input type="text" name="name"> <br/>        年龄:<input type="text" name="age"> <br/>        <input type="submit" value=“提交请求”>    </form>

MyController

@RequestMapping(value = "/doRedirect.do")    public ModelAndView doWithRedirect(String name,Integer age){        ///处理some.do请求了。 相当于service调用处理的完成。        ModelAndView mv  = new ModelAndView();        ///数据放入 request作用域域        mv.addObject("myname",name);        mv.addObject("myage",age);        //重定向        mv.setViewName("redirect:/hello.jsp");        //http://localhost:8080/ch08_forard_redirect/hello.jsp?myname=lisi&myage=22        ///不能访问重定向//WEB-INF资源        //mv.setViewName("redirect:/WEB-INF/view/show.jsp");        return mv;    }

hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body>    <h3>/WEB-INF/view/hello.jsp从request作用域获取数据</h3><br/>        <%--<h3>msg数据:${msg}</h3><br>  <%–El表达式用于这里–%>    <h3>fun数据:fun数据:${fun}</h3>--%>    <h3>myname数据:${param.myname}</h3><br/>    <h3>myage数据:${param.myage}</h3>    <h3>参数数据:<%=request.getParameter("myname")%></h3></body></html>
3.3重定向不能访问/WEB-INF资源54

重定向将改变访问地址,相当于用户的两个请求,无权访问/WEB-INF资源

@RequestMapping(value = "/doRedirect.do")    public ModelAndView doWithRedirect(String name,Integer age){        ///处理some.do请求了。 相当于service调用处理的完成。        ModelAndView mv  = new ModelAndView();        ///数据放入 request作用域域        mv.addObject("myname",name);        mv.addObject("myage",age);        //重定向        //mv.setViewName("redirect:/hello.jsp");        //http://localhost:8080/ch08_forard_redirect/hello.jsp?myname=lisi&myage=22        ///不能访问重定向//WEB-INF资源        mv.setViewName("redirect:/WEB-INF/view/show.jsp");        return mv;    }

 

请求转发和重定向_重定向_04

上一篇:

集成Redis

下一篇:

Bean的循环依赖问题