Java 程序员面试笔试宝典 第 5 章 Java Web: 5.1 Servlet 与 JSP(13-17题)

5.1.13 JSP 中 include 指令和 include 动作有什么区别

include 的主要作用是用来在当前文件中引入另外一个文件,以便在当前文件中使用,例如,当应用程序中的所有页面的某些部分(例如标题、页脚、导航栏等)都一模一样时,就可以考虑把相同的部分提取出来写入一个单独的文件中,然后通过 include 方式引入。

include 有两种使用方法:include 指令和 include 动作。其中,include 指令的使用方法为:<%@include file="test.jsp"%>,include 动作的使用方法为:<jsp:include page="test.jsp"flush="true"><jsp:param name="name"value="value"/></jsp:include>。

include 指令与 include 动作之间的根本性差异在于二者被调用的时间。include 指令是编译阶段的指令,即在编译时,编译器会把指令所指向目标文件的内容复制到指令所在的位置,替换指令,最终形成一个文件,在运行时只有一个文件。也就是说,include 指令所包含文件的内容是在编译时插入到 JSP 文件中的,当文件内容有变化时就需要重写编译,因此适合于包含静态页面的情况,例如可以包含一个 Servlet。

而 include 动作是运行时的语法,在主页面被请求时,才将用到的页面包含进来,涉及两个文件,类似于方法调用,因此更适用于包含动态页面的情况。除此之外,二者的差别还有以下 3 点:

1)当使用 include 动作时,在页面中声明的变量不可用于另一文件,除非将变量放置在 request、session、application 作用域中;而在使用 include 指令时,当前页面和被包含页面可以共享变量。

2)当使用 include 指令时,新生成的 JSP 页面要符合 JSP 语法要求,应该避免变量名的冲突;而在使用 include 动作时,不存在变量名冲突问题。

3)include 指令会修改被包含文件,但不会立即生效,除非修改主页面或删除主页面的类;而 include 动作修改了被包含的文件,会立即生效。

考虑到 include 动作在维护上的优势,当这两种方法都适用时,优先考虑使用 include 动作。仅在所包含文件中定义了主页面要用到的字段或方法,或所包含文件设置了主页面的响应报头时,才应该使用 include 指令,例如,很多站点的导航部分和版权信息部分都是相同的,在每个文件中都会出现,所以可以考虑把这些内容放在单独的文件中,然后使用 <%@in-clude%> 指令引用即可。


5.1.14 会话跟踪技术有哪些

在开发 Web 应用程序时,经常需要能够做到数据共享或者是在不同页面之间可以传递参数,而且,一个会话中的数据可能会在不同的地方使用,因此就需要有专用的机制来传递和保存这些数据。

所谓会话,指的是从客户端打开与服务器的连接并发出请求到服务器响应客户端请求的全过程。

由于客户端与服务器端之间是通过 HTTP 进行通信的,而 HTTP 本身是无状态协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,在下一次请求时,需要重新建立连接,等到建立完连接后还需要判断是否是同一个用户,因此,要想对会话的过程进行监控,最好的方法就是使用会话跟踪技术。

具体而言,会话跟踪技术主要有如下 4 种:

1)page。代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java Servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 Servlet 又包括被编译成 Servlet 的 JSP 页面。

2)request。代表与 Web 客户端发送的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件。

3)session。代表与用于某个 Web 客户端的一个用户体验相关的对象和属性,一个 Web 会话可以也经常会跨越多个客户端请求。

4)application。代表与整个 Web 应用程序相关的对象和属性,这实质上是跨越多个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。

常见笔试题:

如果只希望在多个页面间共享数据,可以使用( )作用域。

A.request,session B.application session

C.request,application D.pageContext request

答案:A。见上面讲解。


5.1.15 Web 开发中如何指定字符串的编码

ISO-8859-1 用来编码拉丁文,它由单字节(0~255)组成。GB 2312、GBK 用来编码简体中文,由单字节和双字节混合组成,最高位为 1 的字节和下一个字节构成一个汉字,最高位为 0 的字节是 ASCII 码。UTF-8/UTF-16/UTF-32 是国际标准 UNI-CODE 的编码方式,UTF 的全称为 Unicode Translation Format,即把 Unicode 转作某种格式的意思。其中,使用最多的编码方式是 UTF-8,因为该方式在对拉丁文编码时节约空间,它的特点是对不同范围的字符使用不同长度的编码。

String 序列化成 byte 数组或反序列化时需要选择正确的编码方式,如果编码方式使用不正确,就会得到乱码。所以,在 Web 应用开发中,经常会遇到需要指定字符串的编码格式的情况,为了防止出现乱码,最好的方法就是指定编码格式。

下面的例子可以把字符串以 ISO-8859-1 的编码格式输出:

需要注意的是,在 Web 开发时也可以通过 response.setContentType()方法来指定 JSP 页面显示的编码格式。


5.1.16 什么是 Ajax

Ajax(Asynchronous JavaScript and XML,异步 JavaScript 与 XML)是一个结合了 Java 技术、XML 以及 JavaScript 的编程技术,其主要目的是在不刷新页面的情况下通过与服务器进行少量数据的交互来提高页面的交互性,减少响应时间,从而改善用户体验。使用 Ajax 技术后,页面就不需要在每次用户提交修改时重新加载了。

在使用传统软件架构开发的应用程序中,当客户端需要与服务器端频繁交互时,用户只有等整个页面重新加载后才能看到从服务器中获取到的资源信息,页面会被重新加载很多次。当前后两个页面中的大部分 HTML 代码相同时,这种做法就会非常浪费网络带宽,毕竟很多资源信息的获取都是重复无用的。

在这种情况下,如果使用 Ajax 技术会带来许多好处:首先,由于 Ajax 技术可以只向服务器发送并取回必需的数据内容,使得数据交互量大幅降低,从而降低了服务器的网络负载;其次,由于它通过使用 SOAP(Simple Object Access Protocol,简单对象访问协议,一种交换数据的协议规范)或其他一些基于 XML 的 Web Service 接口,在客户端采用 JavaScript 处理来自服务器的响应,也降低了 Web 服务器的处理时间;最后,由于不需要重新加载整个页面,因此系统有更短的响应时间,而这有利于提高系统的稳定性与可用性,从而增强用户的满意度。

需要注意的是,Ajax 技术是客户端技术,其核心是 JavaScript 对象 XmlHttpRequest,该对象是一种支持异步请求的技术,它使得开发人员可以使用 JavaScript 向服务器提出请求并处理响应,而不阻塞用户。


5.1.17 cookie 和 session 有什么区别

cookie 是在 HTTP 下,服务器或脚本可以维护客户工作站上信息的一种方式。它是由 Web 服务器保存在用户浏览器上的小文件,可以包含有关用户的信息(如身份识别号码、密码等信息)。session 是指用来在客户端与服务器端之间保持状态的解决方案以及存储结构。

尽管二者都能够进行信息存储,但是也存在着区别。具体而言,二者有以下几个方面的区别:

1)cookie 机制采用的是在客户端保持状态的方案,即数据存放在客户的浏览器上;而 ses-sion 机制采用的是在服务器端保持状态的方案,即数据放在服务器上。

2)cookie 安全性不够。由于 cookie 信息存放在客户端,其他人可以很容易地得到存放在本地的 cookie,并进行 cookie 欺骗;而 session 信息存放在服务器端,因此较为安全。

3)cookie 性能更高一些。由于 session 会在一定时间内保存在服务器上,因此当访问量增多时,会降低服务器的性能。

4)单个 cookie 保存的数据不能超过 4KB,很多浏览器都限制一个站点最多保存 20 个 cookie;而 session 不存在此问题。

鉴于以上几点区别,一般情况下,将用户登录信息等重要信息存放至 session 中,而其他需要保留的信息可以放在 cookie 中。

=======================================

end

发布了101 篇原创文章 · 获赞 20 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_40993412/article/details/104069140