什么是springMVC 视图和视图解析器

news2024/9/25 21:21:10

😀前言
本篇讲解了什么是springMVC 视图和视图解析器

🏠个人主页:尘觉主页
在这里插入图片描述

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

文章目录

  • 😀什么是springMVC 视图和视图解析器
    • 🥰基本介绍
    • 😉自定义视图
      • 为什么需要自定义视图
      • 自定义视图实例-代码实现
        • 配置 springDispatcherServlet-servlet.xml , 增加自定义视图解析器
        • 建MyView.java -自定义视图类
          • 解读
          • 注意
        • 创建GoodsHandler.java类
        • 创建view.jsp类
        • 创建/WEB-INF/pages/my_view.jsp类
        • 完成测试(Postman 测试)
      • 自定义视图-小结
        • 自定义视图-工作流程
    • 😘目标方法直接指定转发或重定向
      • 应用实例-代码实现
        • 修改 GoodsHandler.java, 增加方法 order()
          • 直接指定要请求转发的或者是重定向的页面
        • 修改view.jsp
        • 完成测试(页面测试)
        • 完成测试(Postman 测试)
    • 💖综合代码演示
      • 完成一个简单的用户登录案例
      • 代码实现
        • 创建login.jsp
        • 创建login_ok.jsp
        • 创建login_error.jsp
        • 创建 User.java
        • 创建LoginHandler.java
    • 😄总结

😀什么是springMVC 视图和视图解析器

🥰基本介绍

  1. 在 springMVC 中的目标方法最终返回都是一个视图(有各种视图)

  2. 返回的视图都会由一个视图解析器来处理 (视图解析器有很多种)

😉自定义视图

为什么需要自定义视图

  1. 在默认情况下,我们都是返回默认的视图, 然后这个返回的视图交由 SpringMVC 的InternalResourceViewResolver 视图处理器来处理的

img

  1. 在实际开发中,我们有时需要自定义视图,这样可以满足更多更复杂的需求

自定义视图实例-代码实现

配置 springDispatcherServlet-servlet.xml , 增加自定义视图解析器

解读

  1. 配置自定义视图解析器BeanNameViewResolver

  2. BeanNameViewResolver可以去解析我们自定义的视图

  3. 配置 属性 order, 表示视图解析器执行的顺序, 值越小, 优先级越高

  4. 属性 order 的默认值是最低优先级 ,值为 Integer.MAX_VALUE int LOWEST_PRECEDENCE = 2147483647

    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="99"/>
    </bean>

建MyView.java -自定义视图类

解读
  1. MyView继承了AbstractView, 就可以作为一个视图使用
  2. @Component(value = “myView”),该视图会注入到容器中, 名字/id是 myView
@Component(value = "hspView")
public class MyView extends AbstractView {
    @Override
    protected void renderMergedOutputModel(Map<String, Object> model,
                                           HttpServletRequest request,
                                           HttpServletResponse response) throws Exception {

        //完成视图渲染
        //并且可以确定我们要跳转的页面 [请求转发] /WEB-INF/pages/my_view.jsp
        System.out.println("进入到自己的视图..");

        //解读
        //1. 下面就是进行请求转发到 /WEB-INF/pages/my_view.jsp
        //2. /WEB-INF/pages/my_view.jsp 会被springmvc解析
        //   /springmvc/WEB-INF/pages/my_view.jsp
        request.getRequestDispatcher("/WEB-INF/pages/my_view.jsp")
                .forward(request, response);

    }
}
注意
  1. 下面就是进行请求转发到 /WEB-INF/pages/my_view.jsp

  2. /WEB-INF/pages/my_view.jsp 会被springmvc解析 /springmvc/WEB-INF/pages/my_view.jsp

3.最后浏览器解析成http://localhost:8080 /springmvc/WEB-INF/pages/my_view.jsp

创建GoodsHandler.java类

@RequestMapping("/goods")
@Controller
public class GoodsHandler {

    @RequestMapping(value = "/buy")
    public String buy() {
        System.out.println("------buy()-----");
        return "myView";
    }
}

创建view.jsp类

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>自定义视图测试</title>
</head>
<body>
<h1>自定义视图测试</h1>
<a href="goods/buy">点击到自定义视图-</a><br/>
</body>
</html>

创建/WEB-INF/pages/my_view.jsp类

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>my_view页面</title>
</head>
<h1>进入到my_view页面</h1>
<p>是从自定义视图来的..</p>
<body>

</body>
</html>

完成测试(Postman 测试)

img

自定义视图-小结

  1. 自定义视图: 创建一个 View 的 bean, 该 bean 需要继承自 AbstractView, 并实现renderMergedOutputModel 方法。

  2. 并把自定义 View 加入到 IOC 容器中

  3. 自定义视图的视图处理器,使用 BeanNameViewResolver, 这个视图处理器也需要配置到 ioc 容器

  4. BeanNameViewResolver 的调用优先级需要设置一下,设置 order 比 Integer.MAX_VAL小的值. 以确保其在 InternalResourceViewResolver 之前被调用

自定义视图-工作流程

  1. SpringMVC 调用目标方法, 返回自定义 View 在 IOC 容器中的 id

  2. SpringMVC 调用 BeanNameViewResolver 解析视图: 从 IOC 容器中获取 返回 id 值对应的 bean, 即自定义的 View 的对象

  3. SpringMVC 调用自定义视图的 renderMergedOutputModel 方法渲染视图

  4. 说明: 如果在 SpringMVC 调用目标方法, 返回自定义 View 在 IOC 容器中的 id,不存在, 则仍然按照默认的视图处理器机制处理

😘目标方法直接指定转发或重定向

  1. 默认返回的方式是请求转发,然后用视图处理器进行处理,比如在目标方法中这样写:

img

  1. 也可以在目标方法直接指定重定向或转发的 url 地址

  2. 如果指定重定向,不能定向到 /WEB-INF 目录中

应用实例-代码实现

修改 GoodsHandler.java, 增加方法 order()

直接指定要请求转发的或者是重定向的页面
  1. 对于重定向来说,不能重定向到 /WEB-INF/ 目录下

  2. redirect 关键字,表示进行重定向

  3. /login.jsp 在服务器解析 /springmvc/login.jsp

@RequestMapping("/goods")
@Controller
public class GoodsHandler {   
/**
     * 演示直接指定要请求转发的或者是重定向的页面
     * @return
     */
    @RequestMapping(value = "/order")
    public String order() {
        System.out.println("=======order()=====");

         // return "forward:/WEB-INF/pages/my_view.jsp";
        // return "forward:/aaa/bbb/ok.jsp";
        
        return "redirect:/login.jsp";

        
    }
}

如果是这种

return "redirect:/WEB-INF/pages/my_view.jsp";

/WEB-INF/pages/my_view.jsp 被解析成 /springmvc/WEB-INF/pages/my_view.jsp 然后会报404错误

在这里插入图片描述

修改view.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>自定义视图测试</title>
</head>
<body>
<h1>自定义视图测试</h1>
<a href="goods/buy">点击到自定义视图-</a><br/>
<a href="goods/order">测试在目标方法中指定请求转发或者重定向的页面-</a><br/>
</body>
</html>

完成测试(页面测试)

img

img

完成测试(Postman 测试)

img

💖综合代码演示

完成一个简单的用户登录案例

  1. 编写登录页面 login.jsp

  2. LoginHandler [doLogin 方法], 如果用户输入用户名是 wyx, 密码 123 就可以登录成功.

  3. 创建 JavaBean : User.java

  4. 表单提交数据到 doLogin 方法, 以 User 对象形式接收.

  5. 登录成功到, 页面 login_ok.jsp 并显示登录欢迎信息

  6. 登录失败, 到页面 login_error.jsp

代码实现

创建login.jsp

<form action="login">
    u:<input name="username" type="text"> <br/>
    p:<input name="password" type="password"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>

创建login_ok.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>
<h1>登录成功</h1>
欢迎你: ${requestScope.user.username}
<body>

</body>
</html>

创建login_error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录失败</title>
</head>
<body>
<h1>登录失败</h1>

<a href="<%=request.getContextPath()%>/homework/login.jsp">返回重新登录</a>
</body>
</html>
  1. 这里考察web工程路径的知识点 如果忘记了 可以去看我的博客 链接

  2. <%=request.getContextPath()%>/homework/login.jsp

服务器解析 /springmvc/homework/login.jsp

  1. 浏览器会解析 为 http://localhost:8080/springmvc/homework/login.jsp

创建 User.java

public class User {
    //属性..
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

创建LoginHandler.java

@RequestMapping("/user")
@Controller
public class LoginHandler {

    //处理登录
    @RequestMapping(value = "/login")
    public String doLogin(User user) {
        //判断
        if("wyx".equals(user.getUsername())
                && "123".equals(user.getPassword())){
            //验证OK
            return "forward:/WEB-INF/pages/homework/login_ok.jsp";
        } else {
            return "forward:/WEB-INF/pages/homework/login_error.jsp";
        }

    }
}

😄总结

  1. 对于重定向来说,不能重定向到 /WEB-INF/ 目录下

  2. redirect 关键字,表示进行重定向

  3. MyView继承了AbstractView, 就可以作为一个视图使用

  4. 配置 属性 order, 表示视图解析器执行的顺序, 值越小, 优先级越高

  5. 属性 order 的默认值是最低优先级 ,值为 Integer.MAX_VALUE int LOWEST_PRECEDENCE = 2147483647

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/899731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C# 基础精讲】LINQ to XML查询

LINQ to XML 是 C# 中用于查询和操作 XML 数据的强大工具。它允许您使用 LINQ 查询语法对 XML 文档进行查询、过滤、投影等操作&#xff0c;从而更加方便地处理 XML 数据。本文将详细介绍 LINQ to XML 的基本概念、常见操作以及示例&#xff0c;帮助您了解如何在 C# 中使用 LIN…

内核编译bpf

1 cp /boot/config-4.15.0-213-generic . 2 make menuconfig 报错缺少库 2.1 安装flex库 https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz ./configure CFLAGS-D_GNU_SOURCE make sudo make install 再次编译 缺少 bison库 2.2 下载 …

图片合成动图怎么弄?gif图制作的简单方法

许多鬼畜的表情包其实是用图片合成gif完成的&#xff0c;那么怎么将图片转gif呢&#xff1f;使用GIF中文网的gif合成&#xff08;https://www.gif.cn&#xff09;功能&#xff0c;打开浏览器就可以完成gif图片制作&#xff0c;非常简单方便&#xff0c;一起来了解一下吧。 打开…

C++笔记之Class A a = b调用的什么构造函数(引例)

C笔记之Class A a b调用的什么构造函数(引例) code review! 文章目录 C笔记之Class A a b调用的什么构造函数(引例)1.C笔记之Class A a b调用的什么构造函数&#xff1f;2.常见的三种形式3.等价的两种形式 1.C笔记之Class A a b调用的什么构造函数&#xff1f; 2.常见的三…

Vue 项目搭建

环境配置 1. 安装node.js 官网&#xff1a;nodejs&#xff08;推荐 v10 以上&#xff09; 官网&#xff1a;npm 是什么&#xff1f; 由于vue的安装与创建依赖node.js&#xff08;JavaScript的运行环境&#xff09;里的npm&#xff08;包管理和分发工具&#xff09;&#xff…

【80天学习完《深入理解计算机系统》】第八天 3.1 机器级代码【汇编指令】【寄存器】【操作数】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

Fluent向CFD-Post输出结果的方法

目前还有较多用户在使用 CFD-Post 进行 Fluent 结果后处理。本文整理了几种常用的 Fluent 向 CFD-Post 输出结果的方法。 本文内容其基于此演示模型进行讲解。 1 直接读取 DAT 文件 CFD-Post 可直接读取 Fluent 的结果文件&#xff0c;包括 .dat 和 .dat.h5 两种格式。其中&…

Jenkins+Jmeter集成自动化接口测试并通过邮件发送测试报告

一、Jenkins的配置 1、新增一个自由风格的项目 2、构建->选择Excute Windows batch command&#xff08;因为我是在本地尝试的&#xff0c;因此选择的windows&#xff09; 3、输入步骤&#xff1a; 1. 由于不能拥有相同的jtl文件&#xff0c;因此在每次构建前都需要删除jtl…

FFmpeg5.0源码阅读——VideoToobox硬件解码

摘要&#xff1a;本文描述了FFmpeg中videotoobox解码器如何进行解码工作&#xff0c;如何将一个编码的码流解码为最终的裸流。   关键字&#xff1a;videotoobox,decoder,ffmpeg   VideoToolbox 是一个低级框架&#xff0c;提供对硬件编码器和解码器的直接访问。 它提供视频…

基于java毕业设计之旅游管理系统(springboot源码+LW+PPT)

项目源码 lwPPT 文章目录 前言一、主要技术javaMysql数据库JSP技术 二、系统设计三、功能截图总结 前言 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的交易方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有…

CLion:最好用的c/c++编写工具(最详细安装教程)

目录 一.前言介绍 1.下载安装 1.1右上角点击下载 1.2选择自己操作系统&#xff0c;然后点击下载 1.3选择next 1.4 更改路径 1.5D盘最好 1.6 按照我的选择配置环境 1.7install安装 1.8 安装完成 2、mingw64安装 2.1下载资源压缩包 2.2mingw64放入到合适的位置&#xff0c;…

Python+request+unittest实现接口测试框架集成实例

这篇文章主要介绍了Pythonrequestunittest实现接口测试框架集成实例&#xff0c;小编觉得挺不错的&#xff0c;现在分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来看看吧 1、为什么要写代码实现接口自动化 大家知道很多接口测试工具可以实现对接口的测试&#xf…

使用pnpm workspace管理Monorepo架构

在开发项目的过程中&#xff0c;我们需要在一个仓库中管理多个项目&#xff0c;每个项目有独立的依赖、脚手架&#xff0c;这种形式的项目结构我们称之为Monorepo&#xff0c;pnpm workspace就是管理这类项目的方案之一。 一、pnpm简介 1、pnpm概述 pnpm代表performance npm…

注入Servlet、Filter、Listener的两种方式

文章目录 注入Servlet、Filter、Listener官方文档基本介绍应用实例1-使用注解方式注入需求:应用实例-实现注意: 应用实例2-使用RegistrationBean 方式注入需求:应用实例-实现 注意事项和细节说明原因分析说明 源码分析 注入Servlet、Filter、Listener 官方文档 文档: https:/…

高效mac常用快捷键整理

高效mac常用快捷键整理 macOS全局、剪切、拷贝、粘贴finder 和 系统快捷键文稿 浏览器chrome标签页和窗口快捷键功能快捷键网页快捷键 Idea & Pycharm必记编辑查询&替换导航重构编译、运行、调试 iTerm标签分屏编辑 文本编辑 sublime text导航&#xff1a;打开&关闭…

高级艺术二维码制作教程

最近不少关于二维码制作的&#xff0c;而且都是付费。大概就是一个好看的二维码&#xff0c;扫描后跳转网址。本篇文章使用Python来实现&#xff0c;这么简单花啥钱呢&#xff1f;学会&#xff0c;拿去卖便宜点吧。 文章目录 高级二维码制作环境安装普通二维码艺术二维码动态 …

2023国赛数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…

让Linux融入生活! 家用服务器折腾指南《树莓派不吃灰》系列文章更新满20篇!

title: 让Linux融入生活! 家用服务器折腾指南《树莓派不吃灰》系列文章更新满20篇&#xff01; 截止2023年8月19日&#xff0c;《树莓派防吃灰》&#xff08;也可以叫《树莓派不吃灰》&#xff0c;怎么好念怎么来&#xff09;系列&#xff0c;已经更新了20篇。这是一份基于Ubu…

LeetCode[面试题04.12]求和路径

难度&#xff1a;Medium 题目&#xff1a; 给定一棵二叉树&#xff0c;其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法&#xff0c;打印节点数值总和等于某个给定值的所有路径的数量。注意&#xff0c;路径不一定非得从二叉树的根节点或叶节点开始或结束&#x…

第六章在web中应用MyBatis

准备 MyBatis内部可以帮我们生成dao接口的实现类&#xff08;代理类&#xff0c;dao接口的代理&#xff09; 使用这种代理机制的前提是&#xff0c;SqlMapper.xml文件中的namespace必须是dao接口的全限定名称&#xff0c;id必须是dao接口的方法名 开始 创建一个SpringBoot项…