- 博客(28)
- 收藏
- 关注
原创 FreeMarker模板引擎
课程介绍了解模板引擎掌握FreeMarker常用语法在servlet中使用freeMarker什么是模板引擎数据 + 模板 = 结果模板引擎将数据与展现有效的解耦主流模板引擎JSPFreeMarkerBeetl : Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎, 而是新一代的模板引擎,它功能强大,性能良好,超过当前流行的模板引擎。而且还易学易用。FreeMarkerFreemarker 是免费开源的模板弓|擎技
2020-07-14 00:04:42 598
原创 EL表达式和JSTL标签
EL表达式EL(Expression Language)表达式语言,用于简化JSP的输出EL表达式的基本语法:${表达式}EL的作用域对象EL表达式内置四中作用域对象当我们忽略书写作用域对象时,EL则按作用域从小到大依次尝试获取如果这四个作用域都没又匹配到,则会输出空字符串作用域对象描述pageScope当前页面获取值requestScope从当前请求中获取值sessionScope从当前会话中获取值applicationScope从整个w
2020-07-13 23:59:04 813
原创 Java语法糖
for VS for-each优点: for-each 1从JDK5.0开始引入 for-each 语法更简洁 for-each 避免越界错误缺点: for 可以删除元素,for-each不可以删除/替换元素 for-each遍历的时候,是不知道当前元素的具体位置索引 for-each只能正向遍历,不能反向遍历 for-each不能同时遍历2个集合for和for-each性能接近。枚举类型枚举变量:变量的取值只在一个有限的集合内。enum Weekday { M
2020-06-29 00:07:40 1365
原创 SQL语言(三)数据库操纵语言
DML,英文叫做 Data Manipulation Language,数据操作语言,我们用它操作和数据库相关的记录,比如增加、删除、修改数据表中的记录。删除数据表中的记录我们只能删除整个元组,而不能只删除某些属性上的值。SQL用如下语句表示删除:delete from rwhere P;其中P代表一个谓词,r代表一个关系。例,从instructor关系中删除与Finance系教师相关的所有元组。delete from instructorwhere dept_name =‘Finance
2020-06-25 13:50:19 959
原创 SQL语言(二)数据库查询语言第一部分(SQL查询)
SQL查询的基本结构一、select子句注意:SQL不允许在属性名称中使用字符-,例如,使用dept_name代替dept-name。SQL不区分字母的大小写。因此,你可以使用大写字母或小写字母命名表、属性等。SQL允许在关系以及SQL表达式结果中出现重复的元组若要强行去除重复,可在select后加入关键词distinct。例,查询instructor关系中的所有系名,并去除重复select distinct dept_name from instructor;SQL也允许我们
2020-06-22 10:28:54 566
原创 SQL语言(一)数据库定义语言DDL
我们可以把 SQL 语言按照功能划分成以下的 4 个部分:DDL,英文叫做 Data Definition Language,也就是数据定义语言,它用来定义我们的数据库对象,可以创建,删除和修改数据库和表结构。DML,英文叫做 Data Manipulation Language,数据操作语言,我们用它操作和数据库相关的记录,比如增加、删除、修改数据表中的记录。DCL,英文叫做 Data Control Language,数据控制语言,我们用它来定义访问权限和安全级别。DQL,英文叫做 Data
2020-06-22 08:36:29 3160
原创 MyBatis入门
MyBatis介绍MyBatics是对持久化对象的操作自动转换为关系数据库的操作。也就是在关系型数据库和对象之间作一个映射。注:对象持久化就是将对象存储在可持久保存的存储介质上,例如主流的关系数据库中。MyBatis环境搭建需要引入Jar包:Mybatis的jar包mysql-connector-java.jar (mysql的JDBC驱动包)。配置SqlSessionFactory 的全局配置⽂件,⽂件名为conf。配置数据库的连接信息。注意: 该⽂件需要放在根目录下,即sr
2020-06-19 23:59:51 745
原创 面向对象分析与设计——建模工具UML
用例图(Use Case Diagrame):描述了人们希望如何使用一个系统,将相关用户、用户需要系统提供的服务以及系统需要用户提供的服务更清晰的显示出来,以便使系统用户更容易理解这些元素的用途,也便于开发人员最终实现这些元素。之所以说用例图至关重要,是由于用户并不关心系统的实现和内部结构,只关心产品所呈现出来的外部特征动态。而用例图恰好就是描述软件产品外部特性的视图,它从用户的角度而不是从开发者的角度来描述需求,分析产品的功能和动态行为。活动图(Activity Diagram):主要描述用户的那个业
2020-06-08 16:42:56 3036
原创 链表
链表VS数组数组简单易用,在实现上使用的是连续的内存空间,可以借助CPU的缓存机制,预读数组中的数据,所以访问效率更高。而链表在内存中并不是连续存储,所以对CPU缓存不友好,没办法有效预读。数组的缺点是大小固定,一经声明就要占用整块连续内存空间。如果声明的数组过大,系统可能没有足够的连续内存空间分配给它,导致“内存不足(out ofmemory)”。如果声明的数组过小,则可能出现不够用的情况。这时只能再申请一个更大的内存空间,把原数组拷贝进去,非常费时。链表本身没有大小的限制,天然地支持动态扩容,我觉
2020-06-04 15:27:31 207
原创 数组
它用一组连续的内存空间,来存储一组具有相同类型的数据。数组支持随机访问:a[i]_address = base_address + i * data_type_size,根据下标随机访问的时间复杂度为O(1)。容器能否完全替代数组?ArrayList最大的优势就是可以将很多数组操作的细节封装起来。比如前面提到的数组插入、删除数据时需要搬移其他数据等。另外,它还有一个优势,就是支持动态扩容。因为扩容操作涉及内存申请和数据搬移,是比较耗时的。所以,如果事先能确定需要存储的数据大小,最好在创建Ar.
2020-06-01 14:26:12 115
原创 面向对象分析与设计——建模工具UML:用例图
为什么要建模?因为不能完整地理解一个复杂的系统,所以要对它建模建模是为了能够更好地理解正在开发的系统建模的四个目的:帮助我们按照需要对系统进行可视化允许我们详细说明系统的结构和行为给出了一个指导我们构造系统的模板对我们所做出的决策进行文档化UML是啥?uml:统一建模语言。事物与事物之间必定存在关系,将这些事物和关系结合在一起,就构成了图。最重要的图有以下几种:用例图和活动图是用来捕获需求的。类图是用来做设计的。顺序图和通信图是用来验证类图设计的对不对。状态图
2020-05-24 11:40:04 3582
原创 Java集合
集合Java标准库自带的java.util包提供了集合类:Collection,它是除Map外所有其他集合类的根接口。Java的java.util包主要提供了以下三种类型的集合:List:一种有序列表的集合,例如,按索引排列的Student的List;Set:一种保证没有重复元素的集合,例如,所有无重复名称的Student的Set;Map:一种通过键值(key-value)查找的映射表集合,例如,根据Student的name查找对应Student的Map。最后,Java访问集合总是通过统一的方
2020-05-21 15:23:29 156
原创 Java多线程(三)线程管理
wait()和notifyAll()synchronized解决了多线程竞争的问题,但是synchronized并没有解决多线程协调的问题。多线程协调运行的原则就是:当条件不满足时,线程进入等待状态;当条件满足时,线程被唤醒,继续执行任务。我们可以使用wait()和notifyAll()解决多线程协调运行:wait()使线程进入等待状态;notifyAll()唤醒当前锁对象的所有等待线程;wait()和notifyAll()需要使用在锁对象上。在synchronized修饰的方法中,就是th
2020-05-17 20:47:04 118
原创 Java多线程(二)Java多线程信息共享
Java通过共享变量在多个线程中共享消息:静态变量同一个Runnable类的成员变量public class ThreadDemo0{ public static void main(String [] args) { new TestThread0().start(); new TestThread0().start(); new TestThread0().start(); new TestThread0().start(); }}class TestThread0
2020-05-17 15:41:11 159
原创 Java多线程(一)创建和启动
Java多线程创建创建Java多线程有两种方式:java.lang.Thread– 线程继承Thread类,实现run方法。java.lang.Runnable接口– 线程实现Runnable接口,实现run方法。public class Thread1 extends Thread{ public void run() { System.out.println("hello"); } public static void main(String[] a) { new Thre
2020-05-17 14:56:06 132
原创 文件IO
InputStreamInputStream并不是一个接口,而是一个抽象类,它是所有输入流的超类。这个抽象类定义的一个最重要的方法就是int read(),签名如下:public abstract int read() throws IOException;这个方法会读取输入流的下一个字节,并返回字节表示的int值(0~255)。如果已读到末尾,返回-1表示不能继续读取了。...
2020-05-15 19:18:26 120
原创 File对象
创建File对象public class Main { public static void main(String[] args) { //构造一个File对象需要传入一个路径 File f = new File("C:\\Windows\\notepad.exe"); System.out.println(f); }}注意:Windows平台使用\作为路径分隔符,在Java字符串中需要用\\表示一个\。Linux平台使用/作为路径分隔符。
2020-05-15 15:33:35 506
原创 static、final和常量设计
static修饰符静态变量static变量只依赖于类存在(通过类即可访问),不依赖于对象实例存在。所有实例共享该字段。静态方法调用静态方法不需要实例,通过类名就可以调用。在静态方法中,只能使用静态变量,不能使用非静态变量,也不能使用this。静态态方法常用于工具类和辅助方法。static块这段代码只运行一次,只在类第一次被加载时调用。执行顺序:static块 > 匿名块 > 构造函数。final修饰符final的类:不能被继承。final方法:父类中如果
2020-05-14 12:11:24 179
转载 equals()和hashcode()
== 和 equals的区别==被我们常用来比较基本数据类型的值,对于比较对象时我们一般是使用equals方法的,我们知道所有的类都是继承自Object类的。其实在Object中的equals方法就是使用==来比较的。也就是说==也是可以用来比较对象的,正如Object类中一样。但是如果用双等号比较对象,比较的是对象在内存中的地址,而不是值。所以一般在我们的业务场景中,例如:public class House { private int houseShape;// 房子户型 priv
2020-05-10 18:42:30 96
原创 JSP
JSP处理JSP基本语法声明语法:<%!变量声明 %>程序脚本: <% 代码片段%>内容输出表达式:<%= 表达式 %>JSP注释: <%-- 这里是Jsp注释--%>JSP指令Jsp内置对象这六个内置对象是跟Servlet的相对应的。这三个是Jsp独创的。...
2020-05-10 15:32:38 118
原创 Servlet(2)
Cookie和Session会话:所谓的会话过程就是指从打开浏览器到关闭浏览器的过程。Cookie: 会话数据保存在浏览器客户端Seeion: 会话数据保存在服务器端。Cookied的工作原理:当浏览器第一次向服务器发起请求时,服务器会向浏览器发送一个Cookie,当浏览器再次发起请求时,会带上Cookie一起发送给服务器,为了让服务器识别这是同一个会话。Cookie的有效期?默认会话结束就失效。(这种被称为会话Cookie)。可以setMaxAge设置Cookie有效期。Coo
2020-05-10 14:39:08 125
原创 Servlet(1)
Servlet简介Servlet容器:用来管理Servlet。对servlet进行创建,执行,销毁。一个Servlet就是一个Java类,并提供基于请求-响应模式的Web服务。Servlet生命周期Servlet配置参数ServletConfig可以将这些参数放在ServletConfig中,然后在Servlet中通过ServletConfig对象使用ServletConfig以Servlet为单位,配置在Servlet中。Servlet之间如何共享配置信息呢(ServletCnte
2020-05-10 14:04:31 105
原创 内部类
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。1.成员内部类成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。class Circle { private double radius = 0; public static int count =1; public Circle(double radius) {
2020-05-09 13:31:27 117
原创 Java多线程
创建新线程public class Main { public static void main(String[] args) { Thread t = new Thread(() -> { System.out.println("start new thread!"); }); t.start(); // 启动新线程 }}Java用Thread对象表示一个线程,通过调用start()启动一个新线程;线
2020-05-09 13:27:03 77
原创 Java的反射
反射(Reflection)反射是框架设计的灵魂一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.注意:这里的Class
2020-05-09 13:22:22 248
原创 面向对象基础
1.方法可变参数用类型...定义,可变参数相当于数组类型:class Group { private String[] names; public void setNames(String... names) { this.names = names; }}2.构造方法如果我们自定义了一个构造方法,那么,编译器就不再自动创建默认构造方法可以定义多个构造方法,编译器根据参数自动判断可以在一个构造方法内部调用另一个构造方法,便于代码复用3.方
2020-05-09 13:21:28 127
原创 Java快速入门
Java快速入门Java数据类型基本数据类型整数类型:byte,short,int,long浮点数类型:float,double字符类型:char布尔类型:boolean引用数据类型字符串类型 String+连接字符串和其他数据类型从Java 13开始,字符串可以用"""..."""表示多行字符串数组类型 Array数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false;数组一旦创建后,大小就不可改变。流程控制输入和输出(print和
2020-05-09 13:17:45 122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人