115个Java面试题和答案——终极(下)

100.如何知道是哪一个客户端的机器正在请求你的Servlet?

 

ServletRequest类可以找出客户端机器的IP地址或者是主机名。getRemoteAddr()方法获取客户端主机的IP地址,getRemoteHost()可以获取主机名。看下这里的例子。

 

101.HTTP响应的结构是怎么样的?

 

HTTP响应由三个部分组成:

 

状态码(Status Code):描述了响应的状态。可以用来检查是否成功的完成了请求。请求失败的情况下,状态码可用来找出失败的原因。如果Servlet没有返回状态码,默认会返回成功的状态码HttpServletResponse.SC_OK。

 

HTTP头部(HTTP Header):它们包含了更多关于响应的信息。比如:头部可以指定认为响应过期的过期日期,或者是指定用来给用户安全的传输实体内容的编码格式。如何在Serlet中检索HTTP的头部看这里。

扫描二维码关注公众号,回复: 3417405 查看本文章

 

主体(Body):它包含了响应的内容。它可以包含HTML代码,图片,等等。主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的。

 

102.什么是cookie?session和cookie有什么区别?

 

cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区别:

 

无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。

在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。

 

103.浏览器和Servlet通信使用的是什么协议?

浏览器和Servlet通信使用的是HTTP协议。

 

104.什么是HTTP隧道?

 

HTTP隧道是一种利用HTTP或者是HTTPS把多种网络协议封装起来进行通信的技术。因此,HTTP协议扮演了一个打通用于通信的网络协议的管道的包装器的角色。把其他协议的请求掩盖成HTTP的请求就是HTTP隧道。

 

105.sendRedirect()和forward()方法有什么区别?

 

sendRedirect()方法会创建一个新的请求,而forward()方法只是把请求转发到一个新的目标上。重定向(redirect)以后,之前请求作用域范围以内的对象就失效了,因为会产生一个新的请求,而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。一般认为sendRedirect()比forward()要慢。

 

106.什么是URL编码和URL解码?

 

URL编码是负责把URL里面的空格和其他的特殊字符替换成对应的十六进制表示,反之就是解码。

 

JSP

 

107.什么是JSP页面?

 

JSP页面是一种包含了静态数据和JSP元素两种类型的文本的文本文档。静态数据可以用任何基于文本的格式来表示,比如:HTML或者XML。JSP是一种混合了静态内容和动态产生的内容的技术。这里看下JSP的例子。

 

108.JSP请求是如何被处理的?

 

浏览器首先要请求一个以.jsp扩展名结尾的页面,发起JSP请求,然后,Web服务器读取这个请求,使用JSP编译器把JSP页面转化成一个Servlet类。需要注意的是,只有当第一次请求页面或者是JSP文件发生改变的时候JSP文件才会被编译,然后服务器调用servlet类,处理浏览器的请求。一旦请求执行结束,servlet会把响应发送给客户端。这里看下如何在JSP中获取请求参数。

 

109.JSP有什么优点?

 

下面列出了使用JSP的优点:

 

JSP页面是被动态编译成Servlet的,因此,开发者可以很容易的更新展现代码。

JSP页面可以被预编译。

JSP页面可以很容易的和静态模板结合,包括:HTML或者XML,也可以很容易的和产生动态内容的代码结合起来。

开发者可以提供让页面设计者以类XML格式来访问的自定义的JSP标签库。

开发者可以在组件层做逻辑上的改变,而不需要编辑单独使用了应用层逻辑的页面。

110.什么是JSP指令(Directive)?JSP中有哪些不同类型的指令?

 

Directive是当JSP页面被编译成Servlet的时候,JSP引擎要处理的指令。Directive用来设置页面级别的指令,从外部文件插入数据,指定自定义的标签库。Directive是定义在<%@ 和 %>之间的。下面列出了不同类型的Directive:

 

包含指令(Include directive):用来包含文件和合并文件内容到当前的页面。

页面指令(Page directive):用来定义JSP页面中特定的属性,比如错误页面和缓冲区。

Taglib指令: 用来声明页面中使用的自定义的标签库。

 

111.什么是JSP动作(JSP action)?

 

JSP动作以XML语法的结构来控制Servlet引擎的行为。当JSP页面被请求的时候,JSP动作会被执行。它们可以被动态的插入到文件中,重用JavaBean组件,转发用户到其他的页面,或者是给Java插件产生HTML代码。下面列出了可用的动作:

 

jsp:include-当JSP页面被请求的时候包含一个文件。

jsp:useBean-找出或者是初始化Javabean。

jsp:setProperty-设置JavaBean的属性。

jsp:getProperty-获取JavaBean的属性。

jsp:forward-把请求转发到新的页面。

jsp:plugin-产生特定浏览器的代码。

 

112.什么是Scriptlets?

 

JSP技术中,scriptlet是嵌入在JSP页面中的一段Java代码。scriptlet是位于标签内部的所有的东西,在标签与标签之间,用户可以添加任意有效的scriplet。

 

113.声明(Decalaration)在哪里?

 

声明跟Java中的变量声明很相似,它用来声明随后要被表达式或者scriptlet使用的变量。添加的声明必须要用开始和结束标签包起来。

 

114.什么是表达式(Expression)?

 

JSP表达式是Web服务器把脚本语言表达式的值转化成一个String对象,插入到返回给客户端的数据流中。表达式是在<%=和%>这两个标签之间定义的。

 

115.隐含对象是什么意思?有哪些隐含对象?

 

JSP隐含对象是页面中的一些Java对象,JSP容器让这些Java对象可以为开发者所使用。开发者不用明确的声明就可以直接使用他们。JSP隐含对象也叫做预定义变量。下面列出了JSP页面中的隐含对象:

 

application

page

request

response

session

exception

out

config

pageContext

 

祝:编程快乐!

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

猜你喜欢

转载自blog.csdn.net/sggtgfs/article/details/82786353