SpringMVC基础篇(四)

文章目录

    • 1.视图
        • 1.基本介绍
          • 1.视图介绍
          • 2.为什么需要自定义视图
        • 2.自定义视图实例
          • 1.思路分析
          • 2.代码实例
            • 1.view.jsp
            • 2.接口
            • 3.配置自定义视图解析器springDispatcherServlet-servlet.xml
            • 4.自定义视图MyView.java
            • 5.view_result.jsp
            • 6.结果展示
          • 3.自定义视图执行流程
          • 4.自定义视图执行流程debug
            • 1.打断点
            • 2.找到自定义视图的源码,下断点
            • 3.进入这个断点
            • 4.下一步![image-20240226162054090](https://img-blog.csdnimg.cn/img_convert/7e07ce24bdb655f9d30345f4b0d4f3dc.png)
            • 5.下一步
            • 6.下一步
            • 7.在自己的视图中下一个断点
            • 8.下一步
          • 5.SpringMVC执行流程图再次理解
          • 6.默认视图执行流程debug
            • 1.调整默认视图优先级
            • 2.下断点,跳到这个断点
            • 3.在默认视图解析器中下断点,跳到这个断点
            • 4.一直下一步到return view
          • 7.多个视图解析器执行流程
    • 2.指定请求转发或重定向
        • 1.基本介绍
        • 2.重定向
        • 3.请求转发
    • 3.课后练习
        • 1.User.java
        • 2.login.jsp
        • 3.接口
        • 4.success.jsp
        • 5.fail.jsp
        • 6.结果展示

1.视图

1.基本介绍
1.视图介绍

image-20240226215319028

2.为什么需要自定义视图

image-20240226135510890

2.自定义视图实例
1.思路分析

image-20240226135931338

2.代码实例
1.view.jsp
<%--
  Date: 2024/2/26
  Time: 14:17
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h4><a href="selfview">点击跳转到自定义视图解析器</a> </h4>
</body>
</html>

2.接口
    //跳转到自定义视图解析器
    @RequestMapping("/selfview")
    public String selfview() {
        return "sunView"; //返回给自定义视图解析器
    }
3.配置自定义视图解析器springDispatcherServlet-servlet.xml
    <!--视图解析器按照order的大小来决定优先级,默认的视图解析器是最低的优先级MAX_VALUE = 0x7fffffff-->
    <!--配置自定义视图解析器-->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="99"/>
    </bean>
4.自定义视图MyView.java
package com.sun.web.view;

import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.view.AbstractView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * @author 孙显圣
 * @version 1.0
 */

@Component(value = "sunView")
/**
 * 自定义视图
 */
public class MyView extends AbstractView {
    @Override
    protected void renderMergedOutputModel(Map<String, Object> map, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        System.out.println("自定义视图");
        //请求转发到view_result.jsp
        httpServletRequest.getRequestDispatcher("/WEB-INF/pages/view_result.jsp").forward(httpServletRequest, httpServletResponse);
    }
}

5.view_result.jsp
<%--
  Date: 2024/2/26
  Time: 14:27
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>view——result</h3>
</body>
</html>

6.结果展示

image-20240226145033351

3.自定义视图执行流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.自定义视图执行流程debug
1.打断点

image-20240226160942831

2.找到自定义视图的源码,下断点

image-20240226161535197

3.进入这个断点

image-20240226161657662

4.下一步image-20240226162054090
5.下一步

image-20240226162334256

image-20240226162806749

6.下一步

image-20240226162517874

7.在自己的视图中下一个断点

image-20240226163032060

8.下一步

image-20240226163107383

5.SpringMVC执行流程图再次理解

image-20240226163953314

6.默认视图执行流程debug
1.调整默认视图优先级

image-20240226165114466

2.下断点,跳到这个断点

image-20240226165214769

3.在默认视图解析器中下断点,跳到这个断点

image-20240226165957052

4.一直下一步到return view

image-20240226170254629

7.多个视图解析器执行流程
  • 如果默认解析器优先级低于普通解析器,则在容器中找不到视图解析器的view对象的话,就会去找默认解析器并执行,默认解析器是一定可以找到view的,所以返回执行那个view
  • 如果默认解析器的优先级高于普通解析器,则在容器中一定可以找到view对象,所以就直接返回这个view,如果报错了则不会继续找普通的解析器
  • 总结:默认视图解析器是根据适配器返回的信息创建一个view对象,所以一定可以找到这个view对象,所以返回这个view对象进行渲染而自定义视图解析器是根据适配器返回的信息从容器中查找一个view对象,所以存在找不到的情况

2.指定请求转发或重定向

1.基本介绍

image-20240226201241606

2.重定向
    //重定向
    @RequestMapping("/redirect")
    public String redirect() {
        //重定向是不能访问WEB-INF路径下的资源的
        //重定向的/也是指的上下文路径,返回给视图解析器之后,会自动将这个/解析成/工程路径/success.jsp
        return "redirect:/success.jsp";
    }
3.请求转发
    //请求转发
    @RequestMapping("/forward")
    public String forward() {
        //请求转发可以请求到WIN-INF目录下的文件
        return "forward:/WEB-INF/pages/success.jsp";
    }

3.课后练习

image-20240226212144160

1.User.java
package com.sun.web.entity;

/**
 * @author 孙显圣
 * @version 1.0
 */
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;
    }

    @Override
    public String toString() {
        return "user{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

2.login.jsp
<%--
  Date: 2024/2/23
  Time: 20:44
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<head>
    <title>Title</title>
</head>
<body>
<%--这里使用浏览器默认路径,目前在上下文路径下,所以可以直接找到/login--%>
<form action="doLogin" method="post">
    username:<input name="username" type="text">
    password:<input name="password" type="password">
    <input type="submit" value="登录">
</form>
</body>
</html>

3.接口
    //验证用户名密码
    @RequestMapping("/doLogin")
    //将用户名和密码封装到自动封装到user对象里
    public String doLogin(User user) {
        if ("sun".equals(user.getUsername()) && "123".equals(user.getPassword())) {
            System.out.println("验证通过");
            //请求转发
            return "forward:/success.jsp";
        }
        else {
            //重定向
            return "redirect:/fail.jsp";
        }
    }
4.success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>重定向成功</h1>
</body>
</html>

5.fail.jsp
<%--
  Date: 2024/2/26
  Time: 21:42
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>error!!!</h2>
<h2><a href="login.jsp">请重新登陆</a> </h2>
</body>
</html>

6.结果展示

image-20240226215205269

image-20240226215222989

image-20240226215238126

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web安全---xss漏洞/beef-xss基本使用

what xss漏洞----跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;&#xff0c;攻击者在网页中注入恶意脚本代码&#xff0c;使受害者在浏览器中运行该脚本&#xff0c;从而达到攻击目的。 分类 反射型---最常见&#xff0c;最广泛 用户将带有恶意代码的url打开&a…

E-MapReduce极客挑战赛季军方案

前一段时间我参加了E-MapReduce极客挑战赛&#xff0c;很幸运的获得了季军。在这把我的比赛攻略给大家分享一下&#xff0c;希望可以抛砖引玉。 赛题分析与理解 赛题背景&#xff1a; 大数据时代&#xff0c;上云已成为越来越多终端客户大数据方案的落地选择&#xff0c;阿里…

Phi-3-mini-4k-instruct 的功能测试

Model card 介绍 Phi-3-Mini-4K-Instruct 是一个 3.8B 参数、轻量级、最先进的开放模型&#xff0c;使用 Phi-3 数据集进行训练&#xff0c;其中包括合成数据和经过过滤的公开可用网站数据&#xff0c;重点是 高品质和推理密集的属性。 该型号属于 Phi-3 系列&#xff0c;Mini…

Golang | Leetcode Golang题解之第58题最后一个单词的长度

题目&#xff1a; 题解&#xff1a; func lengthOfLastWord(s string) (ans int) {index : len(s) - 1for s[index] {index--}for index > 0 && s[index] ! {ansindex--}return }

虚拟机扩容-根目录挂载sda1的空间不足

提醒&#xff01;不管成不成功&#xff0c;一定要先备份一份虚拟机&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 走过路过点个关注吧&#xff0c;想到500粉丝&#xff0c;哭。一、查看分区情况 df -h可以看到/dev/sda1已经被占满了 2.关闭虚拟机&#xff…

windows驱动开发-WDF对象

WDF封装了大量的WDF对象&#xff0c;不过&#xff0c;和应用层不一样&#xff0c;不用去尝试从WDF框架对象类上派生和改写原有的WDF类&#xff0c;本意WDF就是希望我们使用这些对象和类&#xff0c;而不是创造新的奇怪的类。 每个WDF对象都代表着对一项驱动需要使用的子功能的…

vue学习的预备知识为学好vue打好基础

目录 Vue是什么 &#xff1f;如何使用Vue &#xff1f;Vue ApiVue入口apiVue实例apiVue函数api 无构建过程的渐进式增强静态HTMLVue模块化构建工具npmyarnWebpackvue-cliVite Vue是什么 &#xff1f; 文章基于Vue3叙述。 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于…

179. 最大数(LeetCode)

文章目录 前言一、题目讲解二、算法原理三、代码编写1.仿函数写法2.lambda表达式 四、验证五.总结 前言 在本篇文章中&#xff0c;我们将会带着大家采用贪心的方法解决LeetCode中最大数这道问题&#xff01;&#xff01;&#xff01; 一、题目讲解 一组非负整数&#xff0c;包…

【面试经典 150 | 图】被围绕的区域

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;深搜方法二&#xff1a;广搜 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的…

03.Kafka 基本使用

Kafka 提供了一系列脚本用于命令行来操作 kafka。 1 Topic 操作 1.1 创建 Topic 创建一个名为 oldersix-topic 的 topic&#xff0c;副本数设置为3&#xff0c;分区数设置为2&#xff1a; bin/kafka-topics.sh \ --create \ --zookeeper 192.168.31.162:2181 \ --replication…

ROS1快速入门学习笔记 - 07话题消息的定义与使用

目录 一、话题模型 二、自定义话题消息 1. 在功能包下创建msg目录用于存储话题文件 2. 在package.xml文件中添加功能包依赖&#xff1b; 3. 在CMakeLists.txt增加编译选项&#xff1b; 4. 完成编译 5. 配置CMakeLists.txt中的编译规则&#xff08;增加发布者和订阅者&am…

卫浴品牌商家做展示预约小程序的作用是什么

卫浴品牌类别多、普通/智能、场景化等&#xff0c;无论企业还是经销商市场门店都比较饱满&#xff0c;虽然市场需求度高&#xff0c;但同样需要商家不断拓宽销售渠道和挖掘客户价值&#xff0c;破圈增长。 线上多平台发展尤为重要&#xff0c;而小程序作为连接点&#xff0c;对…

ctf web-部分

** web基础知识 ** *一.反序列化 在PHP中&#xff0c;反序列化通常是指将序列化后的字节转换回原始的PHP对象或数据结构的过程。PHP中的序列化和反序列化通过serialize()和unserialize()函数实现。 1.序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串…

就业班 第三阶段(nginx) 2401--4.26 day5 nginx5 nginx https部署实战

三、HTTPS 基本原理 1、https 介绍 HTTPS&#xff08;全称&#xff1a;HyperText Transfer Protocol over Secure Socket Layer&#xff09;&#xff0c;其实 HTTPS 并不是一个新鲜协议&#xff0c;Google 很早就开始启用了&#xff0c;初衷是为了保证数据安全。 近些年&…

ArcGIS小技巧—模型构建器快速提取河网

上篇文章介绍的基于DEM的河网提取&#xff0c;需要使用多个工具&#xff0c;整体操作比较繁琐&#xff0c;在日常工作中&#xff0c;使用Arcgis提供的模型构建器可以帮助我们将多个工具整合在一起&#xff0c;在面对大量数据批量处理时&#xff0c;可以大大提高工作效率 利用模…

【题解】—— LeetCode一周小结17

【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结16 22.组合总和 Ⅳ 题目链接&#xff1a;377. 组合总和 Ⅳ 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数…

基于SSM的“个性化电子相册”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“个性化电子相册”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 个性化电子相册功能结构图 系统后台界面 会员信息管理界面 相…

在网站源码后台增加响应式布局

一本教材上的网站源码&#xff0c;后台在手机上查看还是按照电脑的页面样式&#xff0c;不方便查看和发布新内容。教材上讲了响应式布局。对于页面结构简单的网站&#xff0c;可以利用响应式&#xff0c;使页面自动适用各种屏幕的分辨率。 今天在一个网站源码的后台使用了响应…

经典案例:学习 Java 异常处理的最佳实践

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

OpenCV如何模板匹配

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV如何实现背投 下一篇 &#xff1a;OpenCV在图像中寻找轮廓 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 matchTemplate()搜索图像贴片和输入图像之间…
最新文章