web容器

Hello-SpringMvc

梦想的初衷 提交于 2019-12-30 23:57:20
什么是SpringMVC MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。就是将业务逻辑、数据、显示分离的方法来组织代码 MVC主要作用是 降低了视图与业务逻辑间的双向偶合 。MVC不是一种设计模式, MVC是一种架构模式 。当然不同的MVC存在差异。 Model(模型) :数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。 View(视图) :负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。 Controller(控制器) :接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。 也就是说控制器做了个调度员的工作。 最典型的MVC就是 JSP + servlet + javabean 的模式。 Model1 在web早期的开发中,通常采用的都是Model1。 Model1中,主要分为两层,视图层和模型层。 Model1优点:架构简单,比较适合小型项目开发; Model1缺点:JSP职责不单一,职责过重,不便于维护 Model2

Docker数据持久化与容器迁移

限于喜欢 提交于 2019-12-29 09:57:24
上节讲到当容器运行期间产生的数据是不会在写镜像里面的,重新用此镜像启动新的容器就会初始化镜像,会加一个全新的读写入层来保存数据。如果想做到数据持久化,Docker提供数据卷(Data volume)或者数据容器卷来解决问题,另外还可以通过commit提交一个新的镜像来保存产生的数据。那么,来一一看下各自的使用方法。 一、数据卷 数据卷特性: 可以绕过UFS文件系统,为一个或多个容器提供访问。 完全独立于容器的生存周期,因此不会在删除容器时删除其挂在的数据卷。 数据卷特点: 数据卷在容器启动初始化时,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。 数据卷可以在容器直接共享和重用。 可以直接对数据卷里的内容进行修改。 数据卷的变化不会影响镜像的更新。 卷会一直存在,即使挂载数据卷的容器已经删除。 1.数据卷使用 创建并挂载数据卷: $ sudo docker run -itd --name ubuntu_test1 -v /container_data:/data ubuntu 注:container_data为宿主机目录,/data是容器中目录,目录不存在会自动创建 $ sudo docker inspect ubuntu_test1 "Mounts": [ { "Source": "/container_data", "Destination": "

使用 Docker 搭建 Java Web 运行环境

ぃ、小莉子 提交于 2019-12-29 09:56:59
目录[-] 原料 前提条件 安装 Docker 做法 下载镜像 启动容器 安装相关软件 安装 JDK 安装 Tomcat 设置环境变量 编写运行脚本 退出容器 创建 Java Web 镜像 启动 Java Web 容器 品尝 总结 Docker 是 2014 年最为火爆的技术之一,几乎所有的程序员都听说过它。Docker 是一种“轻量级”容器技术,它几乎动摇了传统虚拟化技术的地位,现在国内外已经有越来越多的公司开始逐步使用 Docker 来替换现有的虚拟化平台了。作为一名 Java 程序员,我们是时候一起把 Docker 学起来了! 本文会对虚拟化技术与 Docker 容器技术做一个对比,然后引出一些 Docker 的名词术语,比如:容器、镜像等,随后将使用 Docker 搭建一个 Java Web 运行环境,最后将对本文做一个总结。 我们先来回顾一下传统虚拟化技术的体系架构: 可见,我们在宿主机的操作系统上,可安装了多个虚拟机,而在每个虚拟机中,通过虚拟化技术,实现了一个虚拟操作系统,随后,就可以在该虚拟操作系统上,安装自己所需的应用程序了。这一切看似非常简单,但其中的技术细节是相当高深莫测的,大神级人物都不一定说得清楚。 凡是使用过虚拟机的同学,应该都知道,启动虚拟机就像启动一台计算机,初始化过程是相当慢的,我们需要等很久,才能看到登录界面。一旦虚拟机启动以后

HTTP协议 (四) 缓存

拟墨画扇 提交于 2019-12-29 03:15:55
如何提高网站的性能 阅读目录 硬件方面 负载均衡 Web服务器方面 - CDN Web服务器方面 - 独立的图片服务器 Web服务器方面 - Gzip 压缩 Web服务器方面 - 缓存 减少HTTP请求 HTML 静态化 HTML 优化图片 硬件方面 购买更多的服务器, 使用高性能的CPU 和内存, 和带宽 Web服务器方面 - 负载均衡 使用load banance 来分担负载 Web服务器 CDN CDN的全称是Content Delivery Network,即 内容分发网络 用户“接近”你Web服务器的程度会影响响应时间。把内容部署在多个、地理位置分散的服务器上,会使页面加载的速度从用户角度看更快。但是我们应该从哪里开始? 作为实现地理位置分散内容的第一步,不要试图重新设计你的Web应用程序,使它运行在一个分布式的结构中。根据应用程序,改变结构,包括跨服务器同步会话状态和复制数据库事务等,这些艰巨的任务。根据不同的应用,改变结构可以包括跨服务器的位置同步会话状态和复制数据库交易等艰巨任务。尝试减少用户和内容之间的距离,可以延迟,或从不通过,这是应用程序结构的步骤。 记住,最终用户的80-90% 响应时间花费在下载所有页面的组件:图像、CSS、JS、Flash 等,这是提高性能的黄金法则。最好先分散你的静态内容,如图像、CSS、JS、Flash 等

Spring Boot 嵌入式Web容器

梦想的初衷 提交于 2019-12-28 17:53:54
文章目录 前言 1、起源 2、容器启动流程解析 2.1、获取应用类型 2.2、容器启动流程 3、加载 Web 容器工厂 4、总结 前言 最近在学习Spring Boot相关的课程,过程中以笔记的形式记录下来,方便以后回忆,同时也在这里和大家探讨探讨,文章中有漏的或者有补充的、错误的都希望大家能够及时提出来,本人在此先谢谢了! 开始之前呢,希望大家带着几个问题去学习: 1、Spring Boot 嵌入式Web容器是什么? 2、整体流程或结构是怎样的? 3、核心部分是什么? 4、怎么实现的? 这是对自我的提问,我认为带着问题去学习,是一种更好的学习方式,有利于加深理解。好了,接下来进入主题。 1、起源 在当今的互联网场景中,与终端用户交互的应用大多数是 Web 应用,其中 Java Web 应用尤为突出,其对应的 Java Web 容器发展至今也分为 Servlet Web 容器和 Reactive Web 容器,前者的使用率大概占比是百分之九十左右,其具体的实现有 Tomcat 、 Jetty 和 Undertow ;而后者出现较晚,且技术栈体系并未完全成熟,还有待时间验证可行性,它的默认实现为 Netty Web Server 。其中的 Servlet 规范与三种 Servlet 容器的版本关系如下: Servlet 规范 Tomcat Jetty Undertow 4.0 9.X

Spring Boot 嵌入式Web容器

ぐ巨炮叔叔 提交于 2019-12-28 17:10:47
目录 前言 1、起源 2、容器启动流程解析 2.1、获取应用类型 2.2、容器启动流程 3、加载 Web 容器工厂 4、总结 前言 最近在学习Spring Boot相关的课程,过程中以笔记的形式记录下来,方便以后回忆,同时也在这里和大家探讨探讨,文章中有漏的或者有补充的、错误的都希望大家能够及时提出来,本人在此先谢谢了! 开始之前呢,希望大家带着几个问题去学习: 1、Spring Boot 嵌入式Web容器是什么? 2、整体流程或结构是怎样的? 3、核心部分是什么? 4、怎么实现的? 这是对自我的提问,我认为带着问题去学习,是一种更好的学习方式,有利于加深理解。好了,接下来进入主题。 1、起源 在当今的互联网场景中,与终端用户交互的应用大多数是 Web 应用,其中 Java Web 应用尤为突出,其对应的 Java Web 容器发展至今也分为 Servlet Web 容器和 Reactive Web 容器,前者的使用率大概占比是百分之九十左右,其具体的实现有 Tomcat 、 Jetty 和 Undertow ;而后者出现较晚,且技术栈体系并未完全成熟,还有待时间验证可行性,它的默认实现为 Netty Web Server 。其中的 Servlet 规范与三种 Servlet 容器的版本关系如下: Servlet 规范 Tomcat Jetty Undertow 4.0 9.X 9

Eclipse中Java项目转换为Web项目

喜你入骨 提交于 2019-12-28 05:07:38
刚创建完的 Java Project 是这样的 右键项目名,找到这个地方 修改下方的 Default output folder 为 Vehicle-Report/ WebContent/WEB-INF/classes 跟页面相关的 html文件、css文件、js文件 都应该放在 WebContent 之下 WEB-INF 是一个客户端不可见的目录,一般用来存放 java文件编译后的class文件、jar包、必备的web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> 进入WEB-INF层级下

Servlet 3.0 实战:异步 Servlet 与 Comet 风格应用程序

女生的网名这么多〃 提交于 2019-12-27 20:23:20
概述 作为 Java EE 6 体系中重要成员的 JSR 315 规范,将 Servlet API 最新的版本从 2.5 提升到了 3.0,这是近 10 年来 Servlet 版本号最大的一次升级,此次升级中引入了若干项令开发人员兴奋的特性,如: 可插拔的 Web 架构(Web framework pluggability)。 通过 Annotations 代替传统 web.xml 配置文件的 EOD 易于开发特性(ease of development)。 Serlvet 异步处理支持。 安全性提升,如 Http Only Cookies、login/logout 机制。 其它改进,如文件上传的直接支持等。 其中,在开源社区中讨论得最多的就是 Servlet 异步处理的支持,所谓 Servlet 异步处理,包括了非阻塞的输入/输出、异步事件通知、延迟 request 处理以及延迟 response 输出等几种特性。这些特性大多并非 JSR 315 规范首次提出,譬如非阻塞输入/输出,在 Tomcat 6.0 中就提供了 Advanced NIO 技术以便一个 Servlet 线程能处理多个 Http Request,Jetty、GlassFish 也曾经有过类似的支持。但是使用这些 Web 容器提供的高级特性时,因为现有的 Servlet API 没有对这类应用的支持

Servlet 3.0 实战:异步 Servlet 与 Comet 风格应用程序

我们两清 提交于 2019-12-27 20:23:04
简介:   自 JSR 315 规范(即 Servlet 3.0)的草案公开发布以来,最新一代 Servlet 规范的各种新特性被越来越多的开发人员所关注。规范中提到的一系列高级目标:如可插拔的 Web 框架、便捷开发特性、增强安全性支持等都令人期待。但其中关注程度最高的,毫无疑问是异步 Servlet。本文将详细介绍 Comet 风格应用的实现方式,以及 Servlet 3.0 中的异步处理特性在 Comet 风格程序中的实际应用。 概述 作为 Java EE 6 体系中重要成员的 JSR 315 规范,将 Servlet API 最新的版本从 2.5 提升到了 3.0,这是近 10 年来 Servlet 版本号最大的一次升级,此次升级中引入了若干项令开发人员兴奋的特性,如: 可插拔的 Web 架构(Web framework pluggability)。 通过 Annotations 代替传统 web.xml 配置文件的 EOD 易于开发特性(ease of development)。 Serlvet 异步处理支持。 安全性提升,如 Http Only Cookies、login/logout 机制。 其它改进,如文件上传的直接支持等。 其中,在开源社区中讨论得最多的就是 Servlet 异步处理的支持,所谓 Servlet 异步处理,包括了非阻塞的输入/输出、异步事件通知

Docker Compose 方式下容器网络

浪尽此生 提交于 2019-12-27 18:21:57
#Docker Compose 方式下容器网络 ##背景 我们项目使用docker compose 部署服务,之前后端服务访问数据库都是通过数据库服务映射到主机的特定端口来访问。近期出于安全方面的考虑的,我们需要让后端服务和数据库通信走容器内部网络。 为了解决这个的问题,就需要了解一下容器间网络通信的基础。 networks container name 在使用Compose启动容器时,Compose 默认给你的 app 设置一个网络。 service 中的每个容器默认都加入这个网络,容器之间彼此是互通的。并且,可以利用容器名字识别到。 Note: 你 app 的网络默认情况下是和你的 project name 有关的。这个 project name 其实就是你 docker-compose.yml 文件存放的那个目录的名字。比如,目录名叫 db ,那么默认情况下会创建一个叫 db_default 的网络。你可以使用 --project-name 或 COMPSE_PROJECT_NAME 环境变量。 举个栗子, docker-compose.yml : version: "2.1" services: web: image: nginx ports: - "8080:80" busybox: image: busybox entrypoint: - top 这个文件放在