当前位置: 首页 > news >正文

javaweb学习(day11-监听器Listener过滤器Filter)

一、监听器Listener

1 Listener介绍

  • Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 序、Listener 监听器、Filter 过滤器
  • Listener JavaEE 的规范,就是接口
  • 监听器的作用是,监听某种变化(一般就是对象创建/销毁, 属性变化), 触发对应方法完成 相应的任务
  • JavaWeb 中的监听器(共八个), 目前最常用的是 ServletContextListener

ServletContextListener 监听器 

2.1 作用 

        监听 ServletContext 创建或销毁 ( 当我们 Web 应用启动时 ,就会创建 ServletContext)
即生命周期监听,应用场景 (1) 加载初始化的配置文件;比如 spring 的配置文件 (2) 任务调
度(配合定时器 Timer/TimerTask)

2.2 相关方法

2.3 应用实例 

package com.hspedu.listener;import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;public class HspServletContextListener implements ServletContextListener {/*1. 当一个类实现了ServletContextListener时,该类就是一个监听器2. 该类可以监听的事件 由该类实现的监听接口决定3. 比如实现了ServletContextListener 则该类就可监听ServletContext对象的创建和销毁。以此类推4.HspServletContextListener就是一个监听者5.当web应用启动时,就会产生一个ServletContextEvent的事件,会调用监听器的对应事件处理方法6. contextInitialized同时会传递事件对象7. 程序员可以通过ServletContextEvent事件对象来获取需要的信息,再进行业务处理8.tomcat怎么知道这个监听器的存在?因为我们需要在web.xml配置*/@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {ServletContext servletContext =servletContextEvent.getServletContext();System.out.println("监听到了"+servletContext+"被创建");}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {ServletContext servletContext =servletContextEvent.getServletContext();System.out.println("监听到了"+servletContext+"被销毁");}
}

 2.4 配置 web.xml

ServletContextAttributeListener 监听器 

3.1 介绍 

作用:监听 ServletContext 属性变化
相关方法

3.2 案例

 创建ServletContextAttributeListener

package com.hspedu.listener;import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;public class MyServletContextAttributeListener implements ServletContextAttributeListener {@Overridepublic void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("添加了 servletContext 属性名= " + servletContextAttributeEvent.getName() + " 属 性 值 =" +servletContextAttributeEvent.getValue());}@Overridepublic void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("删除了 servletContext 属性名= " + servletContextAttributeEvent.getName() + " 属 性 值 =" +servletContextAttributeEvent.getValue());}@Overridepublic void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {//拿到的属性是修改之前的System.out.println("替换了 servletContext 属性名= " + servletContextAttributeEvent.getName() + " 属 性 值 =" +servletContextAttributeEvent.getValue());}
}
配置 web.xml

创建Servlet

package com.hspedu.servlet;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;public class HiServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//给ServletContext添加相关的属性ServletContext servletContext =request.getServletContext();servletContext.setAttribute("name","linran");servletContext.setAttribute("name","lin");servletContext.removeAttribute("name");System.out.println("HoServlet 处理完毕");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}
}

 4 其它监听器

4.1 HttpSessionListener 监听器

作用:监听 Session 创建或销毁,即生命周期监听

相关方法

4.2 HttpSessionAttributeListener 监听器 

作用:监听 Session 属性的变化
相关方法

  4.3 ServletRequestListener 监听器

 作用:监听 Request 属性变化

 相关方法

 4.4  ServletRequestListener 监听器

作用:监听 Request 创建或销毁,即 Request 生命周期监听

相关方法

可以用来监控, 某个 IP 访问我们网站的频率, 日志记录 ,访问资源的情况 

二、过滤器 Filter 

Filter 过滤器说明

1.1 为啥要过滤器

1.2 过滤器介绍 

  • Filter 过滤器它是 JavaWeb 的三大组件之一(Servlet 程序、Listener 监听器、Filter 滤器)
  • Filter 过滤器是 JavaEE 的规范,是接口
  • Filter 过滤器它的作用是:拦截请求,过滤响应。 

1.3 应用场景 

权限检查 日记操作  事务管理

Filter 过滤器基本原理

Filter 过滤器快速入门

3.1 需求

web 工程下,有后台管理目录 manage ,要求 该目录下所有资源 html 、图片、
jsp Servlet 等)用户登录后才能访问

 

 3.2 login.jsp

<%--User: LinranDate: 2024/4/2Time: 16:44Version: 1.0To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>管理后台登录</title>
</head>
<body><h1>管理后台登录</h1><form action="<%=request.getContextPath()%>/loginCheckServlet" method="post">u:<input type="text" name="username"><br><br>p:<input type="password" name="password"><br><br><input type="submit" value="用户登录"></form></body>
</html>

 3.3 LoginCLServlet

package com.hspedu.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;public class LoginCheckServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取用户名和密码//假设密码是123456就可以通过String username=request.getParameter("username");String password=request.getParameter("password");if("123456".equals(password)){//加入sessionHttpSession session = request.getSession();session.setAttribute("username",username);session.setAttribute("password",password);request.getRequestDispatcher("/manage/admin.jsp").forward(request,response);}else {request.getRequestDispatcher("/login.jsp").forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}
}

3.4 admin.jsp

<%--User: LinranDate: 2024/4/2Time: 16:48Version: 1.0To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>后台管理</title><base href="<%=request.getContextPath()%>/manage/">
</head>
<body><h1>后台管理</h1><a href="#"> 用户列表</a>||<a href="#">添加用户</a>||<a href="#">删除用户</a><hr>
<img src="1.jpeg">
</body>
</html>

3.5 ManageFilter

package com.hspedu.filter;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;public class ManageFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {//当Tomcat 创建filter后会调用该方法进行初始化System.out.println("ManageFilter init 被调用.....");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//当每次调用该filter时,dofilter就会被调用System.out.println("ManageFilter doFilter 被调用");//如果这里没有调用继续请求的方法,则停止在这//如果继续访问目标资源//在调用过滤器之前,request对象已经被创建并封装//所以这里就可以通过servletRequest来获取很多信息,比如访问的url\session\数据HttpServletRequest httpServletRequest =((HttpServletRequest) servletRequest);HttpSession session = httpServletRequest.getSession();//获取username session对象Object username = session.getAttribute("username");if(username!=null){//用户登录过,直接放行filterChain.doFilter(servletRequest,servletResponse);//继续访问目标资源//servletRequest,servletResponse会传递给目标资源//}else {servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);}}@Overridepublic void destroy() {//当filter被销毁时,就会调用该方法System.out.println("ManageFilter destroy 被调用");}
}

3.6 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--filter一般写在最前面1. 我们可以发现filter配置和servlet是十分相似的,filter也是被tomcat管理和维护的2. url-pattern就是当请求的url和匹配的时候,就会调用该filter‘3. /manage/* 第一个/解析成http://ip:port/工程路径4:完整的路径就是http://ip:port/工程路径/manage/* 当请求的资源url满足该条件时都会调用filter--><filter><filter-name>ManageFilter</filter-name><filter-class>com.hspedu.filter.ManageFilter</filter-class></filter><filter-mapping><filter-name>ManageFilter</filter-name><url-pattern>/manage/*</url-pattern></filter-mapping><servlet><servlet-name>LoginCheckServlet</servlet-name><servlet-class>com.hspedu.servlet.LoginCheckServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginCheckServlet</servlet-name><url-pattern>/loginCheckServlet</url-pattern></servlet-mapping></web-app>

Filter 过滤器 url-pattern

  • url-pattern : Filter 的拦截路径, 即浏览器在请求什么位置的资源时,过滤器会进行拦截过
  • 精确匹配 <url-pattern>/a.jsp</url-pattern> 对应的 请求地址 http://ip[域名]:port/工程路径/a.jsp 会拦截
  • 目录匹配 <url-pattern>/manage/*</url-pattern>对应的 请求地址 http://ip[域名]:port/工程路径/manage/xx , web 工程 manage 目录下所有资源 会拦截
  • 后缀名匹配 <url-pattern>*.jsp</url-pattern> 后缀名可变,比如 *.action *.do 等等对应的请求地址 http://ip[域名]:port/工程路径/xx.jsp , 后缀名为 .jsp 请求会拦截
  • Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在

Filter 过滤器生命周期 

FilterConfig 

  • FilterConfig Filter 过滤器的配置类 
  • Tomcat 每次创建 Filter 的时候,也会创建一个 FilterConfig 对象,这里包含了 Filter 置文件的配置信息。
  • FilterConfig 对象作用是获取 filter 过滤器的配置内容
package com.hspedu.filter;import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;public class FilterConfig_ implements Filter {/*演示FilterConfig的使用*/@Overridepublic void init(FilterConfig filterConfig) throws ServletException {//通过filterConfig获取相关参数String filterName =filterConfig.getFilterName();System.out.println("filterName="+filterName);String ip =filterConfig.getInitParameter("ip");System.out.println("ip="+ip);ServletContext servletContext =filterConfig.getServletContext();System.out.println("servletContext="+servletContext);Enumeration<String> initParameterNames = filterConfig.getInitParameterNames();while (initParameterNames.hasMoreElements()){System.out.println("名字  :"+initParameterNames.nextElement());}}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {}@Overridepublic void destroy() {}
}

 web.xml

7 FilterChain 过滤器链 

一句话 : FilterChain: 在处理某些复杂业务时,一个过滤器不够,可以设计多个过滤器 共同完成过滤任务,形成过滤器链

 7.1 AFilter

package com.hspedu.filter;import javax.servlet.*;
import java.io.IOException;public class AFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("=======AFilter doFilter()前置处理代码=======");chain.doFilter(req, resp);System.out.println("=======AFilter doFilter()后置处理代码=======");}public void init(FilterConfig config) throws ServletException {}}

 7.2 BFilter

package com.hspedu.filter;import javax.servlet.*;
import java.io.IOException;public class AFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("=======AFilter doFilter()前置处理代码=======");chain.doFilter(req, resp);System.out.println("=======AFilter doFilter()后置处理代码=======");}public void init(FilterConfig config) throws ServletException {}}

7.3 hi.jsp

<%--User: LinranDate: 2024/4/2Time: 20:14Version: 1.0To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hi</title>
</head>
<body>
<h1>admin 目录下的 hi.jsp</h1>
<h1>后台管理</h1>
<a href="#">用户列表</a>||<a href="#">添加用户</a>||<a href="#">删除用户</a>
<hr/>
</body>
</html>

7.4 web.xml

 

FilterChain 注意事项和细节 

  • 多个 filter 和目标资源在一次 http 请求,在同一个线程中
  • 当一个请求 url filter url-pattern 匹配时, 才会被执行, 如果有多个匹配上,就会顺序执行,形成一个 filter 调用链(底层可以使用一个数据结构搞定
  • 多个 filter 共同执行时,因为是一次 http 请求, 使用同一个 request 对象
  • 多个 filter 执行顺序,和 web.xml 配置顺序保持一致.
  • chain.doFilter(req, resp)方法 将执行下一个过滤器的 doFilter 方法, 如果后面没有过滤器,则执行目标资源。
  • 小结:注意执行过滤器链时, 顺序是(用前面的案例分析) Http请求 -> A 过滤器 dofilter() -> A 过滤器前置代码 -> A 过滤器 chain.doFilter() -> B 过滤器 dofilter() -> B 过滤器前置代 -> B过滤器 chain.doFilter() -> 目标文件 -> B过滤器后置代码 -> A过滤器后置代码 -> 返回给浏览器页面/数据

 

相关文章:

javaweb学习(day11-监听器Listener过滤器Filter)

一、监听器Listener 1 Listener介绍 Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是&#xff1a;Servlet 程 序、Listener 监听器、Filter 过滤器 Listener 是 JavaEE 的规范&#xff0c;就是接口 监听器的作用是&#xff0c;监听某种变化(一般就是对…...

教你快速认识Java中的抽象类和接口

目录 引言 抽象类&#xff08;Abstract Class&#xff09; 抽象类的概念 抽象类的图标 抽象类的语法 抽象类的特点 接口&#xff08;Interface&#xff09; 接口的概念 接口的图标 接口的语法 接口的特点 接口的使用 接口的意义 抽象类与接口的区别 Object类 结…...

Linux第5课 Linux目录介绍

文章目录 Linux第5课 Linux目录介绍一、打开系统目录二、查看系统目录 Linux第5课 Linux目录介绍 系统目录就是指操作系统的主要文件存放的目录&#xff0c;目录中的文件直接影响到系统是否正常工作&#xff0c;了解这些目录的功能&#xff0c;对使用系统会有很大的帮助。 一…...

GitHub要求2FA?不慌,有它(神锁离线版)帮你!

GitHub宣布&#xff0c;到 2023 年底&#xff0c;所有用户都必须要启用双因素身份验证 (2FA)&#xff0c;不能只用密码啦。 说实话&#xff0c;听到这消息小编是非常高兴的。 正如GitHub的首席安全官Mike Hanley所说&#xff0c;软件供应链是从开发者开始的&#xff0c;保护开…...

C语言第四十弹---预处理(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 预处理 1、#和## 1.1 #运算符 1.2、##运算符 2、命名约定 3、#undef 4、命令行定义 5、条件编译 6、头文件的包含 6.1、头文件被包含的方式 6.1.1、本地…...

SYS-2722音频分析仪SYS2722

181/2461/8938产品概述&#xff1a; Audio Precision 2722 音频分析仪是 Audio Precision 屡获殊荣的 PC 控制音频分析仪的旗舰型号&#xff0c;长期以来一直是音频设备设计和测试的全球公认标准。功能齐全的 SYS-2722 提供了测试转换器技术最新进展所需的无与伦比的失真和噪声…...

下载页面上的视频

引言&#xff1a;有些页面上的视频可以直接右键另存为或者F12检索元素找到视频地址打开后保存&#xff0c;但有些视频页面是转码后的视频&#xff0c;不能直接另存为视频格式&#xff0c;可以参考下本方法 以该页面视频为例&#xff1a;加载中...点击查看详情https://wx.vzan.c…...

静态路由协议实验综合实验

需求&#xff1a; 1、除R5的换回地址已固定外&#xff0c;整个其他所有的网段基于192.168.1.0/24进行合理的IP地址划分。 2、R1-R4每台路由器存在两个环回接口&#xff0c;用于模拟连接PC的网段&#xff1b;地址也在192.168.1.0/24这个网络范围内。 3、R1-R4上不能直接编写到…...

qt MVC软件设计模式

在Qt中使用MVC&#xff08;Model-View-Controller&#xff09;软件设计模式可以帮助你将数据模型、用户界面和控制逻辑有效地分离&#xff0c;从而使得代码更清晰&#xff0c;更易于维护和扩展。以下是在Qt中使用MVC模式的一般思路&#xff1a; Model&#xff08;模型&#xff…...

代码随想录刷题随记15-二叉树回溯

代码随想录刷题随记15-二叉树回溯 110.平衡二叉树 leetcode链接 一棵高度平衡二叉树定义为&#xff1a;一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 求深度和求高度的区别&#xff1a; 求深度可以从上到下去查 所以需要前序遍历&#xff08;中左右&#xff…...

基于SpringBoot Vue养老院管理

一、&#x1f4dd;功能介绍 基于SpringBoot Vue养老院管理 角色&#xff1a;管理员、企业、老人子女、老人 管理员&#xff1a;管理员登录进入养老院管理系统可以对系统首页、个人中心、服务人员管理、老人管理、老人子女管理、老人档案管理、社区活动管理、活动记录管理、床…...

盘点编程方法论中的一些思想

背景 在日常编程开发中&#xff0c;虽然不同公司&#xff0c;业务不同&#xff0c;语言不同&#xff0c;但是工作久了&#xff0c;我们会发现一些编程思想几乎是不变的。这些编程思想&#xff0c;往往来自于大量实际问题场景的方法总结&#xff0c;可以很好的应对某一类问题。如…...

通过电机转速计算主轴旋转单圈所需时间(CODESYS ST代码)

1、伺服丝杠系统常用算法功能块 伺服丝杠系统常用算法功能块-CSDN博客文章浏览阅读353次。这篇博客主要介绍伺服、丝杠系统常用的运算功能块,其它相关运算可以查看下面文章链接:信捷PLC脉冲频率、位移、转速相关计算(C语言编程应用)_RXXW_Dor的博客-CSDN博客。https://rxxw-…...

多线程的入门(二)线程实现与初步使用

1.实现Runable接口 实现Runable接口&#xff0c;实现run方法&#xff1b; 这种方式创建的线程实现类执行时需要创建Thread实例去运行该任务 示例如下&#xff1a; package com.example.springbootdamo.Thread;import org.apache.logging.log4j.LogManager; import org.apach…...

数据结构(初阶)第二节:顺序表

数据结构&#xff08;初阶&#xff09;第一节&#xff1a;数据结构概论-CSDN博客 从本文正式进入对数据结构的讲解&#xff0c;开始前友友们要有C语言的基础&#xff0c;熟练掌握动态内存管理、结构体、指针等章节&#xff0c;方便后续的学习。 目录 顺序表&#xff08;Sequen…...

鸿蒙OS元服务开发:【(Stage模型)设置应用主窗口】

一、设置应用主窗口说明 在Stage模型下&#xff0c;应用主窗口由UIAbility创建并维护生命周期。在UIAbility的onWindowStageCreate回调中&#xff0c;通过WindowStage获取应用主窗口&#xff0c;即可对其进行属性设置等操作。还可以在应用配置文件中设置应用主窗口的属性&…...

lua学习笔记6(经典问题输出99乘法表)

print("************for循环的99乘法表*************") for i 1, 9 dolocal line "" -- 创建一个局部变量来累积每行的输出--local 是一个关键字&#xff0c;用于声明一个局部变量。for j 1, i doline line .. j .. "*" .. i .. ""…...

物联网行业中,我们如何选择数据库?

在当今数字化潮流中&#xff0c;我们面对的不仅是海量数据&#xff0c;更是时间的涟漪。从生产线的传感器到金融市场的交易记录&#xff0c;时间序列数据成为了理解事物演变和趋势的关键。在面对这样庞大而动态的数据流时&#xff0c;我们需要深入了解一种强大的工具——时序数…...

openstack云计算(一)————openstack安装教程,创建空白虚拟机,虚拟机的环境准备

1、创建空白虚拟机 需要注意的步骤会截图一下&#xff0c;其它的基本都是下一步&#xff0c;默认的即可 ----------------------------------------------------------- 2、在所建的空白虚拟机上安装CentOS 7操作系统 &#xff08;1&#xff09;、在安装CentOS 7的启动界面中…...

Linux存储的基本管理

实验环境&#xff1a; 系统里添加两块硬盘 ##1.设备识别## 设备接入系统后都是以文件的形式存在 设备文件名称&#xff1a; SATA/SAS/USB /dev/sda,/dev/sdb ##s SATA, dDISK a第几块 IDE /dev/hd0,/dev/hd1 ##h hard VIRTIO-BLOCK /de…...

Python yield解析:深入理解生成器的魔力

Python中的yield关键字是生成器函数中非常重要的一部分&#xff0c;它可以使函数暂停执行并保存当前状态&#xff0c;同时允许生成器函数返回一个值。本文将详细介绍yield关键字的用法、特性、基本功能、高级功能、实际应用场景以及总结&#xff0c;帮助深入了解yield关键字的作…...

【Linux】GCCGDB

五、GCC & GDB 5.1 gcc 阶段变化命令预处理hello.c->hello.igcc -E 编译hello.i->hello.sgcc -S 汇编hello.s->hello.ogcc -c 链接hello.o->a.outgcc gcc -E hello.c -o 1.i # -o指定输出文件 gcc -E hello.c -g # -g包含提示信息 gcc -D gcc -DDebug <…...

InternLM2-Chat-1.8B 模型测试

在interStudio进行InternLM2-Chat-1.8B模型访问&#xff0c;进入开发机后 配置基础环境 新建conda环境并且进入 conda create -n demo python3.10 -y conda activate demo 下载pytorch等相关包 conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.…...

Flutter 关键字

import ‘package:xxxx.dart’; //源于pub.dev (完美的相对引入) import ‘xxxx.dart’; //自定义文件(库)(参考的相对引入(填写import命令码所在文件的上级文件夹下的文件(库)相对路径))(受到import命令码所在文件的参考路径的影响) import&#xff1a;import不具有传递性(类似…...

Java常用API之Collections类解读

写在开头&#xff1a;本文用于作者学习Java常用API 我将官方文档中Collections类中所有API全测了一遍并打印了结果&#xff0c;日拱一卒&#xff0c;常看常新 addAll() 将所有指定元素添加到指定 collection 中 可以添加一个或多个元素 Testpublic void test_addAl…...

KV260 BOOT.BIN更新 ubuntu22.04 netplan修改IP

KV260 2022.2设置 BOOT.BIN升级 KV260开发板需要先更新BOOT.BIN到2022.2版本&#xff0c;命令如下&#xff1a; sudo xmutil bootfw_update -i “BOOT-k26-starter-kit-202305_2022.2.bin” 注意BOOT.BIN应包含全目录。下面是更新到2022.1 FW的示例&#xff0c;非更新到2022.…...

Android 代码自定义drawble文件实现View圆角背景

简介 相信大多数Android开发都会遇到一个场景&#xff0c;给TextView或Button添加背景颜色&#xff0c;修改圆角&#xff0c;描边等需求。一看到这样的实现效果&#xff0c;自然就是创建drawble文件&#xff0c;设置相关属性shap&#xff0c;color&#xff0c;radius等。然后将…...

C#实现Word文档转Markdown格式(Doc、Docx、RTF、XML、WPS等)

文档格式的多样性丰富了我们的信息交流手段&#xff0c;其中Word文档因其强大的功能性而广受欢迎。然而&#xff0c;在网络分享、版本控制、代码阅读及编写等方面&#xff0c;Markdown因其简洁、易于阅读和编辑的特性而展现出独特的优势。将Word文档转换为Markdown格式&#xf…...

信息系统架构设计-以服务为中心的企业整合实践

生命周期 业务分析服务建模架构设计系统开发 案例背景 某航空公司的信息系统已有好几十年的历史。该航空公司的主要业务系统构建于20世纪七八十年代&#xff0c;以IBM的主机系统为主。 近年来&#xff0c;该公司已经在几个主要的核心系统之间构建了用于信息集成的信息Hub(I…...

mysql知识点梳理

mysql知识点梳理 一、InnoDB引擎中的索引策略&#xff0c;了解过吗&#xff1f;二、一条 sql 执行过长的时间&#xff0c;你如何优化&#xff0c;从哪些方面入手&#xff1f;三、索引有哪几种类型&#xff1f;四、SQL 约束有哪几种呢&#xff1f;五、drop、delete、truncate的区…...

国外装修效果图网站/精准网络营销推广

引言 PCIe接口在FPGA上的实现DSP端的PCIe外设使用 结合我前面两篇文章对FPGA和DSP两边的实现&#xff0c;本文对整个测试结果做一个总结。我用的FPGA和DSP都是国产的&#xff0c;对标Xilinx的XC7VX690T FPGA和TI的TMS320C6678 DSP。DSP作为RC&#xff0c;FPGA作为EP&#xff0…...

地方资讯网站源码/四川省人民政府

要点&#xff1a; 1、类加载机制的原理 2、程序初始化的顺序 3、类加载的代理模式&#xff08;双亲委托机制&#xff09; 一、类加载机制 JVM把class文件加载到内存&#xff0c;并对数据进行校验、准备、解析、初始化&#xff0c;最终形成JVM可以直接使用的Java类型的过程。‘…...

安康网站建设智能小程序/百度推广seo优化

一、安装telnet 执行 yum install telnet [rootEMS3 apache-zookeeper-3.5.8-bin]# yum install telnet Loaded plugins: fastestmirror Determining fastest mirrors ....测试 参考&#xff1a; 《linux&#xff1a;telnet命令安装》...

网站建设 落地页/视频剪辑培训

memcached全面剖析–4. memcached的分布式算法 作者: charlee 来源: idv2.com 发布时间: 2008-09-28 17:13 阅读: 4909 次 推荐: 0 原文链接 [收藏] 本系列文章导航 memcached完全剖析–1. memcached的基础 memcached全面剖析–2.理解memcached的内存存储 memcached全…...

泸州网站建设公司/应用关键词优化

wordpress响应慢在本系列中&#xff0c;我们一直在构建创建惊人的实时图形所需的功能。 到目前为止&#xff0c;我们已经完成了以下工作&#xff1a; 第1部分 我们加载了一个基础插件来加载我们的图形库 我们通过FTP上传了一个空白PHP文件 我们告诉WP如何找到我们的自定义P…...

四川 优质高职建设网站/网络营销策划与创意

回到目录 我之前讲过为实体添加注释的文章&#xff0c;最近开发过程中&#xff0c;感觉有必要把Display特殊也做在T4模板里&#xff0c;这样&#xff0c;实现在前台绑定时&#xff0c;就把信息自动显示出来了&#xff0c;呵呵。 主要分为两步&#xff1a;1 在T4模板里添加Displ…...