B/S(Browser/Server,浏览器/服务器)结构是Web兴起后的一种网络结构模式,Web浏览器是客户端最主要的应用软件。
B/S最大的优点就是可以在任何地方进行操作而不用安装任何专业的软件,只要有一台能上网的计算机就能使用,客户端零安装、零维护,系统的扩展也非常容易。
B/S模式的三层架构通常就是指将整个业务应用划分为:界面层(User Interface Layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data Access Layer)。三层其实是指逻辑上的三层,即把这三个层放置到一台机器上,区分层次的目的主要是将业务规则、数据访问、合法性校验等工作放到了中间层进行处理,客户端不直接与数据库进行交互,而是通过COM/DCOM通信与中间层建立连接,再经由中间层与数据库进行交互,体现了“高内聚低耦合”的思想。
(1)界面层:主要用于接受用户的请求,以及数据的返回,为用户提供管理系统的访问。
(2)业务逻辑层:主要负责对业务逻辑和功能的操作,也就是把一些数据层的操作进行组合。将浏览器和数据层屏蔽,安全性更高。
(3)数据访问层:主要看数据层里面是否包含逻辑处理,实际上它的各个函数主要完成对数据文件的各种操作,而不必管其他操作对这三层进行明确分割,并在逻辑上使其独立。
B/S结构的主要特点如下。
(1)维护和升级方式简单。当前,软件系统的改进和升级越发频繁,B/S架构的产品明显体现着更为方便的特性。B/S架构的软件最主要的是管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行。如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。
(2)成本降低,选择更多。凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性也高,不管用户选用哪种浏览器都可以保证操作不受影响。此外,Linux除了操作系统是免费的以外,数据库也是免费的,这种选择非常盛行。
(3)应用服务器运行数据负荷较重。由于B/S架构管理软件只安装在服务器端(Server),网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器端完全通过浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。所以,应用服务器运行数据负荷较重,一旦发生服务器“崩溃”等问题,后果不堪设想。因此,许多单位都备有数据库存储服务器,以防万一。
HTTP(HyperText Transfer Protocol,超文本传输协议)是用于从网络服务器传输超文本到本地浏览器的传送协议。
HTTP是无状态协议,依赖于瞬间的请求处理。
客户端每次需要更新信息都必须重新向服务器发起请求,客户端接收到服务器端返回的信息后才能再刷新屏幕显示的内容。
步骤1:建立连接。客户端与服务器建立TCP连接。
步骤2:发送请求。打开一个连接后,客户端把请求信息发送到服务器的相应端口上,完成请求动作提交。
步骤3:发送响应。服务器在处理完客户端请求之后,要向客户端发送响应消息。
步骤4:关闭连接。客户端和服务器端都可以关闭套接字来结束TCP/IP对话。
web.xml文件本质上就是一个XML文件,是一种用于存储、交换和共享数据的文件。
一个合法且格式良好的XML文档应该满足以下常见的基本要求。
(1)文档必须包含一个或多个元素(不能为空)。
(2)每个XML文档有且仅有一个声明。
(3)每个XML文档有且仅有一个根元素。
(4)每个XML标记严格区分大小写,开始标记与结束标记配对出现或者空标记关闭。
(5)标记可以嵌套但不可以交叉。
(6)属性必须由名称和值构成,出现在元素开始标记中,必须用引号引起来。
(1)version属性用于指定XML规范版本,由于1.1版本尚未得到大多数解析器的支持,除非遇到Unicode字符在1.0不能使用的特殊情况,一般均采用1.0版本,该案例的版本指定为1.0。
(2)standalone属性用于指定是否允许使用外部声明,可设置为yes或者no,主要是起到对解析器进行提示的作用,一般情况下不进行指定,默认为yes,该案例指定为yes。
(3)encoding属性用于指定文档使用的字符编码方式,默认为UTF-8,它不能显示中文,中文的编码方式为GB2312或GBK,其中,GB2312仅支持简体汉字,GBK则支持简体中文、繁体中文、日语、韩语等,该案例的字符编码方式指定为GB2312。
Web容器又是按照ServletContext→Context-param→Listener→Filter→Servlet的顺序来加载的。所以,在web.xml文件中最好按照这种顺序配置这些元素,以兼容较低版本的Tomcat,获得最好的效果。
Web容器启动时,加载过程具体如下。
(1)启动一个Web项目的时候,Web容器会去读取它的配置文件web.xml,读取
和 两个结点。 (2)容器创建一个ServletContext(Servlet上下文),这个Web项目的所有部分都将共享这个上下文。
(3)容器将
转换为键值对,并交给ServletContext。 (4)容器创建
中的类实例,创建监听器。 (5)在Web程序运行过程中,动态加载其他的元素。
所有元素的顺序大致如下。
(1)根元素:web.xml文件的最主要的配置信息都包含在这个元素之内 。
(2)Web应用图标元素:指出IDE和GUI工具用来表示Web应用的大图标和小图标,如指定图标对应图片的文件是app_small.gif和app_large.gif。
(3)Web应用名称元素:提供GUI工具可能会用来标记这个特定的Web应用的一个名称,如指定应用名称为Tomcat Example。
(4)Web应用描述元素:给出与此相关的说明性文本,例如:
(5)上下文参数元素:声明应用范围内的初始化参数,在Servlet里面可以通过getServletContext().getInitParameter("context/param")得到。如初始化名字为ContextParameter、值为test、说明文本为“It is a test parameter.”的配置为:
(6)过滤器配置元素:将一个名字与一个实现javaxs.servlet.Filter接口的类相映射(关联),如将setCharacterEncodingFilter类和setCharacterEncoding过滤器相映射的配置为:
(7)监听器配置元素,如指定listerner-class为SessionListener类的配置为:
(8)Servlet配置元素,又分为基本配置和高级配置两种,只指定基本信息的基本配置如下。
指定param-name、param-value、description、role-name等信息的高级配置则如下。
(9)会话超时配置元素(单位为min),例如,指定会话超时不超过120s的配置为:
(10)MIME类型配置元素,如指定extension和mime-type的配置为:
(11)指定欢迎文件页配置元素,如指定welcome-file为index.jsp的配置为:
(12)错误页面配置元素,该配置有以下两种方法。
方法1:通过错误码来配置error-page,如通过错误码来配置404错误。
方法2:通过异常的类型配置error-page,如通过异常的类型配置空指针异常错误。
等等。。
面试者:请简述C/S与B/S的区别。
应聘者:主要有以下8个方面的不同。
1. 硬件环境的不同
C/S:一般建立在专用的网络上,小范围里的网络环境、局域网之间再通过专门的服务器提供连接和数据交换服务。
B/S:建立在广域网之上的,不必是专门的网络硬件环境,有比C/S更强的适应范围,一般只要有操作系统和浏览器就行。
2. 对安全要求不同
C/S:一般面向相对固定的用户群,对信息安全的控制能力很强。高度机密的信息系统一般采用C/S结构。
B/S:建立在广域网之上,对安全的控制能力相对较弱,可能面向不可知的用户。
3. 对程序架构不同
C/S:程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。B/S:对安全以及访问速度的多重考虑,建立在需要更加优化的基础之上。
4. 软件重用不同
C/S:程序可以不可避免地整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好。B/S:对多重结构,要求构件相对独立的功能。
5. 系统维护不同
C/S:程序由于整体性,必须整体考察、处理出现的问题以及系统升级。
B/S:构件组成,方便个别构件的更换,实现系统的无缝升级。
6. 处理问题不同
C/S:程序可以处理用户面固定,并且在相同区域,安全要求高,与操作系统相关。
B/S:建立在广域网上,面向不同的用户群,地域分散,这是C/S无法做到的。
7. 用户接口不同
C/S:多是建立在Windows平台上,表现方法有限,对程序员普遍要求较高。
B/S:建立在浏览器上,与用户交流时有更加丰富和生动的表现方式;并且大部分难度降低,降低了开发成本。
8. 信息流不同
C/S:程序一般是典型的中央集权的机械式处理,交互性相对较低。
B/S:信息流向可变化,B-B、B-C、B-G等信息、流向的变化,更像是交易中心。
面试者:请写出几个web.xml中常用的元素或者标记及其用法。
应聘者:
1.
filter元素用来声明filter的相关配置。filter元素主要的子元素及其用途如下。
(1)
Filter的名称 定义Filter的名称。(2)
Filter的类名称 定义Filter的类名称。2.
filter-mapping元素主要的子元素及其用途如下。
(1)
Filter的名称 定义Filter的名称。(2)
Filter所对应的URL 定义Filter所对应的URL。(3)
REQUEST→INCLUDE→FORWARD→ERROR设定Filter对应的请求方式,有REQUEST、INCLUDE、FORWARD、ERROR 4种,默认为REQUEST。3. servlet-mapping元素包含的两个子元素及其用途如下。
(1)
Servlet的名称 定义Servlet的名称。(2)
Servlet URL 定义Servlet所对应的RUL。