Java日常开发的坑
1. 六类典型空指针问题
包装类型的空指针问题
级联调用的空指针问题
Equals方法左边的空指针问题
ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null。
集合,数组直接获取元素
对象直接获取属性
1.1包装类型的空指针问题12345678910public class NullPointTest { public static void main(String[] args) throws InterruptedException { System.out.println(testInteger(null)); } private static Integer testInteger(Integer i) { return i + 1; //包装类型,传参可能为null,直接计算,则会导致空指针问题 }}
1.2 级联调用的空指针问题123456public class NullPointTest { publ ...
万事胜意,虎年大吉。
2022,万事胜意,虎年大吉!从放假前的焦虑,回家路途的奔波,到在家一周的生活,再到回庄里看望姐姐的一周,两周的年假就这样过去了,工作的第一年,第一年不再拥有寒假。
可能是因为疫情的影响吧,感觉比以前少了好多年味,不像往年,大家还会聚在一起吃吃饭饭、聊聊天,今年除了去姥姥家吃了顿饭,也没有什么年味的活动,姐姐、表姐也都没回家,以至于家里就只有我一个人,无所事事。
除夕贴春联也是匆匆贴好,然后就继续会屋宅。晚上看春晚也是第一年没有坚持到结尾,十点多钟就进入梦乡。
大年初一也没有串门去拜年,很多长辈两三年没见了,也有些长辈再也看不见了…长辈变少了,小辈也还没有出现,总觉得心里、家里都空落落的…
大年初三就和老妈去石家庄看望姐姐,只见了一天,第二天姐姐就去医院准备卸货了(小外甥女),住院的前三天都没有动静,我老妈和她婆婆每天都往医院跑,家里依旧是自己一个人。
初八小外甥女降生了,我也要去做核酸准备第二天返京了,顺便去了趟医院,看看我老妈他们。是的,是看我老妈,因为医院的住院部只允许随同一位亲属,只有我姐夫在里面照顾姐姐,剩下我们都是在一楼大厅默默的守候。姐姐休息过后给我发了一句话:“妈真不容 ...
Bat批处理判断字符串包含与替换
123set a="asd 123"if "%a%" neq "%a: =%" ( set a=%a: =kg% )pause
判断字符串是否包含空格,把空格替换完“kg”;��;
Spring MVC重定向和转发
Spring MVC重定向和转发Spring MVC 请求方式分为转发、重定向 2 种,分别使用 forward 和 redirect 关键字在 controller 层进行处理。
重定向是将用户从当前处理请求定向到另一个视图(例如 JSP)或处理请求,以前的请求(request)中存放的信息全部失效,并进入一个新的 request 作用域;转发是将用户对当前处理的请求转发给另一个视图或处理请求,以前的 request 中存放的信息不会失效。
转发是服务器行为,重定向是客户端行为。
1 转发过程客户浏览器发送 http 请求,Web 服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户;在这里转发的路径必须是同一个 Web 容器下的 URL,其不能转向到其他的 Web 路径上,中间传递的是自己的容器内的 request。
在客户浏览器的地址栏中显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
2 重定向过程客户浏览器发送 http 请求,Web 服务器接受后发送 302 状态码响应及 ...
Spring MVC传递参数
Spring MVC传递参数Spring MVC Controller 接收请求参数的方式有很多种,有的适合 get 请求方式,有的适合 post 请求方式,有的两者都适合。主要有以下几种方式:
通过实体 Bean 接收请求参数
通过处理方法的形参接收请求参数
通过 HttpServletRequest 接收请求参数
通过 @PathVariable 接收 URL 中的请求参数
通过 @RequestParam 接收请求参数
通过 @ModelAttribute 接收请求参数
下面分别介绍这些方式,读者可以根据实际情况选择合适的接收方式。
1 通过实体Bean接收请求参数实体 Bean 接收请求参数适用于 get 和 post 提交请求方式。需要注意,Bean 的属性名称必须与请求参数名称相同。示例代码如下。
12345678910@RequestMapping("/login")public String login(User user, Model model) { if ("bianchengbang".equals(u ...
Spring MVC @Controller和@RequestMapping注解
Spring MVC @Controller和@RequestMapping注解Spring 2.5 版本新增了 Spring MVC 注解功能,用于替换传统的基于 XML 的 Spring MVC 配置。
在《第一个Spring MVC应用》一节中创建了两个传统风格的控制器,它们是实现 Controller 接口的类。传统风格的控制器不仅需要在配置文件中部署映射,而且只能编写一个处理方法,不够灵活。
使用基于注解的控制器具有以下 2 个优点:
在基于注解的控制器类中可以编写多个处理方法,进而可以处理多个请求(动作),这就允许将相关的操作编写在同一个控制器类中,从而减少控制器类的数量,方便以后维护。
基于注解的控制器不需要在配置文件中部署映射,仅需要使用 @RequestMapping 注解一个方法进行请求处理即可。
下面介绍在 Spring MVC 中最重要的两个注解类型:@Controller 和 @RequestMapping。
本节示例基于《第一个Spring MVC应用》一节中的代码实现。
1 Controller注解@Controller 注解用于声明某类的实例是一个控 ...
Spring MVC执行流程
Spring MVC执行流程在学习框架之前,首先来了解一下 Spring MVC 框架的整体请求流程和使用到的 API 类。
Spring MVC 框架是高度可配置的,包含多种视图技术,例如 JSP、FreeMarker、Tiles、iText 和 POI。Spring MVC 框架并不关心使用的视图技术,也不会强迫开发者只使用 JSP。
1 Spring MVC 执行流程Spring MVC 执行流程如图 1 所示。
图 1:Spring MVC执行流程
SpringMVC 的执行流程如下。
用户点击某个请求路径,发起一个 HTTP request 请求,该请求会被提交到 DispatcherServlet(前端控制器);
由 DispatcherServlet 请求一个或多个 HandlerMapping(处理器映射器),并返回一个执行链(HandlerExecutionChain)。
DispatcherServlet 将执行链返回的 Handler ...
Spring MVC视图解析器
Spring MVC视图解析器视图解析器(ViewResolver)是 Spring MVC 的重要组成部分,负责将逻辑视图名解析为具体的视图对象。
Spring MVC 提供了很多视图解析类,其中每一项都对应 Java Web 应用中特定的某些视图技术。下面介绍一些常用的视图解析类。
URLBasedViewResolverUrlBasedViewResolver 是对 ViewResolver 的一种简单实现,主要提供了一种拼接 URL 的方式来解析视图。
UrlBasedViewResolver 通过 prefix 属性指定前缀,suffix 属性指定后缀。当 ModelAndView 对象返回具体的 View 名称时,它会将前缀 prefix 和后缀 suffix 与具体的视图名称拼接,得到一个视图资源文件的具体加载路径,从而加载真正的视图文件并反馈给用户。
使用 UrlBasedViewResolver 除了要配置前缀和后缀属性之外,还需要配置“viewClass”,表示解析成哪种视图。示例代码如下。
1234567<bean id="viewResolv ...
Spring MVC
1 MVC设计模式简介MVC 设计模式一般指 MVC 框架,M(Model)指数据模型层,V(View)指视图层,C(Controller)指控制层。使用 MVC 的目的是将 M 和 V 的实现代码分离,使同一个程序可以有不同的表现形式。其中,View 的定义比较清晰,就是用户界面。
在 Web 项目的开发中,能够及时、正确地响应用户的请求是非常重要的。用户在网页上单击一个 URL 路径,这对 Web 服务器来说,相当于用户发送了一个请求。而获取请求后如何解析用户的输入,并执行相关处理逻辑,最终跳转至正确的页面显示反馈结果,这些工作往往是控制层(Controller)来完成的。
在请求的过程中,用户的信息被封装在 User 实体类中,该实体类在 Web 项目中属于数据模型层(Model)。
在请求显示阶段,跳转的结果网页就属于视图层(View)。
像这样,控制层负责前台与后台的交互,数据模型层封装用户的输入/输出数据,视图层选择恰当的视图来显示最终的执行结果,这样的层次分明的软件开发和处理流程被称为 MVC 模式。
在学习 Servlet 及 JSP 开发时,J ...
SpEL表达式语言(Spring)
SpEL表达式语言(Spring)Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言,支持运行时查询和操作对象图 。表达式语言一般是用最简单的形式完成最主要的工作,以此减少工作量。
Java 有许多可用的表达式语言,例如 JSP EL,OGNL,MVEL 和 JBoss EL,SpEL 语法类似于 JSP EL,功能类似于 Struts2 中的 OGNL,能在运行时构建复杂表达式、存取对象图属性、调用对象方法等,并且能与 Spring 功能完美整合,如 SpEL 可以用来配置 Bean 定义。
SpEL 并不与 Spring 直接相关,可以被独立使用。SpEL 表达式的创建是为了向 Spring 社区提供一种受良好支持的表达式语言,该语言适用于 Spring 家族中的所有产品。也就是说,SpEL 是一种与技术无关的 API,可以集成其它表达式语言。
SpEL 提供了以下接口和类:
Expression interface:该接口负责评估表达式字符串
ExpressionParser interface:该接口负责解析字符串
Eva ...
Spring事务(Transaction)
事务(Transaction)是面向关系型数据库(RDBMS)企业应用程序的重要组成部分,用来确保数据的完整性和一致性。
事务具有以下 4 个特性,即原子性、一致性、隔离性和持久性,这 4 个属性称为 ACID 特性。
原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中包括的动作要么都做要么都不做。
一致性(Consistency):事务必须保证数据库从一个一致性状态变到另一个一致性状态,一致性和原子性是密切相关的。
隔离性(Isolation):一个事务的执行不能被其它事务干扰,即一个事务内部的操作及使用的数据对并发的其它事务是隔离的,并发执行的各个事务之间不能互相打扰。
持久性(Durability):持久性也称为永久性,指一个事务一旦提交,它对数据库中数据的改变就是永久性的,后面的其它操作和故障都不应该对其有任何影响。
1 编程式和声明式Spring 的事务管理有 2 种方式:
传统的编程式事务管理,即通过编写代码实现的事务管理;
基于 AOP 技术实现的声明式事务管理。
1.1 编程式事务管理编程式事务管理是通过编写代码实现的事务管理,灵活性高,但难 ...
Spring集成Log4J
Spring集成Log4J日志是应用软件中不可缺少的部分,Apache 的开源项目 Log4J 是一个功能强大的日志组件。在 Spring 中使用 Log4J 是非常容易的,下面通过例子演示 Log4J 和 Spring 的集成。
使用 Log4J 之前,需要先导入 log4j-x.y.z.jar 包,Log4J 下载地址:https://logging.apache.org/log4j。
示例下面使用 Eclipse IDE 演示 Log4J 的使用,步骤如下:
创建 SpringDemo 项目,并在 src 目录下创建 net.biancheng 包。
导入 Spring 相关 JAR 包及 log4j-x.y.z.jar。
在 net.biancheng 包下创建 HelloWorld、MainApp、Beans.xml 和 log4j.properties。
运行 SpringDemo 项目。
HelloWorld 类代码如下。
12345678910package net.biancheng;publ ...
Spring JdbcTemplate类
Spring JdbcTemplate类Spring 针对数据库开发提供了 JdbcTemplate 类,该类封装了 JDBC,支持对数据库的所有操作。
JdbcTemplate 位于 spring-jdbc-x.x.x.jar 包中,其全限定命名为 org.springframework.jdbc.core.JdbcTemplate。此外使用 JdbcTemplate 还需要导入 spring-tx-x.x.x.jar 包,该包用来处理事务和异常。
在 Spring 中,JDBC 的相关信息在配置文件中完成,其配置模板如下所示。
1234567891011121314151617181920212223242526<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http:/www.w3.org/2001/XMLSch ...
Spring AspectJ
Spring AspectJSpring 2.0 以后,Spring 新增了对 AspectJ 的支持。在新版本的 Spring 框架中,建议使用 AspectJ 方式开发 AOP。
AspectJ 是一个基于 Java 语言的 AOP 框架,它扩展了 Java 语言,提供了强大的 AOP 功能。
使用 AspectJ 需要导入以下 jar 包:
Aspectjrt.jar
Aspectjweaver.jar
Aspectj.jar
jar 包下载地址:https://www.eclipse.org/aspectj/downloads.php
使用 AspectJ 开发 AOP 通常有以下 2 种方式:
基于 XML 的声明式 AspectJ
基于 Annotation 的声明式 AspectJ
AspectJ包下载缓慢解决方法打开 AspectJ 包下载页面,选择相应的版本,这里我们下载的为 1.9.5 稳定版本。
点击 aspectj-1.9.5.jar 进入下载页面,选择 Select another mirror,如下图。
根据自己所处地区选择下载,这里我们选择的是 ...
Spring AOP
Spring AOP(面向切面编程)AOP 的全称是“Aspect Oriented Programming”,即面向切面编程,和 OOP(面向对象编程)类似,也是一种编程思想。
AOP 采取横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。主要作用是分离功能性需求和非功能性需求,使开发人员可以集中处理某一个关注点或者横切逻辑,减少对业务代码的侵入,增强代码的可读性和可维护性。
简单的说,AOP 的作用就是保证开发者在不修改源代码的前提下,为系统中的业务组件添加某种通用功能。AOP 就是代理模式的典型应用。
目前最流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ。
Spring AOP 是基于 AOP 编程模式的一个框架,它能够有效的减少系统间的重复代码,达到松耦合的目的。Spring AOP 使用纯 Java 实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类植入增强的代码。有两种实现方式:基于接口的 JDK 动态代理和基于继承的 CGLIB 动态代理。
Asp ...
Spring Bean 自动装配
Spring Bean自动装配Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式。Spring 容器支持多种装配 Bean 的方式,如基于 XML 的 Bean 装配、基于 Annotation 的 Bean 装配和自动装配等。
Spring 基于 XML 的装配通常采用两种实现方式,即我们在《Spring依赖注入》一节介绍的 setter 注入和构造注入。本节介绍如何配置自动装配。
自动装配就是指 Spring 容器在不使用 和 标签的情况下,可以自动装配(autowire)相互协作的 Bean 之间的关联关系,将一个 Bean 注入其他 Bean 的 Property 中。
使用自动装配需要配置 元素的 autowire 属性。autowire 属性有五个值,具体说明如下表所示。
名称
说明
no
默认值,表示不使用自动装配,Bean 依赖必须通过 ref 元素定义。
byName
根据 Property 的 name 自动装配,如果一个 Bean 的 name 和另一个 Bean 中的 Property 的 na ...
Spring 依赖注入
Spring依赖注入Spring 依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念。使用依赖注入可以更轻松的管理和测试应用程序。
当某个 Java 实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的实例(例如,使用 new 关键字获得被调用者实例),而使用 Spring 框架后,被调用者的实例不再由调用者创建,而是由 Spring 容器创建,这称为控制反转。
Spring 容器在创建被调用者的实例时,会自动将调用者需要的对象实例注入给调用者,调用者通过 Spring 容器获得被调用者实例,这称为依赖注入。
依赖注入主要有两种实现方式,分别是 setter 注入(又称设值注入)和构造函数注入。具体介绍如下。
构造函数注入指 IoC 容器使用构造函数注入被依赖的实例。可以通过调用带参数的构造函数实现依赖注入,每个参数代表一个依赖。
setter 注入指 IoC 容器使用 setter 方法注入被依赖的实例。通过调用无参构造器或无参 static 工厂方法实例化 Bean 后,调用该 Bean 的 se ...
Spring
SpringSpring是什么Spring 自诞生以来一直备受青睐,它包括许多框架,例如 Spring framework、SpringMVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 等,所以有人将它们亲切的称之为:Spring 全家桶。
Spring framework 就是我们平时说的 Spring 框架,本套教程我们将 Spring framework 简称为 Spring 框架。Spring 框架是全家桶内其它框架的基础和核心,下面让我们来认识 Spring 框架吧。
Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力。
Spring 由 Rod Johnson 创立,2004 年发布了 Spring 框架的第一版,其目的是用于简化企业级应用程序开发的难度和周期。
Spring 是分层的 Java SE/EE 一站式轻量级开源框架,以 IoC(Inverse of Control,控制反转)和 AOP(As ...
MySQL5压缩版安装
cmd(管理员)
Microsoft Windows [版本 10.0.14393](c) 2016 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>cd C:\Program Files\MySql\mysql-5.7.36-winx64\bin
C:\Program Files\MySql\mysql-5.7.36-winx64\bin>mysqld –installService successfully installed.
C:\Program Files\MySql\mysql-5.7.36-winx64\bin>mysqld –initialize –console2021-12-19T13:17:31.825100Z 0 [Warning] InnoDB: New log files created, LSN=457902021-12-19T13:17:31.984439Z 0 [Warning] InnoDB: Creating foreign key constraint sys ...
Java调用.NET WebService
Java调用.NET WebService加依赖
下面两个jar包,一个在maven依赖库中没找到,一个是阿里镜像库中没有,所以需要自己下载一下。
调用
上面参数对应下面
Code123456789101112131415161718try { String varname="成功访问!!!"; String endpoint="http://81.70.35.77:8088/TestWebService.asmx"; Service service = new Service(); Call call = (Call)service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpoint)); call.setOperationName(new QName("http://tempuri.org/", "HelloWorld")); call.addParameter ...
网页.ts视频下载
网站ts视频批量获取下载,并拼接合并为MP4
在360浏览器中安装 AI智能下载器 插件
可以实时爬取到网页的ts视频,爬取完毕后全部下载到本地。
打开 cmd 输入
1copy /b D:\*.ts D:\ok.ts
“D:\“ 为存储的路径, “ok.ts“ 为合并后的文件名。
合并完成后通过格式工厂等视频格式转换器转换成MP4即可。
超长视频TS助手下载会更方便些,不过暂时还没有用过,只听说可以下载。。**
C#-WebService
C# - WebService创建创建WebService项目
注意这里的 .NET框架 选择,稍后需要在IIS部署的服务器上安装相同版本框架。
添加Web服务
编写方法
发布
配置安装框架IIS常规安装、配置就不在这里讲了,只讲WebService相关配置。
首先需要在服务器安装对应版本的 .NET Framework (与创建项目中选择的框架一致)。
IIS配置
配置完成后可在服务器的浏览器通过 localhost 访问WebService地址,如下。
防火墙配置需要在防火墙中开放端口访问(或关闭防火墙)。
新建入站规则。
服务器配置以下配置需要看用的什么服务器,以下以 腾讯云 为例。
远程调用添加服务引用
代码调用
ng)