IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringMVC结果跳转方式 -> 正文阅读

[Java知识库]SpringMVC结果跳转方式

SpringMVC结果跳转方式

上节研究了使用 REST 风格发起请求,这节来研究一下 Controller 如何跳转对对应的视图!还是使用 Spring-05-REST 项目(都是重复配置,还不如多写几个 Controller,反正内容不多)!

1. ModelAndView

刚开始学习时用的方式,仅限研究执行过程使用,一般都不用的啦。

编写 ControllerMAV 类实现 Controller 接口(需要 org.springframework.web.servlet.mvc.Controller 的包,和注解 Controller 的包不是同一个)

public class ControllerMAV implements Controller {

    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        // 获取本次会话的 Session
        HttpSession session = httpServletRequest.getSession();
        String id = session.getId();
        // 放信息,设视图
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg",id);
        mv.setViewName("test");

        return mv;
    }
}

通过 ModelAndView 的 setViewName 方法设置返回的视图名字,再返回这个 mv 对象,视图解析器解析其中的视图名字。

使用这种方式不要忘记配置 bean

<bean id="/testmav" class="com.qiyuan.controller.ControllerMAV"/>

运行测试,成功输出 SessionID!不过好麻烦,就当小复习一下了!

2. Model

这就是使用注解后的方式了!

编写 ControllerM 类,添加 @Controller 注解

@Controller
public class ControllerM {
    @RequestMapping("/testm")
    public String TestM(Model model, HttpServletRequest req, HttpServletResponse resp){
        // 获取本次会话的 Session
        HttpSession session = req.getSession();
        String id = session.getId();
        // 放信息
        model.addAttribute("msg",id);
        return "test";
    }
}

**这里用到了 req 和 resp,说明它们是存在的!**要用的话就当参数传进来就好了;Model 参数不用多说,放信息的嘛。

通过直接返回 String 字符串设置要跳转的视图,这个 String 字符串就是视图名字。

运行测试,也成功输出 SessionID,简单,舒服!

3. ServletAPI

既然有 req 和 resp,那就肯定能用它们的方法,当然也可以用原生 API 进行转发重定向了!这种方式就不需要视图解析器了!

复习一下转发和重定向的区别:

  • 转发是服务器内部行为,用户只发起一次请求
  • 重定向是服务器返回另一请求给用户,用户发起二次请求

编写 ControllerSAPI 类,添加 @Controller 注解

@Controller
public class ControllerSAPI {
    
    @RequestMapping("/testsapi/forward")
    public void TestF(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 用原生 API 当然需要这两个参数了
        req.setAttribute("msg","转发啦");
        req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
    }

    @RequestMapping("/testsapi/redirect")
    public void TestR(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 用原生 API 当然需要这两个参数了
        req.setAttribute("msg","重定向啦");
        // 重定向就访问不了被保护的 WEB-INF 目录了!!!
        // 由客户端发起二次请求,要带上项目路径!!!
        resp.sendRedirect(req.getServletContext().getContextPath()+"/index.jsp");
    }
}

再复习一下,转发会直接在当前项目路径下寻找,而重定向由用户再次发起请求,所以路径要是完整的!

运行测试,跳转都成功!这种方式的跳转就没有经过视图解析器了,完全是 Servlet 实现的(没人会这么干吧)!

4. SpringMVC

用 SpringMVC 的方式实现一下 ServletAPI 做的转发和重定向,也是不需要视图解析器的(直接一步到位了,当然只是演示用)!

编写 ControllerSMVC 类,添加 @Controller 注解

@Controller
public class ControllerSMVC {

    @RequestMapping("/testsmvc/forward")
    public String TestF(Model model){
        model.addAttribute("msg","Qiyuan转发!");
        // 转发
        // 没有视图解析器当然要手动拼接辽
        return "forward:/WEB-INF/jsp/test.jsp";
    }

    @RequestMapping("/testsmvc/redirect")
    public String TestM(Model model){
        model.addAttribute("msg","Qiyuan重定向!");
        // 重定向
        // 这里和直接用 Servlet 不一样!SpringMVC 会自动补上项目路径!
        return "redirect:/index.jsp";
    }
}

运行测试,跳转成功!主要是通过返回的字符串中的 forward 和 redirect 关键字实现的!

转发没什么好说的,重定向比 Servlet 智能多了,会自动加上项目路径!

5. 总结

没什么好总结的,就是盘点一下结果跳转的方式!用的最多的还是3,偶尔用用5!也就这样了😕。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:22:29  更:2021-09-04 17:24:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:54:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码