WebApp Server,即网页应用服务。它们负责执行核心的业务逻辑,处理用户请求,并返回HTML给用户浏览器。JavaWeb需要使用Web容器和Web框架,如tomcat和springMVC等。
如果要系统的了解WebApp,需要从网络IO,web容器,web框架几方面入手。
【网络IO】
1.IO:本质就是数据不停地搬入搬出缓冲区而已(使用了缓冲区)。比如常见的代码:while((read = inputStream.read(byteArr)) > 0) ,表面上是数据从inputStream中拷贝到byteArr中,其实还是隐含的从磁盘到内核态的内部过程,如下:
由图中可以看出,IO模型分为同步阻塞IO,同步非阻塞IO,异步IO(如linux下的AIO)。
2. NIO:IO模式建立多个链接,需要多线程。NIO的出现可以单个线程实现多个链接。
nio学习步骤:观察者模式-> 事件机制 -> Reactor模式 --> nio -> netty对nio进行了封装简化
采用了多路复用IO,即使用了经典的Reactor设计模式,有时也称异步阻塞IO。如Java中的Selector和Linux的epoll都是用到了这种模型。
1)事件机制,可参考观察者设计模式。 Subject ----> 观察者1,2,3; Source --(事件对象EventObject)--> 事件监听者(EventListener)
2)Reactor模式:Reactor负责响应IO,然后分发到具体的Handler来处理。如果多CPU,可以讲Reactor拆分为主reactor和子reactor。
nio就是基于这种Reactor来实现的,而netty则是基于nio实现的。
示例代码:
Selector selector = Selector.open(); // 1. 网络IO有,文件IO无
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); // 2. 设置Channel,非阻塞
serverSocketChannel.bind(new InetSocketAddress(8989));
serverSocketChannel.configureBlocking(false);
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); // 3. 注册事件类型
............. // 4. select()处理,较复杂
len=readChannel.read(buffer) // 5. 缓冲处理
推荐两个IO博客:
java nio及操作系统底层原理:https://blog.csdn.net/u014507083/article/details/73784898
多路复用IO与NIO:http://www.cnblogs.com/zwt1990/p/8821185.html
【web容器】
jetty和tomcat都是一种servlet引擎,支持标准的servlet规范和javaEE规范
1. Tomcat:
底层:默认采用IO,处理静态资源性能较差。适用于分布式环境。
架构:基于Handler,可利用Handler方便的实现扩展。
2. Jetty:
底层:默认采用NIO,处理静态资源性能较差。但应用广泛,对javaWeb支持更加全面,适用于企业级环境。
架构:基于容量,需要了解整体设计结构方可扩展。
tomcat重点:jetty可参考
1. tomcat部署方式:
1)将工程拷贝到webapps目录下。
2)采用别名的方式,即采用Context和docBase结合使用部署。
3)采用tomcat管理界面进行war包部署。
2. tomcat调优:
1)jvm调优:catalina.bat设置JAVA_OPTS='-Xms256m -Xmx512m'。一般占可用内存的80%
2)禁用DNS查询:server.xml中,enableLookups="false"。域名查询占用网络资源,会耗时。
3)调整线程数:server.xml中,修改maxThreads等参数。
3. tomcat架构: 具体可参考:https://blog.csdn.net/xlgen157387/article/details/79006434
1)Tomcat中只有一个Server,一个Server可以有多个Service,一个Service可以有多个Connector和一个Container;
2) Server掌管着整个Tomcat的生死大权;
3)Service 是对外提供服务的;
4)Connector用于接受请求并将请求封装成Request和Response来具体处理;
5)Container用于封装和管理Servlet,以及具体处理request请求;
【web框架】
1. Spring IOC:https://www.cnblogs.com/ITtangtang/p/3978349.html
2. Spring AOP: https://blog.csdn.net/jacman/article/details/50373561
3. SpringMVC:https://www.cnblogs.com/ysocean/p/7375405.html
4. myBatis: https://blog.csdn.net/u014297148/article/details/78696096