Servlet(二)

文章目录

    • 1.ServletConfig
        • 1.基本介绍
        • 2.应用实例
          • 1.DBServlet.java
          • 2.web.xml
    • 2.ServletContext
        • 1.为什么需要ServletContext
        • 2. 基本介绍
        • 3.ServletContext 可以做什么
        • 4.应用实例一_获取工程相关信息
          • 1.ServletContext.java
          • 2.web.xml
          • 3.结果
        • 5.应用实例二_完成简单网站访问计数器
          • 1.PayServlet.java
          • 2.OrderServlet.java
          • 3.WebUtils.java
          • 4.web.xml
          • 5.结果
    • 3.HttpServletRequest
        • 1.基本介绍
        • 2.常用方法
        • 3.应用实例
          • 1.request.java
          • 2.register_request.html
          • 3.结果
        • 4.小练习
    • 4.请求转发
        • 1.为什么需要请求转发
        • 2.基本介绍
        • 3.示意图
        • 4.请求转发实例
          • 1.regsiter.html
          • 2.check.java
          • 3.return_.java
          • 4.结果
        • 5.细节说明
          • 简单解释转发
        • 6.关于路径的解析
          • 1.浏览器发送的请求
          • 2.服务器内部发送的请求
          • 3.一个资源的全路径
        • 7.两种乱码问题的解决
          • 1.请求获取数据时的乱码问题
          • 2.响应到浏览器时的乱码问题
        • 8.课后作业
          • 作业一
            • 1.regsiter.html
            • 2.GetParameters.java
            • 3.答案
          • 作业二
            • GetNum.java
            • 结果
    • 5. HttpServletResponse
        • 1.基本介绍
        • 2.向客户端返回数据方法
        • 3.请求重定向
          • 1.基本介绍
          • 2.示意图
          • 3.请求重定向实例
            • 1.down.html
            • 2.DownServlet.java
            • 3.DownServletNew.java
            • 4.结果
        • 4.细节说明
        • 5.动态获取上下文路径
        • 6.课后作业
          • 1.pay.html
          • 2.Pay.java
          • 3.PayOk.java
          • 4.结果

1.ServletConfig

1.基本介绍

image-20240125184350400

image-20240125184518769

2.应用实例

image-20240125190729123

1.DBServlet.java
package ServletConfig;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** @author 孙显圣* @version 1.0*/
public class DBServlet extends HttpServlet {@Overridepublic void init(ServletConfig config) throws ServletException {super.init(config);//如果重写了init方法,这行是不能注销的,因为//1.原本要调用的就是父类的init方法,并将创建的config对象给父类的config属性//2.如果在这里注销了,那么父类的config属性将不会被赋值,所以就导致了getServletConfig获取的config属性是空的}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//读取配置文件的内容ServletConfig servletConfig = super.getServletConfig(); //通过父类实现爷爷类的方法来获取servletConfigString user = servletConfig.getInitParameter("user");String pwd = servletConfig.getInitParameter("pwd");System.out.println(user + pwd);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//无论是get还是post都交给get来处理doGet(req, resp);}
}
2.web.xml

image-20240125194104520

image-20240125194135554

2.ServletContext

1.为什么需要ServletContext

image-20240125195134038

image-20240125195203976

2. 基本介绍

image-20240125195800295

image-20240125195810589

3.ServletContext 可以做什么

image-20240125200158655

4.应用实例一_获取工程相关信息

image-20240125200402092

1.ServletContext.java
package servletcontext;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
public class ServletContext extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取ServletContext对象javax.servlet.ServletContext servletContext = super.getServletContext();//获取上下文参数String name = servletContext.getInitParameter("name");String website = servletContext.getInitParameter("website");System.out.println("name:" + name + " website:" + website);//获取当前的上下文路径/servletString contextPath = servletContext.getContextPath();System.out.println("上下文路径:" + contextPath);//获取项目发布后的根路径(就是在out文件夹中的路径)String realPath = servletContext.getRealPath("/");System.out.println("发布后的根路径:" + realPath);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp); //交给doget统一处理}
}
2.web.xml

image-20240125202739832

3.结果

image-20240125202854256

image-20240125202901135

5.应用实例二_完成简单网站访问计数器
1.PayServlet.java
package servletcontext;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** @author 孙显圣* @version 1.0*/
public class PayServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取ServletContext对象ServletContext servletContext = super.getServletContext();WebUtils.setCount(servletContext);//在显示器打印数值//首先指定编码resp.setContentType("text/html;charset=utf-8");//获取打印流PrintWriter writer = resp.getWriter();writer.print("访问网站的次数为:" + servletContext.getAttribute("count"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}
2.OrderServlet.java
package servletcontext;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** @author 孙显圣* @version 1.0*/
public class OrderServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取ServletContext对象ServletContext servletContext = super.getServletContext();WebUtils.setCount(servletContext);//在显示器打印数值//首先指定编码resp.setContentType("text/html;charset=utf-8");//获取打印流PrintWriter writer = resp.getWriter();writer.print("访问网站的次数为:" + servletContext.getAttribute("count"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}
3.WebUtils.java
package servletcontext;import javax.servlet.ServletContext;/*** @author 孙显圣* @version 1.0*/
public class WebUtils {public static void setCount(ServletContext servletContext) {//获取数量Object count = servletContext.getAttribute("count");if (count == null) { //如果是第一次则创建一个key为count,并设置为1servletContext.setAttribute("count", 1);}else { //如果是第二次或以上,则获取里面的值并且加一Integer count_ = (Integer)count + 1;//将这个数值放到里面servletContext.setAttribute("count", count_);}}}
4.web.xml

image-20240125211744181

5.结果

image-20240125211954494

image-20240125211946904

3.HttpServletRequest

1.基本介绍

image-20240126092759321

2.常用方法

image-20240126093843202

3.应用实例

image-20240126094327164

1.request.java
package request;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/request")
public class request extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.获取请求的信息System.out.println("请求的资源路径URI=" + req.getRequestURI());System.out.println("请求的URL=" + req.getRequestURL());System.out.println("请求的客户端ip地址=" + req.getRemoteAddr());System.out.println("请求头Host=" + req.getHeader("Host"));System.out.println("请求方式=" +req.getMethod());//getHeader可以获取请求头的任何信息//取出浏览器String header = req.getHeader("User-Agent");String[] split = header.split(" ");String s = split[split.length - 2].split("\\/")[0];System.out.println("浏览器=" + s);//2.获取表单数据//解决中文的乱码req.setCharacterEncoding("utf-8");//获取表单的单个数据String username = req.getParameter("username");String password = req.getParameter("password");//获取多个数据String[] hobbies = req.getParameterValues("hobby");System.out.println("username=" +username);System.out.println("password=" +password);System.out.print("hobby=");for (String hobby : hobbies) {System.out.print(hobby + " ");}//3.返回接受的信息到浏览器//解决中文乱码resp.setContentType("text/html;charset=utf-8"); //本质就是设置Content-Type来告诉浏览器使用什么方式和字符集解析内容PrintWriter writer = resp.getWriter();writer.print("<h1>" + "username=" + username + "</h1>");writer.flush();writer.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}
2.register_request.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>注册 用户</h1>
<form method="get" action="/servlet/request">username:<input type="text" name="username">password:<input type="password" name="password"><br>选择你喜欢的老师<input type="checkbox" name="hobby" value="hsp">韩顺平<input type="checkbox" name="hobby" value="lh">老韩<input type="checkbox" name="hobby" value="spls">顺平老师<br><input type="submit" value="注册">
</form>
</body>
</html>
3.结果

image-20240126103835229

image-20240126103822538

image-20240126103852790

4.小练习

image-20240126104025360

image-20240126104501246

        //获取JSESSIONID的值String header1 = req.getHeader("Cookie");String s1 = header1.split(";")[0].split("=")[1];System.out.println("JSESSIONID=" + s1);

4.请求转发

1.为什么需要请求转发

image-20240126105021575

2.基本介绍

image-20240126105033346

3.示意图

image-20240126110057497

4.请求转发实例

image-20240126140422452

1.regsiter.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>使用请求转发,根据用户名判断身份</h1>
<form action="/servlet/check" method="post">username: <input type="text" name="username"><input type="submit" value="提交">
</form>
</body>
</html>
2.check.java
package request;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/check")
public class check extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决获取参数时的乱码,注意,一定要是在第一次获取参数之前设置编码,否则编码将以默认形式,即使在后面的转发的请求中设置编码也是没用的req.setCharacterEncoding("utf-8");String username = req.getParameter("username"); //这个请求一旦转发,则转发到的servlet是共享这个请求的所有信息System.out.println(username);//根据用户名向请求中添加信息if (username.equals("Tom")) {req.setAttribute("role", "管理员");}else {req.setAttribute("role", "普通用户");}//请求转发RequestDispatcher requestDispatcher = req.getRequestDispatcher("/return");requestDispatcher.forward(req,resp);}
}
3.return_.java
package request;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/return")
public class return_ extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取转发来的信息String role = (String) req.getAttribute("role");//这个请求和最开始浏览器向服务器发送的请求是同一个,所以依然可以获取用户名String username = req.getParameter("username");//解决服务器响应到浏览器的乱码resp.setContentType("text/html;charset=utf-8");//输出信息PrintWriter writer = resp.getWriter();writer.print("<h1>" + username + "是" + role + "</h1>");}
}
4.结果

image-20240126140558492

image-20240126140605721

5.细节说明

image-20240126142150501

简单解释转发
  1. 浏览器向Tomcat服务发送请求
  2. Tomcat服务匹配到特定的servlet1并将请求给它
  3. servlet1为这个请求添加数据之后将这个请求再转发到另一个servlet2
  4. 此时servlet2的请求既可以获取浏览器的数据,也可以获取servlet1添加的数据
  5. 关于支付问题,浏览器向servlet1发送请求,servlet1完成支付,然后转发到servlet2,此时浏览器的地址是停留在servlet1的所以,一旦刷新,则浏览器还会向servlet1发送请求,导致重复支付
6.关于路径的解析
1.浏览器发送的请求
  1. 在发送请求之后,如果地址栏会发生变化,则是浏览器发送的请求
  2. 此时的“/”代表的是http://localhost:8080
  3. 比如,表单的提交,重定向,超链接
2.服务器内部发送的请求
  1. 在发送请求之后,地址栏不会发生变化,则是服务器内部发送的请求
  2. 此时的“/”代表的是http://localhost:8080/工程路径
  3. 比如,请求转发
3.一个资源的全路径
  1. servlet资源的全路径 = 上下文路径 + 路由
  2. 静态资源的路径 = 上下文路径 + /资源名(无文件夹状态)
7.两种乱码问题的解决
1.请求获取数据时的乱码问题
  1. req.setCharacterEncoding("utf-8");
  2. 注意:必须是在第一次获取数据之前就设置编码,否则一旦获取了数据,就会以默认的编码为准,即使在后面再设置编码也不起作用
2.响应到浏览器时的乱码问题
  1. resp.setContentType("text/html;charset=utf-8");
  2. 注意:这个也是同样道理,也是在第一次打印之前就要设置
8.课后作业
作业一

image-20240126145105399

image-20240126145114970

1.regsiter.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>使用请求转发,根据用户名判断身份</h1>
<form action="/servlet/check" method="post">username: <input type="text" name="username"><input type="submit" value="提交">
</form>
</body>
</html>
2.GetParameters.java
package HomeWork;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/getParameters")
public class GetParameters extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置编码req.setCharacterEncoding("utf-8");String username = req.getParameter("username");String password1 = req.getParameter("password1");String password2 = req.getParameter("password2");String[] sports = req.getParameterValues("sport");String sex = req.getParameter("sex");String city = req.getParameter("city");String text = req.getParameter("text");for (String sport : sports) {System.out.println(sport);}System.out.println(username + " \n" + password1 + "\n " + password2 + "\n " + sex + " \n" + city + " \n" + text);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req,resp);}
}
3.答案

image-20240126152233490

image-20240126152310244

作业二

image-20240126152352145

GetNum.java
package HomeWork;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/getnum")
public class GetNum extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String header = req.getHeader("User-Agent");String regStr = "\\((.*;.*;.*)\\).*\\(";Pattern compile = Pattern.compile(regStr);Matcher matcher = compile.matcher(header);if (matcher.find()) {System.out.println(matcher.group(1));}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}
结果

image-20240126155003215

5. HttpServletResponse

1.基本介绍

image-20240126155158391

2.向客户端返回数据方法

image-20240126155603850

3.请求重定向
1.基本介绍

image-20240126160750995

2.示意图

image-20240126160627745

3.请求重定向实例

image-20240126161217536

1.down.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>下载资源</h1>
<h3><a href="/servlet/down">下载天龙八部</a></h3>
</body>
</html>
2.DownServlet.java
package redirect;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/down")
public class DownServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//使用重定向resp.sendRedirect("/servlet/downnew");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}
3.DownServletNew.java
package redirect;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.text.html.HTML;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/downnew")
public class DownServletNew extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置内容类型为x-tarresp.setContentType("application/x-tar;");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}
4.结果

image-20240126162526323

image-20240126162532702

4.细节说明

image-20240126163316607

5.动态获取上下文路径

String contextPath = super.getServletContext().getContextPath();

image-20240126163744547

6.课后作业

image-20240126163908094

image-20240126163940399

1.pay.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>支付页面</h1>
<form action="/servlet/pay" method="post">用户编号:<input type="text" name="id">支付金额:<input type="text" name="money"><input type="submit" value="提交">
</form>
</body>
</html>
2.Pay.java
package redirect;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/pay")
public class Pay extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取信息String id = req.getParameter("id");String money = req.getParameter("money");if (Integer.parseInt(money) > 100) {resp.sendRedirect("/servlet/payok");}else {resp.sendRedirect("/servlet/pay.html");}}
}
3.PayOk.java
package redirect;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/payok")
public class PayOk extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print("<h1>" + "恭喜你,支付成功!" + "<h1>");}
}
4.结果

image-20240126171056087

image-20240126171101253

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20240325-1-HMM

HMM 直观理解 马尔可夫链&#xff08;英语&#xff1a;Markov chain&#xff09;&#xff0c;又称离散时间马尔可夫链&#xff08;discrete-time Markov chain&#xff0c;缩写为DTMC&#xff09;&#xff0c;因俄国数学家安德烈马尔可夫&#xff08;俄语&#xff1a;Андре…

语音特征的反应——语谱图

语谱图的横坐标为时间&#xff0c;纵坐标为对应时间点的频率。坐标中的每个点用不同颜色表示&#xff0c;颜色越亮表示频率越大&#xff0c;颜色越淡表示频率越小。可以说语谱图是一个在二维平面展示三维信息的图,既能够表示频率信息,又能够表示时间信息。 创建和绘制语谱图的…

[C++][算法基础]连通块中点的数量(并查集)

给定一个包含 n 个点&#xff08;编号为 1∼n&#xff09;的无向图&#xff0c;初始时图中没有边。 现在要进行 m 个操作&#xff0c;操作共有三种&#xff1a; C a b&#xff0c;在点 a 和点 b 之间连一条边&#xff0c;a 和 b 可能相等&#xff1b;Q1 a b&#xff0c;询问点…

CVE-2023-2928 DedeCMS 文件包含漏洞getshell 漏洞分析

DedeCMS&#xff08;也称为织梦CMS&#xff09;是一款基于PHPMySQL的开源内容管理系统。 在 DedeCMS 5.7.106 及之前的版本中发现一个漏洞。它已被宣布为关键。受此漏洞影响的是未知功能的文件uploads/dede/article_allowurl_edit.php。对参数 allurls 的操作会导致代码注入。…

【CHI】(十二)Memory Tagging

目录 1. Introduction 2. Message extensions 3. Tag coherency 4. Read transaction rules 4.1 TagOp values 4.2 Permitted initial MTE tag states 5. Write transactions 5.1 Permitted TagOp values 5.2 TagOp, TU, and tags relationship 6. Dataless transact…

【日常记录】【JS】getComputedStyle 获取DOM的最终样式值

文章目录 1、介绍2、getComputedStyle3、链接 1、介绍 Window.getComputedStyle()方法返回一个对象&#xff0c;该对象在应用活动样式表并解析这些值可能包含的任何基本计算后报告元素的所有 CSS 属性的值。私有的 CSS 属性值可以通过对象提供的 API 或通过简单地使用 CSS 属性…

前端性能优化-Table渲染速度优化

教务系统-排课页面性能优化总结 一、前言 在公司教务系统中,排课页面慢的令人发指,在某些情况由于数据量大导致页面主进程卡死,遂组织进行一次排查优化,现记录一下 二、效果对比 以下数据均为UAT环境 Performence对比 更改前: 主进程渲染时间为 8s 教务系统-排课页面性…

【MySQL数据库 | 第二十三篇】什么是索引覆盖和索引下推

前言&#xff1a; 在数据库查询优化领域&#xff0c;索引一直被视为关键的工具&#xff0c;用于提高查询性能并加速数据检索过程。然而&#xff0c;随着数据库技术的不断发展&#xff0c;出现了一些新的优化技术&#xff0c;其中包括索引下推&#xff08;Index Pushdown&#…

《UE5_C++多人TPS完整教程》学习笔记31 ——《P32 角色移动(Character Movement)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P32 角色移动&#xff08;Character Movement&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…

机器学习笔记 - 深度学习遇到超大图像怎么办?使用 xT 对极大图像进行建模论文简读

作为计算机视觉研究人员,在处理大图像时,避免不了受到硬件的限制,毕竟大图像已经不再罕见,手机的相机和绕地球运行的卫星上的相机可以拍摄如此超大的照片,遇到超大图像的时候,我们当前最好的模型和硬件都会达到极限。 所以通常我们在处理大图像时会做出两个次优选择之一:…

苍穹外卖10(Spring Task定时任务,WebSocket双向通信,订单状态定时处理,来电提醒,客户催单)

目录 一、Spring Task 1. 介绍 2. 入门 1 使用步骤 2 使用示例 3. 详解 1 Scheduled注解 2 cron表达式 1 cron表达式6个域 2 各个域的取值说明 4. 小结 二、订单状态定时处理 1. 需求分析 1 问题分析 2 功能需求 2. 代码开发 1 修改引导类加EnableScheduling …

Azure的VFP和虚拟IP地址

Azure 的Virtual filtering platform (VFP) 是Azure 网络地址转换,端口转换和端口分配的基础。 下面我们来深入介绍一下VFP的工作方式。 VFP的出站动作。 对于客户端地址作为虚拟IP的出站目的地址的时候,VFP 驱动会负责做以下两个动作。 源地址转换。端口地址转换。VFP 和 S…