SpringMVC基础篇(四)

devtools/2024/9/24 2:41:48/

文章目录

    • 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/devtools/22810.html

相关文章

CSS基础:4类组合选择器以及5个注意事项

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

Matlab实现CNN-BiLSTM模型,对一维时序信号进行分类

1、利用Matlab2021b训练CNN-BiLSTM模型&#xff0c;对采集的一维时序信号进行分类二分类或多分类 2、CNN-BiLSTM时序信号多分类执行结果截图 训练进度&#xff1a; 网络分析&#xff1a; 指标变化趋势&#xff1a; 代码下载方式&#xff08;代码含数据集与模型构建&#xff0…

MATLAB初学者入门(23)—— 旅行商问题(TSP)优化

旅行商问题&#xff08;TSP, Traveling Salesman Problem&#xff09;是一个经典的优化问题&#xff0c;要求找到一个最短的路线&#xff0c;使得旅行商从一个城市出发&#xff0c;经过所有城市一次后&#xff0c;回到原出发点。这是一个NP难问题&#xff0c;在数学优化和计算机…

2024 JAVA Tinypng压缩图片,超级简单!!!

一、打开官网&#xff0c;注册账号&#xff0c;获取秘钥&#xff08;每个月500张免费&#xff09; 1.打开官网&#xff0c;注册账号 TinyPNG – Compress WebP, PNG and JPEG images intelligently 2.登录后&#xff0c;点击账号名字&#xff0c;找到如图所示 3.找到API&…

idea的插件,反编译整个jar包

idea的插件&#xff0c;反编译整个jar包 1.安装插件1.1找到插件1.2 搜索插件 2.反编译整个jar包2.1 复制jar包到工件目录下&#xff1a;2.2 选中jar包&#xff0c;点出右键 3.不用插件&#xff0c;手动查看某一个java类3.1 选中jar包&#xff0c;点出右键 1.安装插件 1.1找到插…

【计算机网络】成功解决 ARP项添加失败:请求的操作需要提升

最近在用Wireshark做实验时候&#xff0c;需要清空本机ARP表和DNS缓存&#xff0c;所以在cmd窗口输入以下命令&#xff0c; 结果发生了错误&#xff1a;ARP项添加失败&#xff1a;请求的操作需要提升 一开始我还以为是操作的命令升级了&#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…

web server apache tomcat11-27-Security Considerations

前言 整理这个官方翻译的系列&#xff0c;原因是网上大部分的 tomcat 版本比较旧&#xff0c;此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎&#xff0c;轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…