JavaWeb之JSP使用总结
¶一、JSP概述
JSP 的全称是 java server pages。Java 的服务器页面。JSP 的主要作用是代替 Servlet 程序回传 html 页面的数据。
因为 Servlet 程序回传 html 页面数据是一件非常繁锁的事情。开发成本和维护成本都极高。
¶1、举例证明繁琐
这是使用Servlet程序使用字符流写到HTML页面的内容:
12345678910111213141516171819public class PrintHtml extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html; charset=utf-8"); PrintWriter writer = resp.getWriter(); writ ...
JavaWeb之Servlet使用总结
¶一、Servlet介绍
Servlet 是 JavaEE 规范之一。规范就是接口!
Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
¶二、Servlet程序创建
¶1、通过实现Servlet接口创建Servlet程序
¶1.1、创建步骤
创建Web工程方式,点击这里!
编写一个类去实现 Servlet 接口
实现 service 方法,处理请求,并响应数据
到 web.xml 中去配置 servlet 程序的访问地址
¶1.2、Servlet创建
注意:需要导入servlet的jar包,直接去Tomcat安装目录下的lib目录找到servlet-api.jar复制到当前lib目录并Add as Library即可!
包名略有不同:
旧版本包名为为javax.servlet.xxx
新版本包名为jakarta.servlet.xxx
12345678910111213 ...
Tomcat服务器使用及IDEA整合Tomcat
¶一、Tomcat服务器使用
¶1、常用web服务器
Tomcat:由 Apache 组织提供的一种 Web 服务器,提供对 jsp 和 Servlet 的支持。它是一种轻量级的 javaWeb 容器(服务器),也是当前应用最广的 JavaWeb 服务器(免费)。
Jboss:是一个遵从 JavaEE 规范的、开放源代码的、纯 Java 的 EJB 服务器,它支持所有的 JavaEE 规范(免费)。
GlassFish: 由 Oracle 公司开发的一款 JavaWeb 服务器,是一款强健的商业服务器,达到产品级质量(应用很少)。
Resin:是 CAUCHO 公司的产品,是一个非常流行的服务器,对 servlet 和 JSP 提供了良好的支持,性能也比较优良,resin 自身采用 JAVA 语言开发(收费,应用比较多)。
WebLogic:是 Oracle 公司的产品,是目前应用最广泛的 Web 服务器,支持 JavaEE 规范,而且不断的完善以适应新的开发要求,适合大型项目(收费,用的不多,适合大公司)。
¶2、Tomcat与Servlet版本对应关系
¶3、Tomcat安装 ...
JavaWeb之jQuery使用总结
由于jQuery内容、选择器等等异常之多,只能随用随查,我找到一个不错的在线查询手册,欢迎查看!
jQuery在线查询手册
¶一、jQuery概述
¶1、jQuery介绍
什么是 jQuery ?
jQuery,顾名思义,也就是 JavaScript 和查询(Query),它就是辅助 JavaScript 开发的 js 类库。
jQuery 核心思想!!!
它的核心思想是 write less,do more(写得更少,做得更多),所以它实现了很多浏览器的兼容问题。
jQuery 流行程度
jQuery 现在已经成为最流行的 JavaScript 库,在世界前 10000 个访问最多的网站中,有超过 55%在使用jQuery。
jQuery 好处!!!
jQuery 是免费、开源的,jQuery 的语法设计可以使开发更加便捷,例如操作文档对象、选择 DOM 元素、制作动画效果、事件处理、使用 Ajax 以及其他功能
¶2、jQuery的引入
方式一:本地引入
1<script type="text/javascript" src="../script/jquery-3.6.0 ...
Java与数据库连接的纽带之JDBC使用总结
¶一、JDBC概述
¶1、对JDBC的理解
JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API)!
简单理解:JDBC,是SUN提供的一套 API,使用这套API可以实现对具体数据库的操作;不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。提供数据库驱动jar包。我们可以导入这些jar包进行编程。
如下图所示:
JDBC接口(API)包括两个层次:
面向应用的API:Java API,抽象接口,供应用程序开发人员使用
面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。
¶2、 Java中数据存储技术分类
在Java中,数据库存取技术可分为如下几类:
**JDBC**直接访问数据库
JDO (Java Data Object )技术
第三方O/R工具,如Hibernate, Mybatis 等
JDBC是java访问数据库的基石,JDO、Hibernate、MyBatis等只是 ...
再学MySql之使用大总结
¶一、DQL语言
DQL(Data Query Language):数据查询语言,用于查询!
¶1、基础查询
¶1.1、语法
查询列表可以是:表中的字段、常量值、表达式、函数
查询的结果是一个虚拟的表格
SELECT *代表查询该表全部字段
查询字符型和日期型的常量值必须用单引号引起来,数值型不需要
1SELECT 查询列表 FROM 表名;
¶1.2、别名
12SELECT xxx 别名 FROM 表名;SELECT xxx AS 别名 FROM 表名;
¶1.3、去重
1SELECT DISTINCT xxx FROM 表名;
¶1.4、关于+号
仅有运算符的功能!
select 数值+数值:直接运算
select 字符+数值:先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值:结果都为null
¶1.5、几个函数
contact(xxx,xxx,xxx ...):字符串拼接
ifnull(expr1, expr2):判断expr1是否为null,如果为null返回expr2,否则返回expr1
isnull( ...
再学Java之单例、模板方法、动静态代理设计模式
¶一、设计模式之单例设计模式
设计模式:
设计模式是在大量的实践中总结和理论化之后优的代码结构、编程风格、以及解决问题的思考方式。
常用设计模式 — 23种经典的设计模式 GOF
创建型模式,共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共11种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
单例设计模式:
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。
¶1、饿汉式实现
坏处:对象加载时间过长。
好处:饿汉式是线程安全的
123456789101112131415161718192021222324public class SingletonTest1 { public static void main(String[] args) ...
再学Java之StringBuffer、StringBuilder、枚举类、注解、集合和泛型
¶一、StringBuffer VS StringBuilder
¶1、String、StringBuffer、StringBuilder三者的对比
`String`:不可变的字符序列,底层使用`char[]`存储。
`StringBuffer`:可变的字符序列,**线程安全的,效率低**。底层使用`char[]`存储。
`StringBuilder`:可变的字符序列,**JDK5.0**新增的,**线程不安全的,效率高**。底层使用`char[]`存储。
因此,他们的效率高低依次为:StringBuilder > StringBuffer > String
注意: JDK8之后的版本使用的是byte[]存储!
¶2、使用建议
只要不是多线程问题,操作共享数据,都使用新增的StringBuilder!
¶3、StringBuffer、StringBuilder内存解析
二者在内存层面存储扩容方面几乎一致,这里以StringBuffer为例!
¶3.1、先来看一下String的存储
String底层使用private final存储!
12S ...
再学Java之面向对象与异常
这里仅记录我认为没有了解透彻的知识,并不很全面系统,仅用于自己的查漏补缺!不过,我相信我没写的大家都是了解清楚的!
¶一、面向对象学习的三条主线
Java类及类的成员:属性、方法、构造器;代码块、内部类
面向对象的大特征:封装性、继承性、多态性、(抽象性)
其它关键字:this、super、static、final、abstract、interface、package、import等
¶二、零零碎碎
¶1、可变个数形参
JDK 5.0新增的内容:
可变个数形参的格式:数据类型 ... 变量名
当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个,。。。
可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。
可变个数形参在方法的形参中,必须声明在末尾
可变个数形参在方法的形参中,最多只能声明一个可变形参。
¶2、方法重载
参数个数或者参数类型不同即可!
¶3、Eclipse的Junit单元测试
步骤:
选中当前工程 - 右键 ...
LeetCode刷题-130. 被围绕的区域
题目链接:130. 被围绕的区域
¶题解:
经典的逆向思维算法,Flood Fill
¶题目简述:
给定一个二维矩阵只包含O和X,找到没有被包围的O用X填充。
¶题解:
题目理解:
任何与边界的O相连的O都会被填充为X
任何与不与边界的O相连的O都不会被填充为X
逆向思维Flood Fill:
我们先将与边界上的O相连的O全部标记出来,即换一个字符例如#
此时除了X和#剩下的O就是需要被修改为X的了
只需一遍扫描即可,将O换为X,将#换为O
注意:vector为空的特判!
时间复杂度:每个点最多遍历两次,为O(n^2)
¶AC代码:
123456789101112131415161718192021222324252627282930313233class Solution {public: vector<vector<char>> board; int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; int n, m; void solve(vector<vector&l ...
LeetCode刷题-129. 求根到叶子节点数字之和
题目链接:129. 求根到叶子节点数字之和
¶题解:
简单递归求解二叉树问题!
¶题目简述:
给定一棵二叉树,求出所有从根节点到叶子节点构成的数的和!
¶题解:
简单DFS:
从根节点开始搜索
当前节点为空直接返回
当前节点的左右儿子都不存在时即为叶子节点,进行累加当前和后返回
搜索左子树和右子树,值为sum * 10 + val
时间复杂度:每个节点遍历一次,为O(n)
¶AC代码:
1234567891011121314151617181920212223242526/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int res; int sumNumbers(TreeNode* root) ...
LeetCode刷题-128. 最长连续序列
题目链接:128. 最长连续序列
¶题解:
¶题目简述:
给定一个无序序列,求最长连续序列长度!
要求时间复杂度为:O(n)
¶题解:
哈希:
先将所有数存到哈希表
对于连续序列,我们可以从一个数开始,每次加一进行判断是否存在即可!
为了保证不重复遍历,我们每次只枚举该连续区间的起始值即可,例如1 2 3 4,我们只枚举从1开始,而不枚举从2 3 4开始!即保证S.count(x) && !S.count(x - 1!
每次更新最大值即可,区间长度为y - x + 1
注意: 对于重复数字特别多的时候,上述做法会造成所有重复数字的重复枚举,时间复杂度增大,为了解决该问题,我们可以将枚举过的数字全部删掉,这样可以保证所有数字只枚举一次!
时间复杂度:所有数只枚举一次O(n)
¶AC代码:
1234567891011121314151617class Solution {public: int longestConsecutive(vector<int>& nums) { unordered_set<i ...