• springmvc (四种跳转方式)重定向,转发到页面和action的区别


    重定向与转发的区别:

    1.重定向访问服务器两次,转发只访问服务器一次。

    2.转发页面的URL不会改变,而重定向地址会改变

    3.转发只能转发到自己的web应用内,重定向可以重定义到任意资源路径。

    4.转发相当于服务器跳转,相当于方法调用,在执行当前文件的过程中转向执行目标文件,两个文件(当前文件和目标文件)属于同一次请求,前后页 共用一个request,可以通过此来传递一些数据或者session信息,request.setAttribute()和 request.getAttribute()。而重定向会产生一个新的request,不能共享request域信息与请求参数

    5.由于转发相当于服务器内部方法调用,所以转发后面的代码仍然会执行(转发之后记得return);重定向代码执行之后是方法执行完成之后进行重定向操作,也就是访问第二个请求,如果是方法的最后一行进行重定向那就会马上进行重定向(重定向也需要return)。

    6.无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中移除。

    可以这么理解:

    转发相当于,张三向你借钱,但是你兜里没钱,所以你去找李四借到钱之后借给张三。对于张三而言并不知道你的钱是和李四借的。

    重定向相当于,张三向你借钱,你兜里没钱,你告诉他李四有钱,所以张三再次去找李四借钱。

    重定向和转发是Spring MVC中用于控制请求的两种方式。

    重定向是指将请求重新发送到一个新的URL,新的URL可以是另一个控制器方法、一个静态资源或者一个外部URL。通过重定向可以实现页面跳转和访问其他资源。在Spring MVC中,可以使用redirect:前缀来实现重定向。例如,return “redirect:/index.jsp”;表示重定向到index.jsp页面。

    转发是指将请求转发给另一个控制器方法或者一个JSP页面进行处理,转发不改变客户端的URL。在Spring MVC中,可以使用forward:前缀来实现转发。例如,return “forward:/url”;表示将请求转发到/url地址。转发可以在服务器内部进行,因此可以共享请求和响应对象。

    重定向和转发的选择取决于具体的需求。如果需要跳转到一个新的URL或者访问其他资源,可以使用重定向。如果需要将请求转发给另一个控制器方法或者JSP页面进行处理,可以使用转发

    前端请求发送页面

    <br>
    <a href="${pageContext.request.contextPath}/one.action">1.请求转发页面</a><br>
    <a href="${pageContext.request.contextPath}/two.action">2.请求转发action</a><br>
    <a href="${pageContext.request.contextPath}/three.action">3.重定向页面</a><br>
    <a href="${pageContext.request.contextPath}/four.action">4.重定向action</a><br>
    <br>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    具体的Controller类,实现请求与转发

    package com.powernode.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class JumpAction {
        @RequestMapping("/one.action")
        public String one(){
            System.out.println("这是请求转发页面。。。。");
            return "main";//默认这是请求转发,使用视图解析器进行前后缀拼接进行页面跳转
        }
        @RequestMapping("/two.action")
        public String two(){
            System.out.println("这是请求转发action跳转。。。。");
            //forward:这组字符串可以屏蔽前后缀的拼接
            return "forward:/other.action";
        }
        @RequestMapping("/three.action")
        public String three(){
            System.out.println("这是重定向页面。。。。");
            //redirect: 这组字符串可以屏蔽前缀后缀的拼接,实现重定向跳转
            return "redirect:/admin/main.jsp";
        }
        @RequestMapping("/four.action")
        public String four(){
            System.out.println("这是重定向 action跳转。。。。");
            //redirect: 这组字符串可以屏蔽前缀后缀的拼接,实现重定向跳转
            return "redirect:/other.action";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    springmvc.xml的配置文件

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        
        <context:component-scan base-package="com.powernode.controller">
        
        
        context:component-scan>
        <mvc:annotation-driven>mvc:annotation-driven>
        
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            
            <property name="prefix" value="/admin/">property>
            
            <property name="suffix" value=".jsp">property>
        bean>
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    不需要去创建,直接拿来使用即可.
    1)HttpServletRequest
    2)HttpServletResponse
    3)HttpSession
    4)Model
    5)Map
    6)ModelMap
    //做一个数据,传到main.jsp页面上
    Users u = new Users(“张三”,22);

        //传递数据
        request.setAttribute("requestUsers",u);
        session.setAttribute("sessionUsers",u);
        model.addAttribute("modelUsers",u);
        map.put("mapUsers",u);
        modelMap.addAttribute("modelMapUsers",u);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意:Map,Model,ModelMap和request一样,都使用请求作用域进行数据传递.所以服务器端的跳转必须是请求转发.

  • 相关阅读:
    javascript二维数组(15)
    Qt/C++音视频开发55-加密保存到文件并解密播放
    MMDetection counts detected objects
    使用 PPO 算法进行 RLHF 的 N 步实现细节
    User Account Status 在CDB 和PDB不一致的情况 OPEN & IN ROLLOVER
    Web前端:JavaScript--->内置对象自定义对象*笔记
    弘辽科技:淘宝没提升销量就没流量吗?怎么挽救?
    SQL Server安装
    【分布式】NCCL部署与测试 - 01
    【C++ 哈希应用】
  • 原文地址:https://blog.csdn.net/m0_64803878/article/details/132746116