一、连接池
数据库连接池的基本原理是连接池对象中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。
二、JavaEE开发
JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发(不需要使用控制台)平台。最早由Sun公司定制并发布,后由Oracle负责维护。
JavaEE平台规范了在开发企业级web应用中的技术标准。
•JavaEE案例要使用到浏览器、服务器(Tomcat)、数据库;不是通过main方法来运行,而是要放在服务器(Tomcat)来运行;要使用到Servlet和jsp两个技术,而且多了一个web.xml文件做配置;是将结果给打印到了浏览器上,而不是控制台上。
三、HTTP协议
浏览器与服务器之间发送数据的时候,是要有格式的,是双方约定好的格式。这样双方才能认识对方发送的数据
这个格式称之为协议(在互联网中主机与主机之间进行访问沟通都需要使用特定的协议)。
●HTTP协议
•什么是超文本
超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。超文本更是一种用户界面范式,用以显示文本及与文本之间相关的内容。
•HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,HTTP是万维网(WWW:World Wide Web)的数据通信的基础。
•HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
•HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)。
①物理层 负责光电信号的传输
②数据链路层 负责设备之间数据帧的传送和识别
③网络层 负责地址管理和路由选择
④传输层 负责两台主机之间的数据传输
⑤应用层 负责应用程序间沟通
●HTTP协议特点
•支持客户端/服务器模式
•简单快速
•灵活(传输的数据类型多样)
•短连接
短链接是指每次请求响应完成后,连接会自动断开。从http1.1开始,我们使用的是长连接,长连接是每次请求响应完成后,连接会保持一小段的存活时间,供之后的请求使用。长连接要比短连接的效率高
•单向性
服务端永远是被动的等待客户端(浏览器)的请求。
•无状态
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,用户体验度也不好。为了解决HTTP协议无状态,于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。
●HTTP协议中的URL、URI
•URL
URL(Uniform Resource Location统一资源定位符),可以帮助我们唯一定位互联网上的某一个资源,相当于是互联网资源的身份证号。URL由五个元素组成:
①传送协议
②域名或者IP地址
③端口号(以数字方式表示,若为HTTP的默认值“.80”可省略)
④请求资源路径
⑤传递数据(在URL中传递数据是以key=value的结构进行数据绑定,以“?”字符为起点,每个参数以“&”隔开通常以UTF8的URL编码,避开字符冲突的问题)
● URI
URI:(Uniform Resource Identifier),统一资源标识符,是一个用于标识某一互联网资源名称的字符串。
URI是一个特别抽象的概念,URL包含了URI。
●HTTP协议的请求
http协议就是用来规范请求与响应的数据格式的。
Request 消息分为3部分:
•第一部分:Request line 请求行
•第二部分:Request header请求头
•第三部分:Request body 请求体
Request header和Request body之间有个空行。
●请求行
请求行中含有:请求的方式、URI、协议/版本。
●请求头
请求头用于说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好及能力。服务器可以根据请求头部给出的客户端信息,试着为客户端提供更好的响应。
请求头中信息的格式为key:value。
•Host
客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。
•Connection
连接方式。如果值是close则表示基于短连接方式,如果该值是keep-alive,网络连接就是持久的,在一定时间范围内不会关闭,使得对同一个服务器的请求可继续在该连接上完成。
• Upgrade-Insecure-Requests
服务端是否支持https加密协议。
•Cache-Control
指定请求和响应遵循的缓存机制。
•User-Agent
浏览器表明自己的身份(是哪种浏览器)。
•Accept
告诉WEB服务器自己接受什么介质类型,/表示任何类型,type/*表示该类型下的所有子类型。
•Accept-Encoding
浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)。
•Accept-Language
浏览器申明自己接收的语言。语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等。
•Accept-Charset
浏览器告诉服务器自己能接收的字符集。
•Referer
浏览器向WEB 服务器表明自己是从哪个网页URL获得点击当前请求中的网址/URL。
• Refresh
表示浏览器应该在多少时间之后刷新文档,以秒计时。
•Cookie
可向服务端传递数据一种模型。
●请求体
客户端传递给服务器的数据。比如:表单使用post方式提交的数据、上传文件数据等。
●请求方式
•GET
向指定的资源发出“显示”请求。
GET请求中会将请求中传递的数据包含在URL中并在浏览器的地址栏中显示。
GET请求传递数据时要求数据必须是ASCII字符。
GET请求可以被浏览器缓存。
•POST
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。
数据被包含在请求体中。
POST请求传递数据时,数据可以是ASCII字符也可以是字节型数据,默认为字符型。
POST请求默认情况下不会被浏览器所缓存。
•HEAD
向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头度中的元信息。
•PUT
向指定资源位置上传其最新内容。
•DELETE
请求服务器删除Request-URI所标识的资源。
•TRACE
回显服务器收到的请求,主要用于测试或诊断。
• OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用“*来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
•CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
●GET和POST的区别
•GET请求会被浏览器主动cache,而POST不会,除非手动设置。
• GET请求只能进行url编码,而POST支持多种编码方式。
•GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
•GET请求在URL中传送的参数是有长度限制的,而POST则没有。对参数的数据类型GET只接受ASCII字符,·POST既可是字符也可是字节。
•GET相比POST来说不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
•GET参数通过URL传递,POST放在Request body中。
●HTTP协议的响应
Response消息由三部分组成:
·第一部分:Response line
·第二部分:Response header
•第三部分:Response body。
●响应行
和请求消息相比,响应消息多了一个“响应状态码”,它以“清晰明确”的语言告诉客户端本次请求的处理结果。HTTP状态码分类,共分为5种类型:
①1xx 信息,服务器收到请求,需要请求者继续执行操作
②2xx 成功,操作被成功接收并处理
③3xx 重定向,需要进一步的操作以完成请求
④4xx 客户端错误,请求包含语法错误或无法完成请求
⑤5xx 服务器错误,服务器在处理请求的过程中发生了错误
●常见状态码及含义
•200 请求成功,已经正常处理完毕
•301 请求永久重定向,转移到其它URL
•302 请求临时重定向
•304 请求被重定向到客户端本地缓存
•400 客户端请求存在语法错误(客户端传递的数据类型不是后端想要的类型).401-客户端请求没有经过授权
•403 客户端的请求被服务器拒绝,一般为客户端没有访问权限
•404 资源未找到,客户端请求的URL在服务端不存在
•405 请求方式不支持
•500 服务端出现异常
●响应头
响应头用于告知浏览器当前响应中的详细信息,浏览器通过获取响应头中的信息可以知道应该如何处理响应结果。响应头中信息的格式为key:value。
Content-Type:text/html;charset=UTF-8
Content-Length:510
Date: Sat, 07 Nov 2028 17:24:25 GMT
Keep-Alive:timeout=20
Connection: keep-alive
• Date
响应的Date使用的是GMT时间格式,表示响应消息送达时间。
• Content-Encoding
文档的编码(Encode)方式。用gzip压缩文档能够显著地减少HTML文档的响应时间。
• Content-Length
表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。
• Content-Type
表示响应的文档属于什么MIME类型。
•MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
MIME作用:HTTP协议所产生的响应中正文部分可以是任意格式的数据,保证接收方能看得懂发送方发送的正文数据,HTTP协议采用MIME协议来规范正文的数据格式。
●响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码。
四、服务器
硬件服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高,因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。
软件服务器(Server),也称伺服器。指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。
●应用服务器或web容器:
应用服务器:实现了JavaEE 13种规范
web容器:实现了JavaEE部分规范 Tomcat
●Tomcat容器:
将引用程序部署在Tomcat容器中,由容器运行应用程序,可以通过客户端(浏览器)访问容器中部署的应用程序.
五、Servlet
•Servlet是Server Applet的简称,称为服务端小程序,是JavaEE平台下的技术标准,基于Java语言编写的服务端程序。Web 容器或应用服务器实现了Servlet标准所以Servlet需要运行在Web容器或应用服务器中。Servlet主要功能在于能够在服务器中执行并生成数据。
•Servlet指的是一个接口规范,具体的体现为接口及其接口的实现类。该接口的名字就是Servlet
•Servlet是JavaWeb开发的三大组件之一(另外两个是过滤器filter与监听器listener)
●编写Servlet的步骤
•自定义一个类,继承HttpServlet
•重写service方法(写的就是业务处理的代码)
•在web.xml中对Servlet进行配置
●Servlet生命周期:
•第一次访问Servlet时,Servlet会被创建及初始化.
•只会在第一次访问时被创建和初始化,后续在访问不会再创建。(只创建一次)
•Servlet会在Tomcat关闭时被销毁。
●手动设置:Tomcat启动时,该Servlet就会被创建,数字越小创建时机就会越早
•Tomcat启动Servlet会被创建,只创建1次.
•Servlet会在Tomcat关闭时被销毁.
六、Servlet的继承结构
• tomcat服务器是支持Servlet规范的。代码要想被服务器调用到,也必须遵守Servlet规范
•在Java中提到规范,其实就是接口,及接口的一系列实现类
•Servlet接口有它的一系列实现类,继承这些实现类,也就相当于间接的实现了Servlet接口
●继承结构体系
对各个继承结构的详细描述:
• Servlet接口,只负责定义Servlet程序的访问规范
•GenericServlet类实现了Servlet接口,做了很多空实现。并持有一个ServlotConfig类的引用,并对Servietconfg的使用做了一些方法
•HttpServlet抽象类实现了service方法,并实现了请求的分发处理
String method = reo.cetMethod():
得到的method是POST或者GET,然后走doGet或doPost
根据自己的业务需求重写service或者doGer或者doPost方法
●tomcat服务器在接收到浏览器的请求后,会调用自定义的Servlet的service方法处理器\请求,如果当前自定义的Servlet类没有service方法会调用父类的service方法进行处理。
tomcat服务器本质上是不区分请求是post请求还是get请求,只要来了请求,它都直接调用对应的Servlet对象的service方法。注意this关键字的含义
七、请求(HttpServletRequest)
●service方法的作用
在service方法中编写处理请求的业务逻辑代码,浏览器发送请求后由tomcat服务器自动调用执行。
●service方法的方法体
service方法中写业务逻辑代码的话,如下三步:
①获取请求数据
②处理请求数据
③响应结果
●HttpServletRequest对象获取请求数据
•request对象的来源
浏览器发送请求后,由tomcat服务器接收到,然后对请求的信息进行解析,将解析结果封装到HttpServletRequest和HttpServletResponse两个对象中。
然后tomcat通过反射调用service方法的时候,又将这两个对象传递给了service方法。
•request对象的特点
①在tomcat服务器接收请求后,对请求进行解析后创建的
②每次请求,tomcat服务器都会重新创建
③request对象存储了此次请求的所有数据(http协议中的请求行、头、体)
●request对象的使用
①request对象获取请求行数据
② request对象获取请求头数据
③request对象获取请求体数据
④request对象获取其他数据
八、MVC分层开发模式
●作用:
将代码根据不同的功能进行分层开发(分层也就是不同的包)
●特点:
•降低代码的冗余,提高代码的重用性
•提高了代码的阅读性
•便于后期的维护升级
•降低代码之间的耦合度
●概念:
•M:Model模型(service+dao+pojo)
•v:View视图(HTML页面+JSP页面)
•C:Controller控制器(Servlet)
●使用:
MVC分层开发落地的使用,也就是创建不同的包,然后在不同的包中写功能不同的代码。具体的包结构如下:
•com.bjsxt.controller 编写Servlet代码
•com.bjsxt.service 编写业务层的接口
•com.bjsxt.service.impl 编写业务层的实现类
•com.bjsxt.dao 编写持久层的接口
•com.bjsxt.dao.impl 编写持久层的接口实现类
•com.bjsxt.pojo 编写实体类
①有些项目中会将实体类的包名命名为entity或者domain,和pojo是一个意思,只是名字不同而已
②有些项目中也可能会有po这个包,persistant object,持久对象的意思。类似于pojo,表示与数据库中的表相对应的java对象
③有些项目中也可能会有vo这个包,value object,值对象的意思。通过它用于业务层之间的数据传递,和po一样里面就放java对象,它可以和表对应,也可以不对应
④有些项目中也可能将控制层包的名字写为web或者action
●DAO层开发模式
上面的MVC分层开发中有dao包,dao,data access object,即数据访问对象。一般称为dao层或者持久层。它里面需要写dao层接口及实现类,具体的代码就是操作数据库,对数据库进行增删改查的。
九、响应(HttpServletResponse)
●response对象的作用
响应对象,用来响应浏览器发起的请求,其中封装了响应结果数据及客户端的一些信息等。
●特点:
•由Tomcat接收到请求后完成创建,并作为实参传递给对应的service方法使用
•每次请求都会重新创建,请求结束后即销毁。
•程序员在service方法中直接调用即可。
•HttpServletResponse是一个接口,service方法接收到的是实例化对象。
●使用respose对象完成数据的响应
response对象是由Tomcat收到请求后实例化创建的,直接调用它的响应方法即可,Tomcat底层会将response响应的内容自动转换为HTTP协议的格式,输出给浏览器。
响应内容可以直接是数据,也可以是数据+HTML标签+CSS样式+JS脚本。
●使用response对象设置响应头
使用response对象完成响应的时候,Tomcat会自动将响应内容转换为HTTP的响应格式,但是同时也可以使用response对象自定义设置响应头。
十一、请求转发和请求重定向
●请求转发:可以在A Servlet的service方法中调用B Servlet的service方法接着进行业务的处理。
但是Servlet对象是由服务器创建的,service方法也是由服务器进行调用的,不能自己去调用。
在A Servlet的service方法中写一行特殊的代码,告诉tomcat服务器,让服务器去调用B Servlet的service方法接着进行请求的处理。
●特点
①请求转发是一次请求,地址栏地址不变,还是访问第一个Servlet的地址
②请求转发是一次请求,所以转发内的条个Servlet共享一个request对象
③请求转发是Tomcat服务器内部的行为,用户是看不到的
④可以使用req.setAttribute(key,value)和getAttribute(key)实现请求转发内的Servlet的数据的流转
•每个Servlet的访问方式就会有两种:
①浏览器直接发起请求访问
②其他Servlet通过请求转发访问
•请求转发可以实现在后端Servlet之间的相互调用,一个请求由一个Servlet处理,转变为了多个Servlet的协同处理。
●请求重定向
①重定向是两次请求,地址栏信息改变,地址会变成第二次请求的地址
②重定向的地址是浏览器收到第一次请求响应回来的地址,自动跳转的,用户不参与
③重定向的两次请求,request对象是不同的
●请求转发与请求重定向的比较
请求转发:
请求转发是一次请求,是Tomcat服务器内部的行为,共享同一个request对象。浏览器只需要发一次请求即可将业务处理完毕。一般浏览器发起的查询功能会使用请求转发来完成请求的处理及结果的响应。
而浏览器发起的是增删改的请求,如果使用请求转发来处理的话,因为转发后的地址栏信息是不变的,容易造成用户刷新页面后表单重复提交。
重定向:
重定向是两次请求,地址栏信息会改变。一般用户的增删改请求会使用重定向的方式来处理请求。目的是保护第一次请求,避免用户因刷新页面造成表单重复提交。
•不论是请求转发还是请求重定向,都会涉及到多个Servlet。
十二、Cookie
• Cookie是浏览器端的数据存储技术
•浏览器每次发起请求的时候,请求信息中就包含了Cookie中存储的数据
•Cookie不适合大量数据的存储(每个Cookie存储的数据不超过4KB)
•不安全 不适合存储重要的数据到浏监器端
●Cookie的存活设置
Cookie是可以设置在浏览器的存活时间的。
使用setMaxAge)方法可以设置存活时间:
•正数:表示在指定的秒数后过期
•负数:表示浏览器一关,Cookie就会被删除(默认是-1)
•零:表示马上删除Cookie
●Cookie的path属性
Cookie的path属性可以有效的过滤哪些Cookie可以发送给服务器,哪些不发。path属性是通过请求的地址来进行有效的过滤。
如果不设置path属性,那Cookie的有效路径是当前项目。
● Cookie的domain属性
域名对应的就是ip地址。比如:www.baidu.com是百度的域名,那这个域名对应的ip地址是:182.61.200.7。
域名一般是以www开头,以com结尾。
域名分为:顶级(一级)域名、二级域名。
比如:www.baidu.com是顶级域名、.baidu.com是二级域名
Cookie是不支持顶级域名的跨域,支持二级域名的跨域。
比如:在www.baidu.com这个一级域名中存储的Cookie值,在www.jd.com这个一级域名中是拿不到的!但是在news.baidu.com这个二级域名中是可以拿到的。
Cookie有domain属性,可以通过domain属性设置访问该Cookie的域名。如果设置为“www.itbz.com”,则只能是"www.itbz.com”可以访问。如果设置为".itbz.com",则以".itbz.com"结尾的域名都可以访问到该Cookie。