会话控制
会话控制笔记1、核心代码 1 2 HttpSession session = request.getSession(); session.setAttribute("属性名","属性值"); 2、Cookie的工作机制 Cookie信息是在服务器创建的 Cookie在服务器端被放在响应数据中返回给浏览器 浏览器接收到Cookie后,会把Cookie保存起来 浏览器保存了Cookie后每一个请求都会把路径匹配的Cookie带上 3、Cookie的时效性 会话级Cookie:默认情况 保存在浏览器的内存里,在浏览器关闭时会被释放 持久化Cookie: 服务器端调用Cookie的setMaxAge(以秒为单位的存活时间)方法 存活时间正数:还能够存活的秒数 存活时间为零:告诉浏览器立即删除这个Cookie 存活时间为负:告诉浏览器这个Cookie是一个会话级Cookie 服务器把这个Cookie返回给浏览器时就等于通知浏览器:这个Cookie还能存在多长时间 4、Cookie的路径 每个Cookie都有domai...
Thymeleaf
Thymeleaf笔记从三层架构到MVC MVC理念和三层架构并不矛盾,反而是三层架构的延伸 MVC专指表述层的设计理念 MVC理念的核心思想:解耦 从业务功能和三层架构角度看项目网格 Thymeleaf搭建环境导入jar包 attoparser-2.0.5.RELEASE.jar javassist-3.20.0-GA.jar log4j-1.2.15.jar ognl-3.1.26.jar slf4j-api-1.7.25.jar slf4j-log4j12-1.7.25.jar thymeleaf-3.0.12.RELEASE.jar unbescape-1.1.6.RELEASE.jar 配置web.xml 1 2 3 4 5 6 7 8 9 <!-- 在上下文参数中配置视图前缀和视图后缀 --> <context-param> <param-name>view-prefix</param-name> <param-value>/WEB-INF/view/</param-...
Listener
监听器笔记1、观察者模式 观察者监控被观察者的行为 被观察者做出相应的动作会触发事件 当观察者发现被观察者触发事件,就会调用事先准备好的方法 2、监听器分类 监听域对象本身 ServletContext HttpSession HttpServletRequest 监听域对象的属性域 应用域 会话域 请求域 监听存入Session域的对象本身 对象是否存入会话域 对象是否和Session一起被钝化到了硬盘上 3、后续用到的监听器名称:ServletContextListener 方法: 方法名 作用 contextInitialized(ServletContextEvent sce) ServletContext创建时调用 contextDestroyed(ServletContextEvent sce) ServletContext销毁时调用 将来在SpringMVC中会用到:ContextLoaderListener,这个监听器就是实现了ServletContextListener接口。
Filter
过滤器笔记1、过滤器三要素 拦截:一个请求必须先把它拦住,才能做后续处理 过滤:预设的检查条件,满足条件才可以放行 放行:对于满足要求的请求,放它过去,让它原本要访问什么资源就继续还是访问那个资源 2、过滤器生命周期 生命周期环节 调用的方法 时机 次数 创建对象 无参构造器 默认:Web应用启动时 一次 初始化 init(FilterConfig filterConfig) 创建对象后 一次 处理请求 doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 接收到请求后 多次 清理操作 destroy() Web应用卸载之前 一次 3、拦截请求时的匹配规则 精确匹配 模糊匹配★ 前杠后星:/user/* 前星后缀:*.html 根据Servlet名称匹配 4、Filter链 概念:拦截同一资源的多个Filter 执行顺序:由web.xml中filter-mapping配置的顺序决定 chain.doFilter(req,res...
JDBC核心技术
[TOC] JDBC核心技术 第1章:JDBC概述1.1 数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。 持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。 1.2 Java中的数据存储技术 在Java中,数据库存取技术可分为如下几类: JDBC直接访问数据库 JDO (Java Data Object )技术 第三方O/R工具,如Hibernate, Mybatis 等 JDBC是java访问数据库的基石,JDO、Hibernate、MyBatis等只是更好的封装了JDBC。 1.3 JDBC介绍 JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)...
Java运行期优化
运行期优化 我们知道,Java 是解释执行的,可是解释执行毕竟还是有点慢的,这也使得 Java 一直被认为是效率低下的语言……,不过随着即时编译技术的发展,Java 的运行速度得到了很大的提升,在本篇文章中,我们将会对 Java 的运行期优化,也就是即时编译 (Just In Time, JIT) 时进行的优化进行详细的讲解,我们先来看看什么是即时编译。 运行期优化 即时编译 HotSpot 虚拟机内的即时编译器运作过程 为什么要使用解释器与编译器并存的架构? 为什么虚拟机要实现两个不同的 JIT 编译器? 什么是虚拟机的分层编译? 如何判断热点代码,触发编译? 什么是热点代码? 什么是 “多次” 执行? HotSpot 中每个方法的 2 个计数器 HotSpot 热点代码探测流程 热点代码编译的过程? 经典优化技术介绍 公共子表达式消除【语言无关】 数组范围检查消除【语言相关】 方法内联【最重要】 逃逸分析【最前沿】 基本行为 对于不会逃逸到方法或线程外的对象能进行优化 虚拟机参数 一个优化的例子 即时编译什么是即时编译? 当虚拟机发现某个方法或某段代...
虚拟机调优案例分析
虚拟机调优案例分析 虚拟机调优案例分析 高性能硬件上的程序部署策略 服务系统经常出现卡顿(Full GC 时间太长) 除了 Java 堆和永久代之外,会占用较多内存的区域 从 GC 调优角度解决新生代存活大量对象问题(Minor GC 时间太长) 高性能硬件上的程序部署策略 补充:64 位虚拟机 在 Java EE 方面,企业级应用经常需要使用超过 4GB 的内存,此时,32 位虚拟机将无法满足需求,可是 64 位虚拟机虽然可以设置更大的内存,却存在以下缺点: 内存问题: 由于指针膨胀和各种数据类型对齐补白的原因,运行于 64 位系统上的 Java 应用程序需要消耗更多的内存,通常要比 32 位系统额外增加 10% ~ 30% 的内存消耗。 性能问题: 64 位虚拟机的运行速度在各个测试项中几乎全面落后于 32 位虚拟机,两者大概有 15% 左右的性能差距。 服务系统经常出现卡顿(Full GC 时间太长)首先 jstat -gcutil 观察 GC 的耗时,jstat -gccapacity 检查内存用量(也可以加上 -verbose:gc 参数获取 GC 的详细...
JVM常见参数设置
JVM 常见参数设置 JVM 常见参数设置 内存设置 参数 设置经验 收集器设置 参数 内存设置参数 -Xms:初始堆大小,JVM 启动的时候,给定堆空间大小。 -Xmx:最大堆大小,如果初始堆空间不足的时候,最大可以扩展到多少。 -Xmn:设置年轻代大小。整个堆大小 = 年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为 64M,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun 官方推荐配置为整个堆的 3/8。 -Xss: 设置每个线程的 Java 栈大小。JDK 5 后每个线程 Java 栈大小为 1M。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在 3000~5000 左右。 -XX:NewRatio=n:设置年轻代和年老代的比值。如为 3,表示年轻代与年老代比值为 1:3。 -XX:MaxTenuringThreshold:设置垃圾最大年龄。如果设置为 0 的话,则年轻代对象不经过 Survivor 区,直接进入年老代。对于年老代比较多的应用(即 ...
常用虚拟机性能监控工具
常用虚拟机性能监控工具 常用虚拟机性能监控工具 JDK 命令行工具 补充:ps 命令 (Linux) JDK 命令行工具 其中的重中之重是 jstat 命令!而它最常用的参数就是 -gcutil,使用格式如下: 1 jstat -gcutil [pid] [intervel] [count] 输出如下: S0:堆上 Survivor space 0 区已使用空间的百分比 S1:堆上 Survivor space 1 区已使用空间的百分比 E:堆上 Eden 区已使用空间的百分比 O:堆上 Old space 区已使用空间的百分比 P:堆上 Perm space 区已使用空间的百分比 YGC:从程序启动到采样时发生的 Minor GC 次数 YGCT:从程序启动到采样时 Minor GC 所用的时间 FGC:从程序启动到采样时发生的 Full GC 次数 FGCT:从程序启动到采样时 Full GC 所用的时间 GCT:从程序启动到采样时 GC 的总时间 补充:ps 命令 (Linux)对于 jps 命令,其实没必要使用,一般使用 Linux 里的 p...
虚拟机字节码执行引擎_02
基于栈的字节码解释执行引擎这个栈,就是栈帧中的操作数栈。 解释执行先通过 javac 将代码编译成字节码,虚拟机再通过加载字节码文件,解释执行字节码文件生成机器码,解释执行的流程如下: 1 词法分析 -> 语法分析 -> 形成抽象语法树 -> 遍历语法树生成线性字节码指令流 指令集分类基于栈的指令集 优点: 可移植:寄存器由硬件直接提供,程序如果直接依赖这些硬件寄存器,会不可避免的受到硬件的约束; 代码更紧凑:字节码中每个字节对应一条指令,多地址指令集中还需要存放参数; 编译器实现更简单:不需要考虑空间分配问题,所需的空间都在栈上操作。 缺点: 执行速度稍慢 完成相同的功能,需要更多的指令,因为出入栈本身就产生相当多的指令; 频繁的栈访问导致频繁的内存访问,对于处理器而言,内存是执行速度的瓶颈。 示例: 两数相加 1 2 3 4 iconst_1 // 把常量1入栈 iconst_1 iadd // 把栈顶两元素出栈相加,结果入栈 istore_0 // 把栈顶值存入第0个Slot中 基于寄存...