- 博客(67)
- 资源 (1)
- 收藏
- 关注
原创 Tomcat-载入器
先说说Java的类载入器:JVM使用三种类载入器来载入所需要的类:引导类载入器(bootstrap class loader)扩展类载入器(extension class loader)系统类载入器(system class loader)系统类载入器位于最下层,引导类载入器位于最上层这三种之间是父子继承关系每当需要载如一个类的时候,会首先调用系统类载入器,但是它不会立
2016-12-23 17:16:11 412
原创 Catalina-Container接口
对于Catalina中的servlet容器,首先需要注意的是4中类型的容器,分别对应不用概念层次Engine:表示整个Catalina servlet引擎Host:表示包含一个或多个Context容器的虚拟主机Context:表示一个Web应用程序。一个Context可以有多个WrapperWrapper:表示一个独立的Servlet管道任务管道包含该Servlet容器
2016-12-23 08:58:50 767
转载 JAVA设计模式之外观模式
医院的例子现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。 首先病人必须先挂号,然后门诊。如果
2016-12-22 13:49:23 468
原创 Java 表单的重复提交
重复提交的情况:a.在表单提交到一个Servlet,而Servlet有通过请求转发的方式响应了一个JSP,此时地址栏还保留着Servlet的那个路径在响应页面点击刷新b.在响应页面没有到达时重复点击提交按钮c.在点击返回然后再次点击提交如何避免表单的重复提交把标记放在session中》在原表单页面生成一个随机值》在原表单页面把随机值放入到session属性中》在
2016-12-21 11:31:27 788
原创 JavaWEB绝对路径
相对于当前WEB应用的根路径的路径,即任何的路径都必须带上contextPath(就是加上项目名)如何编写绝对路径JavaWEB开发中的/到底代表什么1)当前WEB应用的根路径a.请求转发时request.getRequestDispatcher("/path/XXXX.jsp").forward(request,response);b.web.xml文件中映射的路径
2016-12-21 10:02:56 331
原创 Http session
session在WEB环境下是指一类用来在客户端与服务器端之间保持状态的解决方案有时候Session也用来指这种解决方案的存储结构Session机制采用的是在服务器端保持HTTP状态信息的方案服务器使用一种散列表的结构(也可能就是使用散列表)来保存信息服务器响应(set-cookie)JESSIONID给客户端session通过SessionID来区分不同的客户,sessi
2016-12-20 16:45:13 208
原创 Http Cookie
HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的浏览器的每一次请求都是完全独立的即使HTTP1.1支持持续连接,但当用户有一段时间没有提交请求,连接也会关闭作为web服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态WEB应用中的会话是指一个客户端浏览器与WEB服务器中间发生的一系列请求和响应过程WEB应用状态的会话状态
2016-12-20 16:33:15 531
原创 Servlet ServletRequest
使用GET传递参数在浏览器地址中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式一定为GET如果HTTP请求消息的请求方式为GET:那么传递参数的方式为URL后拼接?键值对使用GET方式传送数据量一本限制在1KB以下使用POST传递参数主要用于向WEB服务器程序提交Form表单数据POST方式将各个表单字段元素及其数据作为HT
2016-12-19 18:50:52 258
原创 ServletConfig对象
ServletConfig:封装了Servlet的配置信息,并且可以获取ServletContext对象获取初始化参数:getInitParameter(String name)获取指定参数名的初始化参数getInitParameterNames()获取参数名组成的Enumeration对象getServletContext()getServletName()获
2016-12-19 15:50:53 299
原创 初识Servlet容器-Tomcat
Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理它们的共享数据Servlet容器也称为JavaWeb应用容器,或者Servlet/JSP容器流行的Servlet容器包括:Tomcat(足矣)WeblogicTomcattomcat结构目录bin文件夹------存放启动和关闭Tomcat的脚本文件conf文件
2016-12-19 14:32:30 243
原创 初识Servlet
Java Servlet 是运行在 Web 服务器或应用服务器上的程序它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。Servlet调用图Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如
2016-12-19 09:37:57 150
原创 Git命令详解(下)
GIT merge:git merge branchname 合并分支(会自动执行一次commit操作)GIT conflict:重新git addgit commit -i -m "备注" filenameGIT rm-branch:git branch -m branch1 branch2 将branch1分支名重命名为branch2GIT stash:git stash save 将工作区的...
2016-12-16 11:48:55 288
原创 Git命令详解(上)
工作区,暂存区,本地代码库:工作区:编辑代码的地方暂存区:执行git add 1.txt 那么就是将1.txt文件放入暂存区本地代码库:执行git commit -m "备注" 将暂存区中的文件放入本地代码库GIT help:git help查看常用命令git help -a 查看所有的命令git help 命令名 查看具体命令的使用方法GIT config
2016-12-15 18:56:52 555
转载 (转)java线程 Exchanger
import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class ExchangerTest { private
2016-12-15 16:01:12 225
原创 java线程 semaphore
import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;public class SemaphoreTest { public static void m
2016-12-15 15:28:20 198
原创 java线程 CyclicBarrier
import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.E
2016-12-15 10:05:59 193
原创 java线程 CountDownLatch
CountDownLatch被用来同步一个或多个任务,强制它们等待由其他任务执行的一组操作完成。CountDownLatch的方法:1.构造方法中有初始值表示需要等待的事件的数量2.await()方法,被等待全部时间中介的线程调用3.countDown()方法,事件在结束执行后调用 当创建 CountDownLatch 对象时,对象使用构造函数的参数来初始化内部计数器。
2016-12-14 16:47:58 156
原创 java线程死锁
某个任务在等待另一个任务,而后者又在等待别的任务,这样一直等下去,直到这个链条上的任务又在等待第一个任务释放锁,这得到了一个任务之间相互等待的连续循环,没有哪个线程能继续,这被称之为“死锁”。public class Philosopher implements Runnable { public static class Chopstick { private boolea
2016-12-14 15:18:30 198
原创 MyBatis #与$
select * from user where name = "Jack"; select * from user where name = #{name}; select * from user where name = ?; //解析select * from user where name = ${name}; select * from user
2016-12-14 11:47:34 250
转载 MyBatis的二级缓存机制
二级缓存的工作模式如上图所示,当开一个会话时,一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键就是对这个Executor对象做文章。如果用户配置了"cacheEnabled=true",那么MyBatis在为SqlSession对象创建Executor对象时,会对Executor对象加上一个装饰者:CachingE
2016-12-14 10:29:42 298
原创 MyBatis浅谈缓存机制
一级缓存:1. 只能在【只有单表操作】的表上使用缓存不只是要保证这个表在整个系统中只有单表操作,而且和该表有关的全部操作必须全部在一个namespace下。2. 在可以保证查询远远大于insert,update,delete操作的情况下使用缓存避免使用二级缓存:1.缓存是以namespace为单位的,不同namespace下的操作互不影响。2.insert,update
2016-12-14 09:24:39 771
原创 MyBatis的运行原理
构建SqlSessionFactory的过程1.通过解析配置的XML文件,读出配置参数,并将读取的数据存入Configuration类中2.使用Configuration对象去创建SqlSessionFactory,SqlSessionFactory是一个接口(使用DefaultSqlSessionFactory)构建Configuration作用:1.读入配置文件(包括基
2016-12-13 17:38:42 993
原创 MyBatis 动态SQL trim
select * from user 0"> AND name=#{name} 0"> AND gender=#{gender}假如说name和gender的值都不为null的话打印的SQL为:select * from user where name = 'xx'and gender = 'xx'prefix:前缀prefixoverride:去掉第一个and或者是
2016-12-13 15:38:53 352
原创 insert元素主键回填与自定义规则
<insert id="create" useGeneratedKeys="true" keyProperty="id" parameterType="user_entity"> INSERT INTO ufis.user (creater,telephone,username,real_name,password) VALUES (#{creater,jdbcType=C
2016-12-13 11:18:01 2460 2
原创 MyBatis传递参数的3种方式
第一种map SELECT id,role_name,note FROM t_role WHERE role_name like concat ('%',#{roleName},'%') and note like concat('%',#{note},'%')public List findA(Map params);//接口HashMap paramsMap = new H
2016-12-13 10:43:13 22142
原创 MyBatis config.xml标签
或者使用properties配置文件 读取顺序优先级次之 读取顺序参数传递优先级最低 --> <!-- 自定义别名 --> <!-- DB_VENDOR是启动MyBatis内部注册的策略器, 首先MyBatis会将你的
2016-12-13 10:11:29 332
原创 java 实现Bag(单链表)
import java.util.Iterator;import java.util.NoSuchElementException;public class Bag implements Iterable { private static final int DEFAULT_CAPACITY = 10; private int size; private I[] theItems;
2016-12-09 16:53:24 4687
原创 构造器调用顺序
public class Demo1 extends portableLunch { private Bread b = new Bread(); private Cheese c = new Cheese(); private Lettuce le = new Lettuce(); private portableLunch aa = new portableLunch(); pub
2016-12-09 14:56:19 321
原创 多态
如果某个方法是静态的,它的行为就不具有多态性public class test{ public static void main(String[] args) { superST sst = new sub(); System.out.println(sst.st());//输出super st System.out.println(sst.dt());//输出sub dt }
2016-12-09 13:50:11 190
原创 abstract不可以和哪些关键字共存
private:abstract是表明希望被覆盖的,但是private,子类看不到。static:如果是static就需要创建对象但abstract不需要创建对象(没有意义)final:final表示不能被子类覆盖abstract表名希望被覆盖
2016-12-09 11:29:50 4997 1
原创 成员函数与静态函数
成员函数编译看等号左边,运行看等号右边(即实际变量)public class Demo { public static void main(String[] args) { fu f = new zi(); System.out.println(f.num);//编译报错 }}class fu { //int num = 3;}class zi extends
2016-12-09 11:12:25 211
原创 继承与初始化
在java运行Car类的时候,第一件事就是师徒访问mai()方法(一个static方法),于是加载器开始启动并找出Car.class类的编译代码(在名为Car.class的文件中),在对他惊醒加载的过程中,编译器注意到它有一个基类,于是继续进行加载,不管你是发打算产生一个该基类的对象,这都要发生。当必要的类都加载完毕,对象就可以被创建了。首先,对象中所有的基本类型都会被
2016-12-08 18:04:45 204
原创 final类
public class finalClass {}class B {}final class T { int i = 7; int j = 1; B b = new B();}// class G extends T {//// }当final修饰整个类时,说明了不打算继承该类final类中所有的方法都隐式指定为final, 在final类中可以给方法添
2016-12-08 17:12:48 185
原创 final方法
class WithFinals { private final void f() { System.out.println("WithFinals.f()"); } // 类中所有的private方法都隐式指定是final private void g() { System.out.println("WithFinals.g()"); }}class Overridin
2016-12-08 16:17:10 379
原创 final参数
class Demo { public void spin() { }}public class FinalArguments { void with(final Demo d) { d = new Demo();//报错 因为d是final } void without(Demo d) { d = new Demo(); d.spin(); } int g
2016-12-08 15:51:33 205
原创 final数据
import java.util.Random;public class FinalData { static class Value { int i; public Value(int i) { this.i = i; } } private static Random rand = new Random(47); private String id; pu
2016-12-08 15:15:54 193
原创 java 构造器
public class Chess extends BoardGame { Chess() { super(11); System.out.println("Chess constructor"); } public static void main(String[] args) { Chess x = new Chess(); }}class BoardGame
2016-12-08 11:15:23 142
原创 MyBatis if else
相当于if else choose> when test=""> //... when> otherwise> //... otherwise> choose>
2016-12-08 11:04:58 515
原创 resultType与resultMap
resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。如果没有查询结果的特殊要求建议使用resultType。resultMap:需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的属性中。result
2016-12-07 19:24:01 188
原创 myBatis常用标签
_parameter_parameter 表示当前传入的参数,如果查询的时候传入的参数只有一个,则使用 _parameterE getById(Integer id); SELECT * FROM 库名.表名 WHERE id = #{_parameter} if判断 SELECT id, name, phone, email FROM users WHE
2016-12-07 18:09:23 1033
redis可视化工具
2018-04-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人