SpringMVC基础篇(四)

ops/2024/11/15 5:34:46/

文章目录

    • 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/ops/16490.html

相关文章

美团一面复活赛4/18

语言表述还是有问题。。fuck 1.自我介绍 2.项目中遇到哪些问题&#xff0c;怎么解决的 太菜了没答好。。面试官没为难&#xff08;购票扣减逻辑要复习一下&#xff09; 3.mq发生了数据积压怎么去解&#xff1f; 面试官感觉我不会&#xff0c;也没为难我 4.Integer20 Integer2…

深耕“星光电务”党建品牌 引领保障企业高质量发展

在日前闭幕的2024年首届全国企业党务工作者论坛中&#xff0c;中铁十一局集团电务工程有限公司提交的论文《深耕“星光电务”党建品牌 引领保障企业高质量发展》荣获优秀论文奖。该论文由陈柯、刘敏之、徐干、姜亦珂联合撰写&#xff0c;展示了他们在党建工作中的创新实践与显著…

【C++ 哈希应用】

文章目录 位图概念代码实现海量数据处理 布隆过滤器概念代码实现海量数据处理 哈希切割海量数据处理 位图 概念 一个值在给定的集合中有两种状态&#xff0c;在或不在&#xff0c;要表示这种状态&#xff0c;最少可以用一个比特位&#xff0c;比特位为1表示在&#xff0c;比特…

【热门前端【vue框架】】——vue框架和node.js的下载和安装保姆式教程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;程序员-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

CentOS-7安装clickhouse并允许其他主机登录

一、通用设置 1、配置主机名 hostnamectl set-hostname --static 主机名2、修改hosts文件 vim /etc/hosts 输入&#xff1a; 192.168.15.129 master 192.168.15.133 node1 192.168.15.134 node2 192.168.15.136 node33、 保持服务器之间时间同步 yum install -y ntpdate &…

Postman获取接口返回值设置为变量

//设置环境变量&#xff0c;提取token // 把responseBody转为json字符串 var jsonData JSON.parse(responseBody); // 设置环境变量&#xff0c;提取token pm.environment.set("Authorization", jsonData.token_type " " jsonData.access_token); //设…

[晕事]今天做了件晕事30, perf

今天做了一件晕事&#xff0c;使用perf dump相同应用程序的两个进程&#xff0c;相当于两个进程完成的任务是一样的&#xff0c;处理的业务是一样的。而且这两个进程是运行在两个不同的cpu上。 但是dump出来的数据里&#xff0c;一个有inet_csk_bind_conflict函数调用&#xff…

ceph笔记 2

CephX 认证机制&#xff1a; 看这里 和这里 1、mon负责认证&#xff0c;mon一定要三个&#xff0c;要不一个坏了以后还咋认证 2、认证完才能对ceph增删改查 3、 在 Ceph 中&#xff0c;这些命令和指令都是与 Ceph 权限控制相关的。让我逐个解释&#xff1a; mon ‘allow rwx’…