自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jack_Zheng的博客

博客搬家了: www.cfad.tech

  • 博客(53)
  • 资源 (2)
  • 收藏
  • 关注

原创 tomcat源码解读六 tomcat中的session生命历程

session的作用是在一次会话中(从打开浏览器到关闭浏览器同当前服务器的交流)当客户端第一次请求session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象,当浏览器下次(session继续有效时)请求别的资源的时候,浏览器会sessionID放置到请求头中,服务器接收到请求后就得到该请求的sessionID,服务器根

2017-12-02 23:59:13 638

原创 tomcat源码解读五 Tomcat中Request的生命历程

Request在tomcat中是一个非常核心的的实例,下面以NIO为例来解读一下在各个时期下的状态(其实在Tomcat的几种模式中到了这里之后的处理都是差不多的)1.1 创建coyote/Request     这个request并不是我们最终在servlet中使用的Request,它是tomcat内部处理请求的一种有效方法,其创建过程是在接收到客户请求处理套接字构建Processor具体实现类的构

2017-12-02 23:53:06 1076

原创 tomcat源码解读四 tomcat中的processer

Processor是一个接口,针对于不同协议下具有不同的具体实现类,其实现类的具体功能是处理http请求,主要是对协议进行解析,状态处理以及响应。然后起一个中间作用转发到 Adater,下面是其类的关系图     其实现类中我们常用的http协议,所以一般是左边的部分,用红线标注1.1 循环队列protected static class RecycledProcessors<P extends P

2017-12-02 23:37:03 823

原创 tomcat源码解读三(2) tomcat中JMX的源码分析

在这里我是将tomcat中的jmx给拆分出来进行单独分析,希望通过此种方式能够尽可能的出现更多的问题,以便对其有更多的了解,首先需要声明的是tomcat的JMX是在jsvase原有的基础上做了一些复用,这就必须了解一些JMX的实现过程1.1.1 tomcat中JMX的UML图 1.1.2 启动代码解析      注意:本人是在剥离下来的代码上分析的,跟源代码可能有所出入,但不会太大,主要

2017-12-02 21:49:03 572

原创 tomcat源码解读三(1) tomcat的jmx管理

JMX即Java 管理扩展(Java Management Extensions,JMX)用来管理检测 Java 程序(同时 JMX 也在 J2EE 1.4 中被发布)它的作用是可以在程序运行的时候对其进行动态处理,调用相应方法来进行对指定属性值进行修改,在下面我将以代码结合jconsole进行分析(注意:在实际的程序管理过程中并不支持使用jconsole,因为它是一个java的客户端)源代码在下一

2017-12-02 19:19:51 414

原创 tomcat源码解读二 tomcat的生命周期

1    生命周期1.1    观察者模型tomcat生命周期采用了观察者模式,所以在介绍生命周期的时候不得不介绍观察者模式观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新观察者模式:   根据UML图可以看出所有被观察的对象Observer的实现类(可以有多个具体实现类)被添加到观察者Subject的实

2017-11-13 10:32:29 343

原创 tomcat源码解读一 Digester的解析方式

1    DigesterDigester在tomcat中的作用是对conf下的server.xml文件进行实例化,其是从Catalian这个组件开始,创建Digester实例,再添加对应的规则,然后将其实例化,通过setServer方法,将其实例话的对象作为当前Catalian实例的句柄。这样就实现了对象句柄之间的关联引用,从而实现整个平台的递进启动。 1.1    UML类图

2017-11-13 10:26:03 1364

原创 mac操作技巧

1清除launchpad界面残留图标在launchpad界面:第一步:长按快捷键control+option,图标会抖动第二步:单击删除图标2显示finder左侧边栏在finder 中View>Show Side Bar快捷键option+command+s

2017-08-22 23:22:47 273

原创 tomcat请求处理分析(六)servlet的处理过程

1.1.1.1  servlet的解析过程servlet的解析分为两步实现,第一个是匹配到对应的Wrapper,第二个是加载对应的servlet并进行数据,这些数据是怎么到界面的,response.getWrite()获取对应的流,然后写入这个流中,这个流中就有上文的outputBuffer。匹配到对应Wrapper       在上文中我们曾经走到过了doRun方法,现在就直接从

2017-08-19 00:05:34 1008

原创 tomcat请求处理分析(五) 请求到响应流

1.1.1.1  请求到响应界面流请求处理的过程主要是将所有的东西解析成流,转化成对应的http报文,所以在这里我先不关注servlet因为它最终也就是解析成流里面的数据processKey里面最终执行的是processSocket,它是线从缓存中获取对应的线程池,没有的话就创建一个,然后进行执行protected boolean processSocket(KeyAttachment

2017-08-19 00:02:57 1513

原创 tomcat请求处理分析(四) 监听请求轮询处理

1.1.1.1  startInternal方法这个方法是核心的启动方法,目前理解主要做了两件事情,第一件是创建轮询线程,即具体的读取线程,它是进行具体的处理,第二个是创建创建监听请求线程,它是等待请求,然后交给轮训进行处理。public void startInternal()throws Exception {    if (!running) {        run

2017-08-19 00:01:21 1358

原创 tomcat请求处理分析(三) 绑定本地端口监听请求

1.1.1.1  bind方法   注意:这个bind可能在load的过程就已经加载,这里只是验证   NioEndpoint就是使用Java中的NIO技术,来实行对Socket的处理。它主要包含两个部业务处理部分:Poller线程组和Acceptor线程组。1.1.1.1.1     解析过程   首先我们应该知道其bind方法做了一些什么操作,代码如下:public voi

2017-08-19 00:00:10 1701

原创 tomcat请求处理分析(二) 启动mapperListener

1.1.1启动mapperListener     这个方法的核心就是注册Host的   public void startInternal()throws LifecycleException{    setState(LifecycleState.STARTING);    //获取当前service的container,其实也就是engine    @Supp

2017-08-18 23:56:38 1195

原创 tomcat请求处理分析(一) 启动container实例

1.1.1  启动container实例其主要是进行了生命周期中一系列的操作之后调用StandardEngine中的 startInternal方法,不难看出其调用其父类的startInternal方法, 其父类是ContainerBase.java protected synchronized void startInternal()throws LifecycleExcepti

2017-08-18 23:52:14 921

原创 activiti学习笔记(六) 监听器

activiti全局监听器全局监听器主要使用的场景就是监控这个流程的启动和结束。流程开始的时候可以监控,流程结束的时候也可以监控监听器的接口public interface ActivitiEventListener { /**当时间被执行时调用该方法*/ void onEvent(ActivitiEvent event); /** * @author 郑小康

2017-08-06 23:38:11 2098

原创 activiti学习笔记(五) 流程部署

activiti流程部署activit部署方法api    activiti共有六种部署方式,最终实现都是DeploymentEntityImpl的addResource方法 public interface DeploymentBuilder { //根据流进行部署,获取bpmn文件的流进行部署,resourceName是资源名可以自定义 DeploymentBuilder

2017-08-06 14:04:26 4330 1

原创 activiti学习笔记(四) 配置器

activiti配置器activiti配置器的作用       一般在构建流程实例的时候, 会进行初始化,配置器就是可以在获取了流程配置实例,以及初始化之后可以进行一些额外的配置activiti配置器的机制allConfigurators集合添加       在ProcessEngineConfigurationImpl这个类中调用init方法中initConfigurator

2017-08-06 11:49:32 622

原创 activiti学习笔记(三) 监听生命周期

activiti监听生命周期activiti生命周期的作用生命周期的作用是在构建processEngine实例时候或者关闭的时候调用对应处理方法,比如我在启动实例的时候,可以对实例做一些预处理activiti的接口类public interface ProcessEngineLifecycleListener { /**实体引擎实例化的时候调用该方法*/ void onP

2017-08-06 10:12:49 1173

原创 activiti学习笔记(二) 获取流程实例

获取流程实例流程实例获取的源码解析              以获取默认的流程实例为例,来解释整个流程实例的获取过程文件位置:/org/activiti/engine/ProcessEngines.java     第一步:通过getDefaultProcessEngine来获取,可以看出其调用的当前类的getProcessEngine方法。//获取默认的流程引擎实例

2017-08-05 20:53:03 3546

原创 sql带条件查找最小缺失编号

查找在CASE_SET_ID为某个条件下的最小缺失编号 如 1 3 获取的值是2 , 2 3则获取的值是1/** * select * case when not exists(select * from rt_test_case where CASE_NUM=1) then 1 * else (select min(IFNULL(CASE_NUM,0)+1) fr

2017-08-05 19:55:49 1313

原创 activiti学习笔记(一) 获取流程配置实例

activiti获取流程配置实例流程配置的获取方法api       流程配置的获取共有七种方法,但是只分为三类,一类是根据配置文件路径进行获取、一类是根据流文件获取、还有一类是构建一个空的实例,根据类的默认属性来获取 /** * @author 郑小康 * 流程引擎配置共有七种方法 * 方法1 方法2调用的实际是方法3 * 方法4 调用其实就是方法5 *

2017-08-05 14:47:56 616

原创 ofbiz 服务引擎(一) controller中服务的调用解析

首先根据handler-controller.xml文件中对应handler文件,然后运行RequestHandler中的runEvent方法,方法如下:/** * @Description: 查找event处理句柄,并调用。通过request-map节点的event子节点的type属性值 * 从handler节点的解析map(type非view)中查找类,即han

2017-08-04 15:25:06 1324

原创 ofbiz实体引擎(九) 多租户

多租户在平台中是根据delegator不同操作不同的数据库 /** * @author 郑小康 * 设置完整的delegator 其可能形式有 default 或者defalut#tenantDelegatorName * 针对于第一种情况 delegatorBaseName =="default" delegatorTenantId=null

2017-07-30 13:28:25 951

原创 ofbiz实体引擎(八) 创建表

/** * @author 郑小康 * * 1.检验实体是否为空 * * 2.检验视图实体是否为空 * * 3.获取数据库连接 * * 4.根据对应的ModelEntity来创建表 其中modelEntities是关系表的集合 * * */ public String create

2017-07-30 13:23:09 670

原创 ofbiz实体引擎(七) 检查数据源

/** * Check the datasource to make sure the entity definitions are correct, optionally adding missing entities or fields on the server *@param modelEntities Map of entityName names and Model

2017-07-30 13:18:07 287

原创 ofbiz实体引擎(六) GenericHelper的初始化创建

/** * @author 郑小康 * * 1.根据groupName获取GenericHelperInfo * * 2.获取GenericHelperInfo的helperBaseName * * 3.如果HelperFullName不为空,则进行下面的操作 HelperFullName可能是default,也可能是defau

2017-07-30 12:59:46 501

原创 ofbiz实体引擎(五) ModelGroupReader

public class ModelGroupReader implements Serializable { public static final String module = ModelGroupReader.class.getName(); //缓存所有ModelGroupReader,其k是entity-group-reader属性值 private stat

2017-07-30 12:57:45 381

原创 ofbiz实体引擎(四) ModelReader的作用

public class ModelReader implements Serializable { public static final String module = ModelReader.class.getName(); private static final UtilCache readers = UtilCache.createUtilCache("entity.

2017-07-30 12:56:19 576

原创 ofbiz实体引擎(三) GenericDelegator实例化的具体过程

/** * @author 郑小康 * 1.设置delegatorFullName 基本delegatorName+"#"+tenantId 如果tenantId为空 则就是默认的delegatorName * * 2.获取EntityConfig实例,并获取基本delegatorBaseName的delegator标签,并解析为对应的DelegatorEl

2017-07-30 12:54:04 838

原创 ofbiz实体引擎(二) delegator实例化具体方式

/** * @author 郑小康 * 采用spi创建对应实例DelegatorFactoryImpl * */ public static R getObjectFromFactory(Class> factoryInterface, A obj) throws ClassNotFoundException { Iterator> it =

2017-07-30 12:52:30 645

原创 ofbiz实体引擎(一) 获取Delegator

public abstract class DelegatorFactory implements Factory { public static final String module = DelegatorFactoryImpl.class.getName(); private static final ConcurrentHashMap> delegators = new C

2017-07-30 12:46:56 1468

翻译 FreeMarker与JSP 2.0 + JSTL组合进行比较

FreeMarker与JSP 2.0 + JSTL组合进行比较。FreeMarker优点:FreeMarker不受Servlet或网络/ Web的限制; 它只是一个类库通过将模板与Java对象(数据模型)合并来生成文本输出。您可以随时随地执行模板; 没有HTTP请求转发或类似的技巧,根本不需要Servlet环境。因此,您可以轻松地将其集成到任何系统中。更简洁的语法 考虑这个

2017-06-26 23:54:07 628

原创 DNS域名服务器

4.1 域名服务器(具体过程在附件)4.1.1 简介 DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名 简而言之就是讲例如www.baidu.com的东西转化成其对应i

2017-06-26 23:32:36 409

原创 ofbiz中FreeMarkerWorker的makeConfiguration方法

这个方法是说明了为什么在ftl中可以使用一些java方法            1.代码展示public static Configuration makeConfiguration(BeansWrapper wrapper) { /** * freemarker.template.Configuration实例并调整其设置。 * 一

2017-06-26 23:15:54 402

翻译 ofbiz初级教程

本教程是ofbiz基本应用,它涵盖了OFBiz应用程序开发过程的基本原理。目标是使开发人员熟悉最佳实践,编码惯例,基本控制流程以及开发人员对OFBiz定制所需的所有其他方面。               本教程将帮助您在OFBiz中构建您的第一个“演示应用程序”。·      概述(OFBiz简介)·      设置和运行OFBiz·      下载Apache OFBiz

2017-06-26 16:37:14 13973 1

原创 ofbiz view渲染处理机制

1.1.1.1  初始化       ControlServlet.java 这是一个servlet,其配置文件在web.xml里 ControlServlet ControlServlet MainControl Servlet com.hanlin.fadp.we

2017-06-16 18:37:51 663

原创 ofbiz方法一 条件查询createConditionList

一、方法代码  /** * Parses input parameters and returns an EntityCondition list. * * @param parameters * @param fieldList * @param queryStringMap * @param delegator

2017-04-14 19:26:59 1523

原创 ofbiz的ant命令创建模块

1.简介说明       一般我们在hot-deploy下部署应用是,可以通过ant的create-component这个命令来创建,这种方法的好处是自动创建的会节省自己很多时间,并且避免一些不必要的错误,下面就从简述一下ant构建,以及模块的创建      声明:禁止转载,不是因为文章好不好,而是对于百度搜索,一搜一大片一样,很烦 2.软件版本     ofbiz-trunk

2017-03-30 23:19:51 1101

原创 cordova学习目录

引言:           Cordova是一种用于可以将H5页面生成移动设备应用的语言,在这里就个人这几天学习,有一些小的感悟,在此记录下来,供以后查阅。记录内容从以下几方面:环境搭建 项目创建 平台添加 插件集成 真机调式 模拟调试 项目打包这几方面,其实还有项目上线签名等之类的相关知识。尚未学习,不作记录。                          1.      c

2017-03-05 10:03:48 909

原创 cordova学习八 跨域请求

Cordova的跨域请求处理其实很简单,只需在对应平台的Config.xml文件中,将           platforms\平台名\res\xml\config.xml           改为

2017-03-05 09:38:16 3770

基于socket实现B/S架构和基于分布式架构理论网络结构

一个网络架构 实现业务处理与静态资源分离,通过ngnix来实现存储图片等资源,tomcat服务器来处理业务逻辑 实现环境是linux系统

2017-11-05

js 贪吃蛇源码

js 贪吃蛇源码

2016-08-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除