

编程体系结构(07):JavaEE之Web开发
source link: http://www.cnblogs.com/cicada-smile/p/13786025.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文源码: GitHub·点这里 || GitEE·点这里
一、基础概念
1、CS与BS架构
CS架构模式
客户端/服务器(Client/Server)模式,既要编写服务器端程序,也要开发客户端程序,软件更新时需要同时更新客户端和服务器端,整体模式相比BS架构要复杂,但是安全性比较高。
B/S架构模式
即浏览器/服务器(Browser/Server),只需要编写服务器端程序,浏览器的界面作为访问的服务端的入口,架构相对简单,可以快速迭代,但是安全性较差。
2、Socket通信机制
TCP/IP 协议
传输控制协议/网际协议是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
Socket套接字
网络中不同主机上的应用进程之间进行双向通信的端点的抽象,一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。通常接收请求数据,并做业务处理的称为服务端即ServerSocket,发送请求并接收处理结果的称为客户端。
二、Http协议
1、Http和Https
Http协议
HTTP超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议,基于TCP/IP通信协议来传递数据:HTML文件、图片、查询数据等。HTTP协议基于客户端-服务端架构模式。浏览器作为HTTP客户端通过URL向服务端即WEB服务器发送请求。Web服务器根据接收到的请求后,处理完请求后向客户端发送响应信息。
协议特点:简单快速、灵活、无连接、无状态、支持客户/服务器模式。
Https协议
以安全为准则的HTTP通道,是HTTP的安全版,在HTTP请求上加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
Https和Http区别
安全证书:Https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
数据传输:Http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
连接方式:Http和Https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
2、Get和Post请求
浏览器端
从浏览器角度看这个两种请求的区别:GET方式读取资源,比如Get到静态页面,即使多次读取不会对访问数据产生影响,也被称为"幂等"请求。POST方式在页面中定义表单,提交表单会把数据提交到服务器,而且多数情况下会产生数据,比如常用的保存数据接口,并非"幂等"操作,不幂等也就意味着不能随意多次执行。
服务接口
这里指用Ajax程序请求服务接口,提交的请求类型。或者其他Http请求工具类,还有情况是微服务中各种Feign接口间的请求。这种情况接口发送请求时,限制相对较少,比如REST风格接口常用GET、POST、PUT、DELETE,几种方式分别获取、创建、更新、删除 资源。
3、握手挥手机制
三次握手
第一次握手:客户端主动向服务器发起请求连接,请求报文中发送SYN=1,此时随机生成初始序列号seq=x,此时,客户端进程进入SYN-SENT同步已发送状态。
第二次握手:服务端收到请求报文后,确认客户的SYN,如果请求没有拒绝,则发出确认报文。报文中应该ACK=1,SYN=1,确认号是ack=x+1,同时自己也发送一个SYN包seq=y,此时,服务器进程进入SYN-RCVD同步收到状态。
第三次握手:客户端收到确认后,需要向服务器确认报文的ACK=1,ack=y+1,此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态。完成三次握手,客户端与服务器开始传送数据。
四次挥手
第一次挥手:客户端发送一个结束FIN,用来主动关闭和服务端的数据传输,释放连接且停止发送数据,报文首部:FIN=1,序列号seq=u;随后客户端进入终止等待1状态FIN-WAIT-1。
第二次挥手:服务端收到这个FIN,发出确认报文ACK=1,确认收到序号是收到的序号+1,即ack=u+1,且带上自己的序列号seq=v,和SYN一样,一个FIN将占用一个序号。如此,服务器通知应用进程,客户端已经没有数据要发送,如果服务器发送数据,客户端依然要接收,该状态会持续一段时间,服务端进入关闭等待状态CLOSE-WAIT。客户端收到服务器的确认请求后,进入终止等待2状态FIN-WAIT-2,等待服务器发送连接释放报文。
第三次挥手:服务器向客户端发送释放连接报文FIN=1,ack=u+1,此时服务端还处于半关闭状态,服务器可能还会发送一些数据,此时序列号为seq=w,如此,服务器进入最后确认状态LAST-ACK,等待客户端的确认。
第四次挥手:客户端收到服务器的连接释放报文后,回发确认,ACK=1,ack=w+1,序列号是seq=u+1,如此,客户端进入时间等待状态TIME-WAIT。此时TCP连接还没有释放,必须经过最长报文段寿命的时间后,才进入CLOSED状态。MSL:最长报文段寿命,一般2分钟,TCP连接释放时,主动方必须经过2MSL后才进入CLOSED状态,因此主动方关闭时间比较晚。
三、Servlet组件
Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
1、实现方式
继承HttpServlet,HttpServlet担任抽象模板角色,模板方法:由service()方法担任;
继承GenericServlet抽象类,其中的service方法为抽象方法;
实现Servlet接口,包含init、getServletConfig、service、getServletInfo、destroy几个核心方法;
2、生命周期
加载和实例化,初始化init,服务service,销毁:destroy。
3、核心API组件
ServletConfig:获取servlet初始化参数和servletContext对象;
ServletContext:在整个Web应用的动态资源之间共享数据;
ServletRequest:封装Http请求信息,在请求时创建;
ServletResponse:封装Http响应信息,在请求时创建;
4、转发和重定向
转发:服务器端进行的页面跳转的控制 ;
重定向:服务端响应跳转信息,浏览器端进行的页面跳转 ;
5、Cookie与Session
Cookie机制
Cookie在HTTP中通常是用来辨别用户身份,进行会话跟踪而储存在用户本地终端上的数据,一般会加密处理,由用户客户端计算机暂时或永久保存的信息。其结构就是一个键和一个值构成的。随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。
Session会话
用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。Servlet中可以把一个会话内需要共享的数据保存到HttSession对象中。四大域对象:PageContext、ServletRequest、HttpSession、ServletContext。
6、监听.过滤.拦截
监听器
JavaWeb三大组件:Servlet,Listener,Filter,监听器就是指在应用程序中监听相关对象状态变化的组件。
过滤器
客户端请求Servlet时,先执行相关Filter,如果Filter通过,则继承执行请求的Servlet;如果Filter不通过,则不会执行用户请求的Servlet。过滤器可以动态地拦截请求和响应。
拦截器
Spring框架中的拦截器Interceptor类似于Servlet中的过滤器Filter,主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。请求转发不执行拦截、过滤;重定向执行拦截和过滤。
四、数据库连接池
1、C3P0连接池
C3P0是一个开源的JDBC连接池,应用程序根据C3P0配置来初始化数据库连接,可以自动回收空闲连接的功能。
2、Druid连接池
Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。内置了StatFilter功能,能采集非常完备的连接池中访问数据库执行信息,Druid连接池内置一个监控页面,提供了非常完备的监控信息,可以快速诊断系统的瓶颈,也是当前最常用的连接池。
五、运行服务器
1、Jetty容器
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
2、Tomcat服务器
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。使用Tomcat最关键的两个操作:使用开发工具连接Tomcat并部署web应用;将应用程序打包放到Tomcat服务下运行。
六、源代码地址
GitHub·地址 https://github.com/cicadasmile GitEE·地址 https://gitee.com/cicadasmile
推荐阅读:编程体系整理
序号 项目名称 GitHub地址 GitEE地址 推荐指数 01 Java描述设计模式,算法,数据结构 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆ 02 Java基础、并发、面向对象、Web开发 GitHub·点这里 GitEE·点这里 ☆☆☆☆ 03 SpringCloud微服务基础组件案例详解 GitHub·点这里 GitEE·点这里 ☆☆☆ 04 SpringCloud微服务架构实战综合案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆ 05 SpringBoot框架基础应用入门到进阶 GitHub·点这里 GitEE·点这里 ☆☆☆☆ 06 SpringBoot框架整合开发常用中间件 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆ 07 数据管理、分布式、架构设计基础案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆ 08 大数据系列、存储、组件、计算等框架 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆Recommend
-
42
一、数据类型 1、基础类型 整型: byte 、short 、int 、long 浮点型: ...
-
40
一、异常简介 优秀的程序代码,都在追求高效,安全,和低错误率,但是程序中的异常是无法避免的,降低异常出现的频率是关键,异常出现如何处理是另一个重要方面,Java体系中异常框架对于系统开发是十分重要的。...
-
37
一、集合容器简介 集合容器是Java开发中最基础API模块,通常用来存储运行时动态创建的元素,基本特点如下: 泛型特点,存储任意类型对象; 动态扩容,存储任意数量对象;
-
27
本文源码: GitHub·点这里 || GitEE·点这里 一、IO流分类 1、分类角度 流的方向 输入流:...
-
28
字节流:以字节形式来读写的流,标识是名称以Stream结尾;字符流:以字符形式来读写的流,标识是名称以Writer、Reader结尾;管道流:以数据块为单位来处理,缓冲区就是用于读写的数据块;
-
20
本文源码: GitHub·点这里 || GitEE·点这里 一、多线程导图
-
31
一、基础概念 1、面向对象概念 面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。
-
26
Java开发中如何理解面向对象:构建合适的对象接口API体系,创建合适的对象,解决合适的问题,例如JDK的API已经定义好的类,通过这些类创建对象直接使用;通过自定义类来创建对象使用,在MVC中模式中,不同业务功能创建不同的接口和类系统。
-
32
即浏览器/服务器(Browser/Server),只需要编写服务器端程序,浏览器的界面作为访问的服务端的入口,架构相对简单,可以快速迭代,但是安全性较差。
-
2
chszs的博客_CSDN博客-JavaEE开发,Web开发,计算机算法领域博主虚妄中发展的量子计算机与量子霸权 “遇事不决,量子力学”。自...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK