码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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" %>
    
    
        Title
    
    
    

    点击跳转到自定义视图解析器

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    2.接口
        //跳转到自定义视图解析器
        @RequestMapping("/selfview")
        public String selfview() {
            return "sunView"; //返回给自定义视图解析器
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    3.配置自定义视图解析器springDispatcherServlet-servlet.xml
        
        
        <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
            <property name="order" value="99"/>
        bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    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);
        }
    }
    
    
    • 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
    5.view_result.jsp
    <%--
      Date: 2024/2/26
      Time: 14:27
      User: 孙显圣
      Version:1.0
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        Title
    
    
    

    view——result

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    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";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.请求转发
        //请求转发
        @RequestMapping("/forward")
        public String forward() {
            //请求转发可以请求到WIN-INF目录下的文件
            return "forward:/WEB-INF/pages/success.jsp";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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 + '\'' +
                    '}';
        }
    }
    
    
    • 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
    • 33
    • 34
    • 35
    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>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    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";
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    4.success.jsp
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>重定向成功</h1>
    </body>
    </html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    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>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    6.结果展示

    image-20240226215205269

    image-20240226215222989

    image-20240226215238126

  • 相关阅读:
    基于python的C语言学习笔记(1)
    图像篡改数据集整理
    SAP 操作:怎么设定屏幕前台字段显示/编辑
    25.4 MySQL 函数
    链表经典面试oj题
    【SG滤波】三阶滤波、五阶滤波、七阶滤波(Matlab代码实现)
    金仓数据库 KingbaseES PL/SQL 过程语言参考手册(12. 异常处理)
    Open-Feign在实际工作中使用
    redis GEO使用及基本原理——实现对经纬度的操作
    大数据毕设选题 - 招聘岗位数据分析可视化(python 爬虫)
  • 原文地址:https://blog.csdn.net/m0_64637029/article/details/138200832
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号