一:B/S 和 C/S的区别
Browser 和 Server, 以及 Client和 Server.
在BS中 采用3层结构 1:界面(浏览器) 2:业务逻辑层 3:服务器
大部分的业务逻辑在业务层处理,主体功能全在服务器上。耦合度更低
在CS中采用2层结构 1:客户端 2:服务器 。
利用硬件优势,可以对业务逻辑合理的进行分配
BS优于CS架构的地方
1:对硬件要求低,对跨操作系统,对于所有的操作系统只要安装浏览器,均可以使用。 而在CS中,因为要安装客户端的应用,所以对电脑硬件有一定的要求(不如一些电脑对大型游戏并不适合),跨操作系统,跨服务器更难(很多客户端,多对操作系统有明确的要求,并且数据互通也是难题)。
2:B/S维护方便(遇到软件或者应用升级,只要在服务器端进行):。
而在C/S中要维护之后,所有的用户都要进行升级,不仅对客户机造成的极大的不便。当用户变多的时候,全部升级,对数据库也是一种考验。
3:共享性能强,均可通过广域网访问。
CS架构优于BS的地方
1:安全性能强,里面可以通过设置多重的验证,加大安全性。
2:由于直接和服务器进行交互,没有中间层, 所以访问速度快,画面流畅。
3:界面简单,操作更丰富。界面不需要刷新(浏览器经常需要刷新)。
二:什么是Servlet?
在早期的web 服务器(一种放在因特网的计算机程序),不能够处理动态的页面请求,功能性不强,所以开发了
Servlet来扩展Web 功能。
而Servlet 是一种规范性的
软件,可以部署到
容器中运行。容器就是提供组件(servlet)的运行环境。
万维网客户(浏览器)
万维网服务器(web 服务器)
1:发送 TCP链接请求(ip,端口号)
1.1建立链接
2: HTTP请求报文
2.1 接受请求报文,发送响应报文
3: 收到文档,解析显示页面
1:浏览器发送IP地址和端口号,和web服务器建立链接。
2:链接建立成功以后,万维网客户将请求按照HTTP协议(超文本传输协议),进行打包,然后发送给web服务器
3:tomcat容器,对HTTP打包的数据进行解析 并且创建 request 的对象(存储请求解析后的数据)和response(存储servlet逻辑处理后的结果)。
注:这里我们注意到,仅仅是数据包是被tomcat 解析,并且由tomcat创建request进行存储数据。即所有的数据都是在tomcat层面上。
4:创建Servlet对象(一个java类实现Servlet接口,或者继承HttpServlet对象。)通过service();对tomcat 容器保存的 request的对象进行调用。
5:Servlet调用了request对象之后,在servlet里面进行逻辑处理。
6:Servlet逻辑处理之后将处理的结果,保存到 response对象当中。并返回给tomcat
7:tomcat获取处理结果后,打包 发送HTTP响应报文(
该报文是逐步发送,逐步解析的)给浏览器,浏览器对HTTP报文进行解析,生成响应的界面界面。
三:转发和重定向
重定向: response.sendRedirect(String url); 跳转页面。
转发:一个Servlet或JSP,将未完成的组件交给另一个组件去处理。转发的地址不变(两个组件共用同一个请求。)
未完成的Servlet的组件,怎么将数据转发到另一个组件,去完成剩下的功能。
step 1: 把数据绑定到request 上
request.setAttribute(String name ,Object object);
step 2:获得转发器
RequestDispatcher rd = request.getRequestDispatcher(
String uri);
step 3: 转发 rd.forword(request,response);
两者最大的区别在于转发可以共用一个请求,重定向是创建新的请求
四:Servlet的生命周期
在服务器和浏览器进行连接的时候,采用的是,一次请求,一次连接。所以在服务器端的Servlet软件,自然有生命周期。
Servlet 的生命周期几个阶段
一:实例化阶段
在浏览器向服务器发送请求后,tomcat,要将request传给Servlet 会调用Servlet构造器,创建Servlet对象。 这是一种当浏览器发送请求的时候,Servlet被实例化,还有一种情况:容器事先创建。
需要配置
参数。参数值是一个大于等于0
的整数,越小优先级越高(先被创建)。
注:
容器在默认情况下,对于某个
类型的servlet,只会创建一个
实例。
二:初始化阶段
调用 init()方法
三:就绪
在创建Servlet之后,Servlet 会用service()方法,获取tomcat的请求来作为参数进行逻辑处理。
四:销毁。
当Servlet将处理的结果,通过response对象传递给Tomcat,Tomcat在将结果传给浏览器前,调用 Servlet的 destroy方法,销毁Servlet(典型的过河拆桥)。
所以Servlet的什么周期是,服务器接收到浏览器的请求开始,到服务器将结果发送响应报文到服务器前结束。
生命周期相关的几个接口与类
1)Servlet接口
init(初始化)
service(就绪)
destroy(销毁)
2)GenericServlet抽象类
实现了Servlet接口中的部分方法
(init,destroy)。
3)HttpServlet抽象类
继承了GenericServlet,实现了
service方法。
五:Cookies(消息头)和Session
cookies和session ,常常用来保存或者说获取web客户信息。(比如登录信息自动保存,以及购物车类型,在不同页面进行交互的时候,依然能得到之前的录入的信息。)
cookies 和session的区别是,cookies是存储到浏览器内存中,在有效时间内,当浏览器关闭的时候,存储到硬盘当中。而session是存储在服务器中的。
从他们存储方式,我们可以看出,如果大量的用户信息保存在硬盘中是不安全的,而保存在服务器,会对服务器造成存储信息。所以在浏览器客户,一些非重要信息,比如输入文字,搜索信息。常常以Cookies消息头的方式保存在浏览器客户端。而一些涉及安全问题,比如登录信息常常保存在服务器中。
session.setAttribute(String name,object );和request.setAttribute(String ,object ) 的区别。
我们知道在转发和重定项的最大的区别就是能否共用同一个请求,在转发中,由于可以共用同一个请求,所有可以对该请求存储一些数据,然后传给转发的界面(同一界面)request.setAttribute() ;
在重定向中,这种方法就不适用了,这适合 保存到服务器中的HttpSession对象,就可以对数据进行传送。 当然在他们的目的界面,对应的getAttribute(String name);方法来换取