CN107517259A - 一种简易Web服务器实现方法 - Google Patents
一种简易Web服务器实现方法 Download PDFInfo
- Publication number
- CN107517259A CN107517259A CN201710751862.1A CN201710751862A CN107517259A CN 107517259 A CN107517259 A CN 107517259A CN 201710751862 A CN201710751862 A CN 201710751862A CN 107517259 A CN107517259 A CN 107517259A
- Authority
- CN
- China
- Prior art keywords
- container containers
- container
- request
- modules
- web server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/50—Network service management, e.g. ensuring proper service fulfilment according to agreements
- H04L41/5041—Network service management, e.g. ensuring proper service fulfilment according to agreements characterised by the time relationship between creation and deployment of a service
- H04L41/5054—Automatic deployment of services triggered by the service manager, e.g. service implementation by automatic configuration of network components
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种简易Web服务器实现方法,包括Web服务器和Service服务组件,所述Service服务组件由Container容器、Connector连接器、Executor执行器组成,所述Connector连接器用于接收用户的请求数据并传输至Container容器,所述Container容器用于根据请求数据得出相应的控制命令和执行命令,所述Executor执行器用于接收来自于Container容器的控制命令和执行命令并执行相应操作。本发明基于JMX管理这些组件实现以上接口的组件也实现了代表生存期的接口Lifecycle,使其组件履行固定的生存期,在其整个生存期的过程中通过事件侦听LifecycleEvent实现扩展。
Description
技术领域
本发明涉及Java Web服务器领域,尤其涉及一种简易Web服务器实现方法。
背景技术
Web服务器特指网络服务器也称Web Server或Web服务器,主要功能是提供网上信息浏览服务以及对网络设备进行远程操作和配置,只简单用于提供静态资源访问和HTTP请求转发的请求服务器,例如:Nginx、Apache server不在本申请的Web服务器讨论范围中。Web服务器可以解析HTTP协议。当Web服务器接收到一个HTTP请求,会返回一个HTTP响应,例如送回一个HTML页面或者JSP(Java Servlet Page)脚本以及Content-type为application-json格式的数据串。Web服务器工作原理如下:Web服务器的工作原理并不复杂,一般可分成如下4个步骤:连接过程、请求过程、应答过程以及关闭连接。下面对这4个步骤作一一简单的介绍。连接过程就是Web服务器和其浏览器之间所建立起来的一种连接。查看连接过程是否实现,用户可以找到和打开socket这个虚拟文件,这个文件的建立意味着连接过程这一步骤已经成功建立。请求过程就是Web的浏览器运用socket这个文件向其服务器而提出各种请求。应答过程就是运用HTTP协议把在请求过程中所提出来的请求传输到Web的服务器,进而实施任务处理,然后运用HTTP协议把任务处理的结果传输到Web的浏览器,同时在Web的浏览器上面展示上述所请求之界面。关闭连接就是当上一个步骤——应答过程完成以后,Web服务器和其浏览器之间断开连接之过程。Web服务器上述4个步骤环环相扣、紧密相联,逻辑性比较强,可以支持多个进程、多个线程以及多个进程与多个线程相混合的技术。现有技术已经存在的服务器足以满足Web开发者的开发需求,但是当Web开发者想为Web系统定制一些特殊组件的时候,比如采用灵活的Socket实现方式,为Web容器集成业务连接池,或者需要优化某个组件的时候。可能会遇到修改Web服务器配置的情况。
发明内容
针对现有技术存在的不足之处,本发明的目的在于提供一种简易Web服务器实现方法,基于JMX管理这些组件实现以上接口的组件也实现了代表生存期的接口Lifecycle,使其组件履行固定的生存期,在其整个生存期的过程中通过事件侦听LifecycleEvent实现扩展。
本发明的目的通过下述技术方案实现:
一种简易Web服务器实现方法,包括Web服务器和Service服务组件,所述Service服务组件由Container容器、Connector连接器、Executor执行器组成,所述Connector连接器用于接收用户的请求数据并传输至Container容器,所述Container容器用于根据请求数据得出相应的控制命令和执行命令,所述Executor执行器用于接收来自于Container容器的控制命令和执行命令并执行相应操作;其方法如下:
A、所述Container容器包括Engine容器引擎模块、Host主机模块、Context上下文模块、Servlet请求模块和Wrapper管理模块,所述Connector连接器通过HTTP协议接收用户的请求数据并将请求数据传输至Container容器;所述Container容器的Host主机模块、Context上下文模块对请求数据进行相应顺序排列和数据整理处理;所述Servlet请求模块对请求数据通过Wrapper管理模块来进行管理;
B、所述Container容器根据请求数据得出相应的控制命令和执行命令,所述Executor执行器接收来自于Container容器的控制命令和执行命令并执行相应操作。
本发明可以实现如下技术效果:
第一、基于组件模型的拓展:Web服务器通常由一堆组件组成,如Server、Service、Connector等,并基于JMX管理这些组件,另外实现以上接口的组件也实现了代表生存期的接口Lifecycle,使其组件履行固定的生存期,在其整个生存期的过程中通过事件侦听LifecycleEvent实现扩展。本发明沿用这一原理但做了一定的删减和修改,使简易的Web服务器默认使用NIO来实现Socket连接,同样基于组件结构拓展了Executor执行框架,使Web服务器能够更好的利用机器的多处理器进行并发处理连接请求。
第二、简化Web容器:Web容器具备两方面的职责:一是负责加载和运行Java Web工程的运行时文件,即.class文件。二是缓存来自客户端的请求,并实例化连接对象将请求交给容器中的工作线程处理,并把响应结果返回给客户端。本发明简化了容器承载Java Web项目的能力,即本申请中的Web服务器只能单一运行指定的Java Web工程,因为本发明旨在定制优化Web服务器的处理能力,没有适配其拓展性。
第三、强化事件模型:每一个组件生命周期都是需要统一管理的,一般是由调用该组件的组件来启动或停止当前组建,如connector组件控制processor组件启动和停止,因此每个组件主要类都会继承Lifecycle接口。
第四、使用NIO机制作为连接的实现:连接器主要是接收用户的请求,然后封装请求传递给容器处理,本申请中默认的连接器协议为:HTTP/1.1,协议负责建立HTTP连接,web应用通过浏览器访问服务器用的就是这个连接器,该协议的实现方式采用NIO(java.nio):这是用纯Java编写的连接器(Conector)的一种可选方法。该实现用java.nio核心Java网络类以提供非阻塞的TCP包特性。连接器和容器一起才能对外提供服务,Service里面包含了一个容器和多个连接器,连接器是怎么加入到Service中的。Acceptor顾名思义就是接收器,用于接收用户请求,Acceptor实现了Runnable接口,可以作为一个线程启动,且都是Endpoint的内部类。
第五、请求封装:在Acceptor接收到一个socket之后,在JIoEndpoint的processSocket方法中这个socket被包装成SocketWrapper,然后从线程池中分配一个线程来处理这次请求,会调用process方法来处理,在这个方法里面如果处理器为空,就调用createProcessor方法创建一个,创建processor时会产生两个对象,分别是request,response,也就是说在接收到socket之后用户的请求作了如下转化:我们知道servlet的service方法需要传入ServletRequest和ServletResponse类型的参数。从org.apache.coyote.Request没有实现javax.servlet.http.HttpServletRequest接口可知不是这样的。所以org.apache.coyote.Request与ServletRequest之前还有一个中间层。本申请在这个中间层使用Socket实现的NioEndpoint接管连接,将连接桥接到ServletRequest,ServletResponse对象上。
本发明较现有技术相比,具有以下优点及有益效果:
本发明基于JMX管理这些组件实现以上接口的组件也实现了代表生存期的接口Lifecycle,使其组件履行固定的生存期,在其整个生存期的过程中通过事件侦听LifecycleEvent实现扩展。
附图说明
图1为本发明的原理结构框图;
图2为本发明的Web服务器、Service服务组件关系流程图;
图3为本发明事件监听状态转换图;
图4为本发明各组件初始化启动时序图;
图5为Web服务器线程模型示意图。
具体实施方式
下面结合实施例对本发明作进一步地详细说明:
实施例
如图1~图5所示,一种简易Web服务器实现方法,包括Web服务器和Service服务组件,所述Service服务组件由Container容器、Connector连接器、Executor执行器组成,所述Connector连接器用于接收用户的请求数据并传输至Container容器,所述Container容器用于根据请求数据得出相应的控制命令和执行命令,所述Executor执行器用于接收来自于Container容器的控制命令和执行命令并执行相应操作;其方法如下:
A、所述Container容器包括Engine容器引擎模块、Host主机模块、Context上下文模块、Servlet请求模块和Wrapper管理模块,所述Connector连接器通过HTTP协议接收用户的请求数据并将请求数据传输至Container容器;所述Container容器的Host主机模块、Context上下文模块对请求数据进行相应顺序排列和数据整理处理;所述Servlet请求模块对请求数据通过Wrapper管理模块来进行管理;
B、所述Container容器根据请求数据得出相应的控制命令和执行命令,所述Executor执行器接收来自于Container容器的控制命令和执行命令并执行相应操作。
图2为Web服务器组件结构图,所述组件包含有:Web服务器(Server)和服务组件(Service),Web服务器(Server)是所有组件的容器,服务组件(Service)包括容器(Container)、连接器(Connector)和执行器(Executor)的集合,Service用适当的Connector接收用户的请求,再发给相应的Container来处理,Executor执行者起到命令与执行者解耦的作用。
容器(Container):可以理解为处理某类型请求的容器,处理的方式一般为把处理请求的处理器包装为Valve对象,并按一定顺序放入类型为Pipeline的管道里。Container有多种子类型:Engine、Host、Context和Wrapper,这几种子类型Container依次包含,处理不同粒度的请求。
连接器(Connector):实现HTTP协议的连接器。
容器引擎(Engine):Engine包含Host和Context,接到请求后仍给相应的Host在相应的Context里处理。
主机(Host):就是我们所理解的虚拟主机。
上下文(Context):就是我们所部属的具体Web应用的上下文,每个请求都在是相应的上下文里处理的。
请求(Servlet):针对每个Servlet包装后的Container,每个Servlet都有相应的Wrapper来管理。
Server、Service、Connector、Container、Engine、Host、Context和Wrapper这些核心组件的作用范围是逐层递减,并逐层包含。组件机制是Web服务器建构中非常重要的一个机制。
各个组件通过事件模型绑定其生命周期,协调各组件之间的初始化和调用关系,具体来讲就是组件都实现了Lifecycle接口,并且触发执行的动作都是在LifecycleListener接口实现的,为了让各个组件不用去实现相同的Lifecycle事件逻辑,提供了LifecycleSupport类对监听器进行管理。最终事件模型实现的效果结合图3进行说明。
Lifecycle接口定义了两个方法start,stop来完成创建,初始化和结束的生命周期管理。
Lifecycle接口一共定义了九种事件类型。所有容器内处理Servlet的组件都继承该接口,如Service,Engine,Host,Context。
组件收到init指令之后,开始了生命周期的第一步,包含图示步骤为101,组件状态变为initialized,并同时通过监听器责任链,调用子组件进行101的初始化步骤。在自身组件初始化完毕后,会持续监听子组件是否初始化完毕。若已经初始化完毕,会执行start事件,图示步骤为201,到达为started状态。此时代表组件启动完毕,每个对应的组件已经做好响应的准备,可以为容器接受请求,缓存请求数据服务了。在started状态时,可执行303步骤stop,代表Web服务器的终止运行操作。当所有组件都stop之后,会紧接着执行destroy事件,图示步骤403,关闭服务器。
上述事件监听执行的状态变化为Web容器的正常启动关闭流程。如果Web容器在运行过程中任意组件出现执行命令失败的时候,都会触发步骤为301/401或者302/402的停止或终止事件,并通过责任链传递到子组件中去,以保证整个Web容器运行的一致性,即如果Web容器正常启动,那么所有的组件都是能够正常工作的,如果有某一个组件启动状态非法,那么会导致整个Web容器都不能启动成功。
本设计实现上使用了组合(Composite)和观察者(Observer)模式。
设计核心是Lifecycle、LifecycleListener、LifecycleEvent组合了LifecycleSupport。注册事件:Lifecycle中定义的addLifecycleListener实际是使用LifecycleSupport的addLifecycleListener。通知监听者:当Lifecycle中发生动作尤其是start和stop时会调用LifecycleSupport的fireLifecycleEvent。这个时候LifecycleSupport的fireLifecycleEvent会根据传入的事件类型,生成LifecycleEvent事件源并且遍历通知所有注册在里面的监听(LifecycleListener)的lifecycleEvent方法。监听者响应:监听(LifecycleListener)会根据不同的事件类型做不同的操作。
Lifecycle接口所规范的是生命周期组件所拥有的生命周期内的状态和所拥有的操作。如初始化,启动停止和销毁,以及添加观察者。而接口LifecycleListener规范的是观察者在生命周期组件的状态发生变化的时候所触发的处理内容。这样就足以构成观察者模式。并且实现了一个LifecycleSupport的工具类方便了生命周期类的编写。LifecycleSupport对Lifecycle做了一些基础的实现。它持有一个LifecycleListener的数组,这个数组用来存储所有注册的观察者。除了提供了基本的实现,还实现了一个重要的函数fireLifecycleEvent。它触发了所有listener的lifecycleEvent,所以使用的时候可以直接fireLifecycleEvent。这个类的基本用法是让生命周期组件直接持有类的对象,然后实现Liftcycle接口,基本方法的实现基本上可以通过这对象来代劳。
各组件初始化启动的顺序由图4说明,图示101~104步骤为组件的初始化步骤,图3已经说明了组件间的包含关系,组件间的初始化执行顺序也是依照这个顺序,即父组件先初始化再初始化子组件,Web容器启动后通过main方法依次调用Server、Service、Connector的初始化。并且在初始化完成之后,执行图示201~205步骤,该步骤依次启动组件,让组件在必要类实例化完成的基础上执行本职工作,比如Service组件做好容器服务的基础工作,完成容器类各组件的依赖管理,Engine、Host、Context组件编译运行Java Web工程,为对外界提供HTTP访问做好准备,Connector、Servlet监听服务端,准备将请求连接到实例化的Web工程接口去执行。
当请求到达Web服务器时,Web服务器会通过Connector接受请求,并做响应的转换,最终转换为可以交由Java Web工程处理的ServletRequest、ServletResponse对象。图示步骤为301~303,该步骤的具体实现由如下介绍的请求处理装置实现。
请求的实现装置:Connector启动的时候,此时Connector会通过ProtocolHandler把Endpoint启动起来。Endpoint是预支持协议的,即Endpoint会起专门的线程监听相应协议的请求,也就是JIoEndpoint,JIoEndpoint基于Java ServerSocket接收Http的请求,ServerSocket接收到客户端请求的Socket后,一路包装,并一路从Host一直传递到Wrapper,再请求到相应的Servlet。NioEndpoint负责组装各部件Acceptor负责监听新连接,并把连接交给Poller,Poller负责监听所管辖的channel队列,并把请求交给SocketProcessor处理,SocketProcessor负责数据处理,并把请求传递给后端业务处理模块。
本发明Web服务器线程模型示意图如图5所示:第一阶段是连接器连接Http请求,主要是Acceptor监听新连接,并轮询取一个Poller,把连接交付给Poller,其中轮询获取Poller的时候会判断连接是否注册通道Selector,Selector是NIO中的关键概念,也是其非阻塞选择的重要组成,第二阶段是监听客户端的请求,这一过程执行是让每个Poller监听所管辖的channel队列,select到新请求后交付给SocketProcessor处理,第三阶段是处理请求,这一过程的目的就是从Executor中执行SocketProcessor,即调用我们的业务Controller,做数据和业务处理。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (1)
1.一种简易Web服务器实现方法,其特征在于:包括Web服务器和Service服务组件,所述Service服务组件由Container容器、Connector连接器、Executor执行器组成,所述Connector连接器用于接收用户的请求数据并传输至Container容器,所述Container容器用于根据请求数据得出相应的控制命令和执行命令,所述Executor执行器用于接收来自于Container容器的控制命令和执行命令并执行相应操作;其方法如下:
A、所述Container容器包括Engine容器引擎模块、Host主机模块、Context上下文模块、Servlet请求模块和Wrapper管理模块,所述Connector连接器通过HTTP协议接收用户的请求数据并将请求数据传输至Container容器;所述Container容器的Host主机模块、Context上下文模块对请求数据进行相应顺序排列和数据整理处理;所述Servlet请求模块对请求数据通过Wrapper管理模块来进行管理;
B、所述Container容器根据请求数据得出相应的控制命令和执行命令,所述Executor执行器接收来自于Container容器的控制命令和执行命令并执行相应操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710751862.1A CN107517259A (zh) | 2017-08-28 | 2017-08-28 | 一种简易Web服务器实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710751862.1A CN107517259A (zh) | 2017-08-28 | 2017-08-28 | 一种简易Web服务器实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107517259A true CN107517259A (zh) | 2017-12-26 |
Family
ID=60724390
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710751862.1A Pending CN107517259A (zh) | 2017-08-28 | 2017-08-28 | 一种简易Web服务器实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107517259A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108848543A (zh) * | 2018-05-31 | 2018-11-20 | 四川斐讯全智信息技术有限公司 | 一种wifi网络配置方法及系统 |
CN109462507A (zh) * | 2018-11-15 | 2019-03-12 | 北京金山云网络技术有限公司 | 配置更新方法、装置、系统及电子设备 |
CN110321109A (zh) * | 2019-05-23 | 2019-10-11 | 平安普惠企业管理有限公司 | 接口服务的获取方法、装置、计算机设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154223A (zh) * | 2006-09-27 | 2008-04-02 | 阿里巴巴公司 | 查看与系统功能对应的源代码的方法及系统 |
CN102591714A (zh) * | 2011-12-31 | 2012-07-18 | 山东中创软件工程股份有限公司 | 一种流程调用方法、系统及应用服务器 |
CN102750181A (zh) * | 2012-05-31 | 2012-10-24 | 深圳市远行科技有限公司 | 一种Web Service处理引擎系统及处理方法 |
CN104317570A (zh) * | 2014-09-29 | 2015-01-28 | 北京掌中经纬技术有限公司 | 动态解析Web应用的装置和方法 |
US20160140251A1 (en) * | 2014-11-18 | 2016-05-19 | Martin Schaus | Data consumption between heterogeneous web applications |
-
2017
- 2017-08-28 CN CN201710751862.1A patent/CN107517259A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154223A (zh) * | 2006-09-27 | 2008-04-02 | 阿里巴巴公司 | 查看与系统功能对应的源代码的方法及系统 |
CN102591714A (zh) * | 2011-12-31 | 2012-07-18 | 山东中创软件工程股份有限公司 | 一种流程调用方法、系统及应用服务器 |
CN102750181A (zh) * | 2012-05-31 | 2012-10-24 | 深圳市远行科技有限公司 | 一种Web Service处理引擎系统及处理方法 |
CN104317570A (zh) * | 2014-09-29 | 2015-01-28 | 北京掌中经纬技术有限公司 | 动态解析Web应用的装置和方法 |
US20160140251A1 (en) * | 2014-11-18 | 2016-05-19 | Martin Schaus | Data consumption between heterogeneous web applications |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108848543A (zh) * | 2018-05-31 | 2018-11-20 | 四川斐讯全智信息技术有限公司 | 一种wifi网络配置方法及系统 |
CN109462507A (zh) * | 2018-11-15 | 2019-03-12 | 北京金山云网络技术有限公司 | 配置更新方法、装置、系统及电子设备 |
CN109462507B (zh) * | 2018-11-15 | 2021-09-28 | 北京金山云网络技术有限公司 | 配置更新方法、装置、系统及电子设备 |
CN110321109A (zh) * | 2019-05-23 | 2019-10-11 | 平安普惠企业管理有限公司 | 接口服务的获取方法、装置、计算机设备和存储介质 |
CN110321109B (zh) * | 2019-05-23 | 2023-10-20 | 深圳市融锋科技有限公司 | 接口服务的获取方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10154118B2 (en) | System and method for telephony and communication services with message-based API | |
CN106776313B (zh) | 一种模拟服务的方法、装置及集中管理平台 | |
CN106603283B (zh) | 一种模拟服务的方法、装置及集中管理平台 | |
Bergenti et al. | Agents on the Move: JADE for Android Devices. | |
CN107517259A (zh) | 一种简易Web服务器实现方法 | |
CN101137170A (zh) | 一种嵌入设备的软件自动测试工具及方法 | |
CN106445509A (zh) | 一种sdk批量快速接入工具 | |
WO2011133472A1 (en) | Unified framework and method for call control and media control | |
US8934866B2 (en) | System to assist a mobile device subscriber to perform self-diagnosis of the mobile device | |
Christophides et al. | Beyond discrete e-services: Composing session-oriented services in telecommunications | |
Lin et al. | Orchestration in web services and real-time communications | |
CN106407061A (zh) | 一种北向接口测试装置和北向接口的测试方法 | |
Wohlstadter et al. | A service-oriented middleware for runtime web services interoperability | |
JP4976128B2 (ja) | サーバ間の透過的なセッション移送 | |
JP5249764B2 (ja) | スクリプトアプリケーションフレームワーク | |
WO2006015611A2 (en) | Method and system for reading data, related network and computer program product therefor | |
CN105260179A (zh) | 一种实现flex与servlet交互的方法 | |
CN101969442A (zh) | 基于进程运行环境感知与迁移的网络模拟框架实现方法 | |
Bissyandé et al. | Bridging the gap between legacy services and web services | |
Jacques-Silva et al. | A network-level distributed fault injector for experimental validation of dependable distributed systems | |
CN101252598B (zh) | 一种网络通信协议栈的开发系统和开发方法 | |
Fjellheim | Over-the-air deployment of applications in multi-platform environments | |
CN103729256B (zh) | 基于本机开发程序包技术的多媒体系统及多媒体数据传输方法 | |
CN106965181A (zh) | 基于ros和orocos的机器人控制方法和系统 | |
Baeckstroem et al. | Design of a contact service in a Jini-based spontaneous network |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171226 |
|
RJ01 | Rejection of invention patent application after publication |