SpringMVC基础篇(四)

news/2024/10/18 22:32:44/

文章目录

    • 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/26Time: 14:17User: 孙显圣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.接口
java">    //跳转到自定义视图解析器@RequestMapping("/selfview")public String selfview() {return "sunView"; //返回给自定义视图解析器}
springDispatcherServletservletxml_52">3.配置自定义视图解析器springDispatcherServlet-servlet.xml
    <!--视图解析器按照order的大小来决定优先级,默认的视图解析器是最低的优先级MAX_VALUE = 0x7fffffff--><!--配置自定义视图解析器--><bean class="org.springframework.web.servlet.view.BeanNameViewResolver"><property name="order" value="99"/></bean>
java_62">4.自定义视图MyView.java
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 {@Overrideprotected void renderMergedOutputModel(Map<String, Object> map, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {System.out.println("自定义视图");//请求转发到view_result.jsphttpServletRequest.getRequestDispatcher("/WEB-INF/pages/view_result.jsp").forward(httpServletRequest, httpServletResponse);}
}
5.view_result.jsp
<%--Date: 2024/2/26Time: 14:27User: 孙显圣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.重定向
java">    //重定向@RequestMapping("/redirect")public String redirect() {//重定向是不能访问WEB-INF路径下的资源的//重定向的/也是指的上下文路径,返回给视图解析器之后,会自动将这个/解析成/工程路径/success.jspreturn "redirect:/success.jsp";}
3.请求转发
java">    //请求转发@RequestMapping("/forward")public String forward() {//请求转发可以请求到WIN-INF目录下的文件return "forward:/WEB-INF/pages/success.jsp";}

3.课后练习

image-20240226212144160

java_219">1.User.java
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;}@Overridepublic String toString() {return "user{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
2.login.jsp
java"><%--Date: 2024/2/23Time: 20:44User: 孙显圣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.接口
java">    //验证用户名密码@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
java"><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>重定向成功</h1>
</body>
</html>
5.fail.jsp
java"><%--Date: 2024/2/26Time: 21:42User: 孙显圣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.ppmy.cn/news/1443203.html

相关文章

LeetCode 104.二叉树的最大深度

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,…

大象机器人开源协作机械臂myCobot 630 全面升级!

1. 开篇概述 在快速发展的机器人技术领域中&#xff0c;Elephant Robotics的myCobot 600已经证明了其在教育、科研和轻工业领域的显著适用性。作为一款具备六自由度的机械臂&#xff0c;myCobot 600以其600mm的工作半径和2kg的末端负载能力&#xff0c;满足了多样化的操作需求。…

Django初步了解

目录 一、什么是Django 二、Django的设计模式 三、涉及的英文缩写及其含义 四、安装&#xff08;官方教程&#xff09; 一、什么是Django Django是一个Python Web框架&#xff0c;可以快速开发网站&#xff0c;提供一站式的解决方案&#xff0c;包括缓存、数据库ORM、后台…

普通条件,如何斩获理想工作?

在现代社会&#xff0c;找工作无疑是许多人面临的一个重大问题。尤其是在个人能力和条件一般的情况下&#xff0c;如何找到一份好工作更是让人头疼。其实&#xff0c;找工作并非全看个人能力和条件&#xff0c;更多的是看你如何展示自己&#xff0c;如何在众多求职者中脱颖而出…

ubuntu22.04 修改内核源码教程

1. 确认当前内核版本 uname -a 2. 去ubuntu官网下载对应版本内核源码 6.5.0-28.29 : linux package : Ubuntu (launchpad.net) 3. 准备编译环境 sudo apt-get install libncurses5-dev libssl-dev build-essential openssl flex bison libelf-dev tar -xzvf linux_6.5.…

在centos上通过yum安装指定版本的软件

比如要安装docker&#xff0c;可以通过以下命令来查有哪些版本 yum list docker-ce --showduplicates | sort -rdocker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce…

网络安全之弱口令与命令爆破(中篇)(技术进阶)

目录 一&#xff0c;什么是弱口令&#xff1f; 二&#xff0c;为什么会产生弱口令呢&#xff1f; 三&#xff0c;字典的生成 四&#xff0c;使用Burpsuite工具验证码爆破 总结 一&#xff0c;什么是弱口令&#xff1f; 弱口令就是容易被人们所能猜到的密码呗&#xff0c;…

NLP transformers - 文本分类

Text classification 文章目录 Text classification加载 IMDb 数据集Preprocess 预处理EvaluateTrainInference 本文翻译自&#xff1a;Text classification https://huggingface.co/docs/transformers/tasks/sequence_classification notebook : https://colab.research.googl…