B/S( Browser / Server):即浏览器/服务器,访问的网站资源存放在服务器,无论服务器存放什么,客户端只需要安装一个浏览器,通过这个浏览器访问服务器的资源,B/S架构也有客户端,用户使用浏览器访问,浏览器和用户就是客户端。
C/S(Client/Server):即客户端/服务器, 控制台程序(命令行程序),桌面程序(Winows程序),例如QQ,视频播放器,迅雷下载;
静态资源与动态资源的区别?
客户端请求的页面如果是静态网页,那么服务器会直接把静态网页的内容响应给客户端;如果客户端请求的是动态网页,服务器要先把动态网页转换成静态网页,然后再把转换后的静态网页响应给客户端。
协议:双方通信的格式,协议的甲乙双方就是客户端(浏览器)和服务器。
HTTP协议:即超文本传输协议,这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。HTTP就是一个通信规则,通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。其实我们要学习的就是这两个格式!客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。
http是应用层协议,TCP/UDP是传输层协议
请求响应的步骤:
在浏览器地址栏输入URL,按下回车后发生了什么?
请求(request)协议的格式:
浏览器发送给服务器的内容就这个格式的,如果不是这个格式服务器将无法解读!
get请求:get请求没有请求体
post请求:POST请求有请求体
响应内容:响应内容是由服务器发送给浏览器的内容,浏览器会根据响应内容来显示。
响应协议格式:
响应码:
Servlet是JavaWeb的三大组件(Servlet,Listener,Filter)之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。
实现Servlet有三种方式:
javax.servlet.Servlet接口;javax.servlet.GenericServlet类;抽象类,实现了Servlet接口javax.servlet.http.HttpServlet类;GenericServlet类的子类Servlet的生命周期: 初始化、服务,以及销毁。与Servlet的生命周期相关的方法有:
void init(ServletConfig config);void service(ServletRequest request, ServletResponse response);void destroy();
Servlet的创建:
服务器会在Servlet第一次被访问时创建Servlet,或者是在服务器启动时创建Servlet。如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置。也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。
让服务器在启动时就创建Servlet,在元素中配置元素可以让服务器在启动时就创建该Servlet,其中元素的值必须是大于等于0的整数,它的使用是服务器启动时创建Servlet的顺序。
一个Servlet类型,服务器只创建一个实例对象;在Servlet被创建后,服务器会马上调用Servlet的void init(ServletConfig config)方法。我们可以把一些对Servlet的初始化工作放到init()方法中!
Servlet服务:
当服务器每次接收到请求时,都会去调用Servlet的service()方法来处理请求。服务器接收到一次请求,就会调用service() 方法一次,所以service()方法是会被调用多次的。正因为如此,所以我们才需要把处理请求的代码写到service()方法中!
Servlet的销毁:
Servlet是不会轻易销毁的,通常都是在服务器关闭时Servlet才会销毁!在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servlet的destroy()方法,我们可以把对某些资源的释放等代码放到destroy()方法中。
测试生命周期方法:
在首次访问HelloServlet时,init()方法会被执行,而且也会执行service()方法。再次访问时,只会执行service()方法,不再执行init()方法。在关闭Tomcat时会调用destroy()方法。
Servlet接口相关类型:
ServletConfig:init()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml文件中的元素。ServletRequest:service() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;ServletResponse:service()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要使用这个对象;Servlet不是线程安全的,但效率高
线程不安全的三个条件
如何避免线程不安全:
Servlet一般就这么用 HttpServlet类是GenericServlet的子类,它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。
HttpServlet覆盖了service()方法,源代码如下:


doGet()和doPost():
在HttpServlet的service(HttpServletRequest req, HttpServletResponse resp)方法会去判断当前请求是GET还是POST,如果是GET请求,那么会去调用本类的doGet()方法,如果是POST请求会去调用doPost()方法,这说明我们在子类中去覆盖doGet()或doPost()方法即可。
由于现在都是使用SpringBoot进行项目开发,很少会去自定义Servlet,这里就不再赘述关于ServletConfig、Request、Response、域对象以及编码等相关细节。
JSP(Java Server Pages)是JavaWeb服务器端的动态资源。它与html页面的作用是相同的,显示数据和获取数据。
JSP = html + ·Java·脚本(Java代码) + JSP标签(指令,JSP标签库,EL表达式,JSTL) , Web2.0 :jsp页面中使用标签替换Java代码
JSP脚本就是Java代码片段,它分为三种:
<%...%>:Java语句;方法中能写的代码,它都能写<%=…%>:Java表达式;resp.getWriter().Write(“”);write能输出什么,它就能写什么,就是做输出<%!...%>:Java定义类成员;类中能写的代码,他都能写(定义成员变量和方法),极少使用Cookie
Cookie是HTTP协议的规范之一,它是服务器和客户端之间传输的小数据。Cookie传输给客户端,客户端会将Cookie保存起来。Cookie,发送给服务器。Cookie就是服务器保存在客户端的数据!Cookie就是一个键值对!!!Cookie规范
Cookie通过请求头和响应头在服务器与客户端之间传输;Cookie大小限制在4KB之内;20个Cookie;300个Cookie;Cookie规范是如此,但在今天,浏览器厂商的竞争异常激烈,所以多少会超出Cookie规则的限制。但也不会超出过多!什么是session
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
session的原理
session是依赖Cookie实现的。session是服务器端对象,当用户第一次使用session时(表示第一次请求服务器),服务器会创建session,并创建一个Cookie,在Cookie中保存了session的id,发送给客户端。这样客户端就有了自己session的id了。但这个Cookie只在浏览器内存中存在,也就是说,在关闭浏览器窗口后,Cookie就会丢失,也就丢失了sessionId。
当用户第二次访问服务器时,会在请求中把保存了sessionId的Cookie发送给服务器,服务器通过sessionId查找session对象,然后给使用。也就是说,只要浏览器容器不关闭,无论访问服务器多少次,使用的都是同一个session对象。这样也就可以让多个请求共享同一个session了。
当用户关闭了浏览器窗口后,再打开浏览器访问服务器,这时请求中没有了sessionId,那么服务器会创建一个session,再把sessionId通过Cookie保存到浏览器中,也是一个新的会话开始了。原来的session会因为长时间无法访问而失效。
当用户打开某个服务器页面长时间没动作时,这样session会超时失效,当用户再有活动时,服务器通过用户提供的sessionId已经找不到session对象了,那么服务器还是会创建一个新的session对象,再把新的sessionId保存到客户端。这也是一个新的会话开始了。
session与浏览器 session对象是保存在服务器端的,而sessionId是通过Cookie保存在客户端的。
因为Cookie不能在多个浏览器中共享,所以session也不能在多个浏览器中共享。也就是说,使用IE登录后,再使用FireFox访问服务器还是没有登录的状态。而且同时打开多个相同浏览器的窗口,是在使用同一session。如果你使用的是老浏览器,例如IE6,那么就会每个窗口一个session。
Session和Cookie的主要区别:session存储在服务器端,cookie存储在浏览器端cookie安全性更低,由于数据存储在浏览器,可以被伪造和修改Cookie大小限制在4KB之内;一台服务器在一个客户端最多保存20个Cookie;一个浏览器最多可以保存300个Cookie;